Author: trasz
Date: Mon Oct 15 17:50:02 2018
New Revision: 339363
URL: https://svnweb.freebsd.org/changeset/base/339363

Log:
  Don't call dlopen(3) for built-in NSS types - "cache", "compat",
  "dns", "files", "db", and "nis". It saves some path lookups during
  binary startup.
  
  Reviewed by:  markj
  Approved by:  re (gjb, kib)
  MFC after:    2 weeks
  Sponsored by: DARPA, AFRL
  Differential Revision:        https://reviews.freebsd.org/D17557

Modified:
  head/lib/libc/net/nsdispatch.3
  head/lib/libc/net/nsdispatch.c

Modified: head/lib/libc/net/nsdispatch.3
==============================================================================
--- head/lib/libc/net/nsdispatch.3      Mon Oct 15 17:23:41 2018        
(r339362)
+++ head/lib/libc/net/nsdispatch.3      Mon Oct 15 17:50:02 2018        
(r339363)
@@ -32,7 +32,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd April 4, 2010
+.Dd October 15, 2018
 .Dt NSDISPATCH 3
 .Os
 .Sh NAME
@@ -112,10 +112,7 @@ which case they are selected using the
 and
 .Fa method_name
 arguments along with the configured source.
-(The methods supplied via
-.Fa dtab
-take priority over those implemented in NSS modules in the event
-of a conflict.)
+Modules must use source names different from the built-in ones.
 .Pp
 .Va defaults
 contains a list of default sources to try if

Modified: head/lib/libc/net/nsdispatch.c
==============================================================================
--- head/lib/libc/net/nsdispatch.c      Mon Oct 15 17:23:41 2018        
(r339362)
+++ head/lib/libc/net/nsdispatch.c      Mon Oct 15 17:50:02 2018        
(r339363)
@@ -486,9 +486,19 @@ nss_load_module(const char *source, nss_module_registe
                 */
                mod.handle = nss_builtin_handle;
                fn = reg_fn;
-       } else if (!is_dynamic())
+       } else if (!is_dynamic()) {
                goto fin;
-       else {
+       } else if (strcmp(source, NSSRC_CACHE) == 0 ||
+           strcmp(source, NSSRC_COMPAT) == 0 ||
+           strcmp(source, NSSRC_DB) == 0 ||
+           strcmp(source, NSSRC_DNS) == 0 ||
+           strcmp(source, NSSRC_FILES) == 0 ||
+           strcmp(source, NSSRC_NIS) == 0) {
+               /*
+                * Avoid calling dlopen(3) for built-in modules.
+                */
+               goto fin;
+       } else {
                if (snprintf(buf, sizeof(buf), "nss_%s.so.%d", mod.name,
                    NSS_MODULE_INTERFACE_VERSION) >= (int)sizeof(buf))
                        goto fin;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to