local-nss-upgrade
authorGNU Libc Maintainers <debian-glibc@lists.debian.org>
Tue, 4 Aug 2020 15:02:38 +0000 (16:02 +0100)
committerAurelien Jarno <aurel32@debian.org>
Tue, 4 Aug 2020 15:02:38 +0000 (16:02 +0100)
# DP: This patch makes future upgrades easier. It resolves problems with
# DP: running daemons having NSS modules upgraded out from under them.

# 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 319e22c3fcb911be5fa76e144b297d3c88bcf130..fe82a3a4343f37d71e006bbf061dad94cb0dc57c 100644 (file)
@@ -359,9 +359,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)