svn commit: r339363 - head/lib/libc/net

Edward Tomasz Napierala trasz at FreeBSD.org
Mon Oct 15 17:50:04 UTC 2018


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;


More information about the svn-src-head mailing list