# DP: This patch makes future upgrades easier. It resolves problems with
# DP: running daemons having NSS modules upgraded out from under them.

---
 nss/nsswitch.c |   17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

--- a/nss/nsswitch.c
+++ b/nss/nsswitch.c
@@ -395,9 +395,20 @@
       ni->library->lib_handle = __libc_dlopen (shlib_name);
       if (ni->library->lib_handle == NULL)
 	{
-	  /* Failed to load the library.  */
-	  ni->library->lib_handle = (void *) -1l;
-	  __set_errno (saved_errno);
+	  /* Failed to load the library. Try a fallback.  */
+	  int n = __snprintf(shlib_name, shlen, "libnss_%s.so.%d.%d",
+			   ni->library->name, __GLIBC__, __GLIBC_MINOR__);
+	  if (n >= shlen)
+	    ni->library->lib_handle = NULL;
+	  else
+	    ni->library->lib_handle = __libc_dlopen (shlib_name);
+
+	  if (ni->library->lib_handle == NULL)
+	    {
+	      /* Ok, really fail now.  */
+	      ni->library->lib_handle = (void *) -1l;
+	      __set_errno (saved_errno);
+	    }
 	}
 # ifdef USE_NSCD
       else if (is_nscd)
