LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File glibc-nss-deepbind.diff of Package glibc.openSUSE_11.3 (Project home:lnussel:crypt_blowfish:maint)

Use DEEPBIND to load the nss modules.  Helps thunderbird (linked against its
own version of the ldap libs) when using nss_ldap (linked against system
libldap) leading to crashes due to incompatibilities.

This has a downside: Linking against libraries overriding malloc() and free()
will break (unless the malloc()'d pointers by glibc are free()able by these).
This is fixable in principle, just needs some work.

See https://bugzilla.novell.com/show_bug.cgi?id=157078 and
http://sourceware.org/bugzilla/show_bug.cgi?id=6610

Index: nss/nsswitch.c
===================================================================
--- nss/nsswitch.c.orig
+++ nss/nsswitch.c
@@ -361,7 +361,9 @@ __nss_lookup_function (service_user *ni,
 				  ".so"),
 			__nss_shlib_revision);
 
-	      ni->library->lib_handle = __libc_dlopen (shlib_name);
+	      ni->library->lib_handle
+		= __libc_dlopen_mode (shlib_name,
+				      RTLD_LAZY | __RTLD_DLOPEN | RTLD_DEEPBIND);
 	      if (ni->library->lib_handle == NULL)
 		{
 		  /* Failed to load the library.  */