summary refs log tree commit diff
path: root/nss/nsswitch.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-03-05 14:03:24 +0000
committerUlrich Drepper <drepper@redhat.com>1998-03-05 14:03:24 +0000
commitea278354429c511389edab51dcb588343652601d (patch)
treea78e3c472ce68aa2d1b1e5b415edd5f68e8969ec /nss/nsswitch.c
parent2eb45444a74df5f8d47ba14e318aff2e78a915db (diff)
downloadglibc-ea278354429c511389edab51dcb588343652601d.tar.gz
glibc-ea278354429c511389edab51dcb588343652601d.tar.xz
glibc-ea278354429c511389edab51dcb588343652601d.zip
Update.
1998-03-05  Ulrich Drepper  <drepper@cygnus.com>

	* elf/rtld.c: Speed up processing of environment variables.  Do
	only one run on the environment by avoiding to call getenv.
	* sysdeps/generic/dl-sysdep.c (_dl_next_ld_env_entry): New
	function.  Used by patch above.

1998-03-05 10:25  Ulrich Drepper  <drepper@cygnus.com>

	* nss/getXXbyYY_r.c: Don't try to contact nscd every time when it
	failed.  Only do this every NSS_NSCD_RETRY times.
	* nss/nsswitch.c: Define __nss_nscd_not_available, used by above
	change.
	* nscd/nscd_getgr_r.c (__nscd_getgr_r): Return 2 if contacting the
	daemon failed.
	* nscd/nscd_getpw_r.c (__nscd_getpw_r): Likewise.

1998-03-05  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nsswitch.c (nss_lookup_function): Don't modify errno if NSS
	module cannot be found.  Reported by Andreas Jaeger.

1998-03-05 11:40  Franz Sirl <Franz.Sirl-kernel@lauterbach.com>

	* nscd/nscd_getgr_r.c: Change char to int to avoid compiler warning
	on platforms which default to unsigned chars.
	* nscd/nscd_getpw_r.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/sysdep.h: Undefine L before
	defining it.

1998-03-05  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* elf/Makefile (install-bin): Change = to += for sprof to install
	ldd also.
Diffstat (limited to 'nss/nsswitch.c')
-rw-r--r--nss/nsswitch.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/nss/nsswitch.c b/nss/nsswitch.c
index 65da26b185..2a3e44a37d 100644
--- a/nss/nsswitch.c
+++ b/nss/nsswitch.c
@@ -69,6 +69,9 @@ static struct
 __libc_lock_define_initialized (static, lock)
 
 
+/* Nonzero if no NSCD is available.  */
+int __nss_nscd_not_available;
+
 #if !defined DO_STATIC_NSS || defined PIC
 /* String with revision number of the shared object files.  */
 static const char *const __nss_shlib_revision = LIBNSS_FILES_SO + 15;
@@ -380,7 +383,7 @@ nss_lookup_function (service_user *ni, const char *fct_name)
 	      /* Load the shared library.  */
 	      size_t shlen = (7 + strlen (ni->library->name) + 3
 			      + strlen (__nss_shlib_revision) + 1);
-
+	      int saved_errno = errno;
 	      struct do_open_args args;
 	      args.shlib_name = __alloca (shlen);
 	      args.ni = ni;
@@ -393,8 +396,11 @@ nss_lookup_function (service_user *ni, const char *fct_name)
 			__nss_shlib_revision);
 
 	      if (nss_dlerror_run (do_open, &args) != 0)
-		/* Failed to load the library.  */
-		ni->library->lib_handle = (void *) -1l;
+		{
+		  /* Failed to load the library.  */
+		  ni->library->lib_handle = (void *) -1l;
+		  __set_errno (saved_errno);
+		}
 	    }
 
 	  if (ni->library->lib_handle == (void *) -1l)