local-nss-upgrade
authorGNU Libc Maintainers <debian-glibc@lists.debian.org>
Thu, 29 Mar 2018 19:47:29 +0000 (20:47 +0100)
committerAurelien Jarno <aurel32@debian.org>
Thu, 29 Mar 2018 19:47:29 +0000 (20:47 +0100)
# DP: This patch makes future upgrades easier. It resolves problems with
# DP: running daemons having NSS modules upgraded out from under them.

Gbp-Pq: Topic any
Gbp-Pq: Name local-nss-upgrade.diff

nss/nsswitch.c

index b0f0c11a3e3595c742ff95946b6e7536006e36f3..dbbc3334eb65f095d85a944c14a884584b98dd1e 100644 (file)
@@ -369,9 +369,20 @@ nss_load_library (service_user *ni)
       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)