source: npl/system/nss_ldap/patches/glibc-2.16.patch @ 439f083

Last change on this file since 439f083 was c5c522c, checked in by Edwin Eefting <edwin@datux.nl>, 8 years ago

initial commit, transferred from cleaned syn3 svn tree

  • Property mode set to 100644
File size: 5.1 KB
RevLine 
[c5c522c]1Description: Handle removal of __libc_lock_lock and similar symbols from libc
2Bug: http://bugzilla.padl.com/show_bug.cgi?id=445
3Bug-Debian: http://bugs.debian.org/727177
4Bug-Arch-Linux-ARM: https://github.com/archlinuxarm/PKGBUILDs/issues/296
5Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=438692
6Author: Dennis Schridde <devurandom@gmx.net>
7
8--- a/ldap-nss.c
9+++ b/ldap-nss.c
10@@ -142,7 +142,7 @@ static void (*__sigpipe_handler) (int) =
11  */
12 static ldap_session_t __session = { NULL, NULL, 0, LS_UNINITIALIZED };
13 
14-#if defined(HAVE_PTHREAD_ATFORK) || defined(HAVE_LIBC_LOCK_H) || defined(HAVE_BITS_LIBC_LOCK_H)
15+#if defined(HAVE_PTHREAD_ATFORK) || defined(HAVE___LIBC_ONCE)
16 static pthread_once_t __once = PTHREAD_ONCE_INIT;
17 #endif
18 
19@@ -150,7 +150,7 @@ static pthread_once_t __once = PTHREAD_O
20 static FILE *__debugfile;
21 #endif /* LBER_OPT_LOG_PRINT_FILE */
22 
23-#ifndef HAVE_PTHREAD_ATFORK
24+#if !defined(HAVE_PTHREAD_ATFORK) || !defined(HAVE___LIBC_ONCE)
25 /*
26  * Process ID that opened the session.
27  */
28@@ -162,7 +162,7 @@ static uid_t __euid = -1;
29 static int __ssl_initialized = 0;
30 #endif /* HAVE_LDAPSSL_CLIENT_INIT */
31 
32-#if defined(HAVE_PTHREAD_ATFORK) || defined(HAVE_LIBC_LOCK_H) || defined(HAVE_BITS_LIBC_LOCK_H)
33+#if defined(HAVE_PTHREAD_ATFORK) || defined(HAVE___LIBC_ONCE)
34 /*
35  * Prepare for fork(); lock mutex.
36  */
37@@ -514,7 +514,7 @@ _nss_ldap_default_constr (nss_ldap_backe
38 }
39 #endif /* HAVE_NSSWITCH_H */
40 
41-#if defined(HAVE_PTHREAD_ATFORK) || defined(HAVE_LIBC_LOCK_H) || defined(HAVE_BITS_LIBC_LOCK_H)
42+#if defined(HAVE_PTHREAD_ATFORK) || defined(HAVE___LIBC_ONCE)
43 static void
44 do_atfork_prepare (void)
45 {
46@@ -548,7 +548,7 @@ do_atfork_setup (void)
47 #ifdef HAVE_PTHREAD_ATFORK
48   (void) pthread_atfork (do_atfork_prepare, do_atfork_parent,
49                         do_atfork_child);
50-#elif defined(HAVE_LIBC_LOCK_H) || defined(HAVE_BITS_LIBC_LOCK_H)
51+#elif defined(HAVE___LIBC_ATFORK)
52   (void) __libc_atfork (do_atfork_prepare, do_atfork_parent, do_atfork_child);
53 #endif
54 
55@@ -1111,7 +1111,7 @@ static NSS_STATUS
56 do_init (void)
57 {
58   ldap_config_t *cfg;
59-#ifndef HAVE_PTHREAD_ATFORK
60+#if !defined(HAVE_PTHREAD_ATFORK) || !defined(HAVE___LIBC_ONCE)
61   pid_t pid;
62 #endif
63   uid_t euid;
64@@ -1128,7 +1128,7 @@ do_init (void)
65     }
66 
67 #ifndef HAVE_PTHREAD_ATFORK
68-#if defined(HAVE_LIBC_LOCK_H) || defined(HAVE_BITS_LIBC_LOCK_H)
69+#if defined(HAVE___LIBC_ONCE)
70   /*
71    * This bogosity is necessary because Linux uses different
72    * PIDs for different threads (like IRIX, which we don't
73@@ -1160,7 +1160,7 @@ do_init (void)
74     pid = -1;                  /* linked against libpthreads, don't care */
75 #else
76   pid = getpid ();
77-#endif /* HAVE_LIBC_LOCK_H || HAVE_BITS_LIBC_LOCK_H */
78+#endif /* HAVE___LIBC_ONCE */
79 #endif /* HAVE_PTHREAD_ATFORK */
80 
81   euid = geteuid ();
82@@ -1170,7 +1170,7 @@ do_init (void)
83   syslog (LOG_AUTHPRIV | LOG_DEBUG,
84          "nss_ldap: __session.ls_state=%d, __session.ls_conn=%p, __euid=%i, euid=%i",
85          __session.ls_state, __session.ls_conn, __euid, euid);
86-#elif defined(HAVE_LIBC_LOCK_H) || defined(HAVE_BITS_LIBC_LOCK_H)
87+#elif defined(HAVE___LIBC_ONCE)
88   syslog (LOG_AUTHPRIV | LOG_DEBUG,
89          "nss_ldap: libpthreads=%s, __session.ls_state=%d, __session.ls_conn=%p, __pid=%i, pid=%i, __euid=%i, euid=%i",
90          ((__pthread_once == NULL || __pthread_atfork == NULL) ? "FALSE" : "TRUE"),
91@@ -1194,11 +1194,11 @@ do_init (void)
92     }
93   else
94 #ifndef HAVE_PTHREAD_ATFORK
95-#if defined(HAVE_LIBC_LOCK_H) || defined(HAVE_BITS_LIBC_LOCK_H)
96+#if defined(HAVE___LIBC_ONCE)
97   if ((__pthread_once == NULL || __pthread_atfork == NULL) && __pid != pid)
98 #else
99   if (__pid != pid)
100-#endif /* HAVE_LIBC_LOCK_H || HAVE_BITS_LIBC_LOCK_H */
101+#endif /* HAVE___LIBC_ONCE */
102     {
103       do_close_no_unbind ();
104     }
105@@ -1259,9 +1259,9 @@ do_init (void)
106       debug ("<== do_init (pthread_once failed)");
107       return NSS_UNAVAIL;
108     }
109-#elif defined(HAVE_PTHREAD_ATFORK) && ( defined(HAVE_LIBC_LOCK_H) || defined(HAVE_BITS_LIBC_LOCK_H) )
110+#elif defined(HAVE_PTHREAD_ATFORK) && defined(HAVE___LIBC_ONCE)
111   __libc_once (__once, do_atfork_setup);
112-#elif defined(HAVE_LIBC_LOCK_H) || defined(HAVE_BITS_LIBC_LOCK_H)
113+#elif defined(HAVE___LIBC_ONCE)
114   /*
115    * Only install the pthread_atfork() handlers i
116    * we are linked against libpthreads. Otherwise,
117--- a/ldap-nss.h
118+++ b/ldap-nss.h
119@@ -670,7 +670,7 @@ extern int __multi_threaded;
120 #define NSS_LDAP_LOCK(m)               mutex_lock(&m)
121 #define NSS_LDAP_UNLOCK(m)             mutex_unlock(&m)
122 #define NSS_LDAP_DEFINE_LOCK(m)                static mutex_t m = DEFAULTMUTEX
123-#elif defined(HAVE_LIBC_LOCK_H) || defined(HAVE_BITS_LIBC_LOCK_H)
124+#elif defined(HAVE___LIBC_LOCK_LOCK) && defined(HAVE___LIBC_LOCK_UNLOCK)
125 #define NSS_LDAP_LOCK(m)               __libc_lock_lock(m)
126 #define NSS_LDAP_UNLOCK(m)             __libc_lock_unlock(m)
127 #define NSS_LDAP_DEFINE_LOCK(m)                static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER
128--- a/configure.in
129+++ b/configure.in
130@@ -234,6 +234,7 @@ AC_CHECK_FUNCS(pthread_atfork)
131 AC_CHECK_FUNCS(pthread_once)
132 AC_CHECK_FUNCS(ether_aton)
133 AC_CHECK_FUNCS(ether_ntoa)
134+AC_CHECK_FUNCS(__libc_once __libc_atfork __libc_lock_lock __libc_lock_unlock)
135 
136 AC_MSG_CHECKING(for struct ether_addr)
137 AC_TRY_COMPILE([#include <sys/types.h>
Note: See TracBrowser for help on using the repository browser.