From: GNU Libc Maintainers Date: Wed, 19 Apr 2023 21:17:51 +0000 (+0100) Subject: local-nss-upgrade X-Git-Tag: archive/raspbian/2.31-13+rpi1+deb11u6^2~20 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=66eb8cced570667e30bd70e35fb9ce2390b38d6f;p=glibc.git local-nss-upgrade # 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 --- diff --git a/nss/nsswitch.c b/nss/nsswitch.c index 319e22c3f..fe82a3a43 100644 --- a/nss/nsswitch.c +++ b/nss/nsswitch.c @@ -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)