local-nss-upgrade
authorGNU Libc Maintainers <debian-glibc@lists.debian.org>
Sun, 14 Jan 2018 10:24:48 +0000 (10:24 +0000)
committerAurelien Jarno <aurel32@debian.org>
Sun, 14 Jan 2018 10:24:48 +0000 (10:24 +0000)
# 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 8f31658523b9a71b6b1e0119b5edfd9a0fd6e919..37d5dd91d9374cedcde2399ceae74286486d69bf 100644 (file)
@@ -358,9 +358,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)