Date: Tuesday, January 24, 2012 @ 19:02:29 Author: dan Revision: 147238
Revised fix for upstream SIGSEGV issues Modified: openldap/trunk/PKGBUILD openldap/trunk/mutex-end-of-struct-sigsegv.patch -----------------------------------+ PKGBUILD | 2 mutex-end-of-struct-sigsegv.patch | 312 ++++++++++++++++++++++++++++++------ 2 files changed, 261 insertions(+), 53 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2012-01-24 23:42:32 UTC (rev 147237) +++ PKGBUILD 2012-01-25 00:02:29 UTC (rev 147238) @@ -17,7 +17,7 @@ 'bd1ea19256d3d467f1f803e0f4046ef50f17628f' 'd89b8a533045123f1ab46c9c430cf132d58a20a4' 'e4afd9f1c810ef4c4cd8fe1101dfe5887f2b7eef' - '7ca90dbe53c4207a2dee976359b8c6663e582d00') + '694269dad78c7a806649c2d7f57bb7e503df3af1') build() { cd "${srcdir}"/${pkgbase}-${pkgver} Modified: mutex-end-of-struct-sigsegv.patch =================================================================== --- mutex-end-of-struct-sigsegv.patch 2012-01-24 23:42:32 UTC (rev 147237) +++ mutex-end-of-struct-sigsegv.patch 2012-01-25 00:02:29 UTC (rev 147238) @@ -1,18 +1,31 @@ -From 270ef33acf18dc13bfd07f8a8e66b446f80e7d27 Mon Sep 17 00:00:00 2001 -From: Howard Chu <h...@openldap.org> -Date: Tue, 24 Jan 2012 13:32:52 -0800 -Subject: [PATCH 1/1] ITS#7118, #7133 tentative fix + libraries/libldap/init.c | 8 ++- + libraries/libldap/ldap-int.h | 198 ++++++++++++++++++++++-------------------- + 2 files changed, 110 insertions(+), 96 deletions(-) -Move mutexes to end of structs, so libldap can ignore them ---- - libraries/libldap/ldap-int.h | 40 ++++++++++++++++++++-------------------- - 1 files changed, 20 insertions(+), 20 deletions(-) - +diff --git a/libraries/libldap/init.c b/libraries/libldap/init.c +index 39292d2..9d37e64 100644 +--- a/libraries/libldap/init.c ++++ b/libraries/libldap/init.c +@@ -36,7 +36,13 @@ + #include "lutil.h" + + struct ldapoptions ldap_int_global_options = +- { LDAP_UNINITIALIZED, LDAP_DEBUG_NONE LDAP_LDO_MUTEX_NULLARG }; ++ { LDAP_UNINITIALIZED, LDAP_DEBUG_NONE ++ LDAP_LDO_NULLARG ++ LDAP_LDO_CONNECTIONLESS_NULLARG ++ LDAP_LDO_TLS_NULLARG ++ LDAP_LDO_SASL_NULLARG ++ LDAP_LDO_GSSAPI_NULLARG ++ LDAP_LDO_MUTEX_NULLARG }; + + #define ATTR_NONE 0 + #define ATTR_BOOL 1 diff --git a/libraries/libldap/ldap-int.h b/libraries/libldap/ldap-int.h -index f8e6126..6b33bcd 100644 +index f8e6126..ac6c9e5 100644 --- a/libraries/libldap/ldap-int.h +++ b/libraries/libldap/ldap-int.h -@@ -185,13 +185,6 @@ struct ldapoptions { +@@ -185,29 +185,59 @@ struct ldapoptions { #define LDAP_TRASHED_SESSION 0xFF int ldo_debug; @@ -22,15 +35,136 @@ -#else -#define LDAP_LDO_MUTEX_NULLARG -#endif -- ++ ber_int_t ldo_version; ++ ber_int_t ldo_deref; ++ ber_int_t ldo_timelimit; ++ ber_int_t ldo_sizelimit; ++ ++ /* per API call timeout */ ++ struct timeval ldo_tm_api; ++ struct timeval ldo_tm_net; ++ ++ LDAPURLDesc *ldo_defludp; ++ int ldo_defport; ++ char* ldo_defbase; ++ char* ldo_defbinddn; /* bind dn */ ++ ++ /* ++ * Per connection tcp-keepalive settings (Linux only, ++ * ignored where unsupported) ++ */ ++ ber_int_t ldo_keepalive_idle; ++ ber_int_t ldo_keepalive_probes; ++ ber_int_t ldo_keepalive_interval; ++ ++ int ldo_refhoplimit; /* limit on referral nesting */ ++ ++ /* LDAPv3 server and client controls */ ++ LDAPControl **ldo_sctrls; ++ LDAPControl **ldo_cctrls; ++ ++ /* LDAP rebind callback function */ ++ LDAP_REBIND_PROC *ldo_rebind_proc; ++ void *ldo_rebind_params; ++ LDAP_NEXTREF_PROC *ldo_nextref_proc; ++ void *ldo_nextref_params; ++ LDAP_URLLIST_PROC *ldo_urllist_proc; ++ void *ldo_urllist_params; ++ ++ /* LDAP connection callback stack */ ++ ldaplist *ldo_conn_cbs; ++ ++ LDAP_BOOLEANS ldo_booleans; /* boolean options */ ++ ++#define LDAP_LDO_NULLARG ,0,0,0,0 ,{0},{0} ,0,0,0,0, 0,0,0,0, 0,0, 0,0,0,0,0,0, 0, 0 + #ifdef LDAP_CONNECTIONLESS #define LDAP_IS_UDP(ld) ((ld)->ld_options.ldo_is_udp) void* ldo_peer; /* struct sockaddr* */ -@@ -281,6 +274,13 @@ struct ldapoptions { - ldaplist *ldo_conn_cbs; + char* ldo_cldapdn; + int ldo_is_udp; ++#define LDAP_LDO_CONNECTIONLESS_NULLARG ,0,0,0 ++#else ++#define LDAP_LDO_CONNECTIONLESS_NULLARG + #endif - LDAP_BOOLEANS ldo_booleans; /* boolean options */ -+ +- /* per API call timeout */ +- struct timeval ldo_tm_api; +- struct timeval ldo_tm_net; +- +- ber_int_t ldo_version; +- ber_int_t ldo_deref; +- ber_int_t ldo_timelimit; +- ber_int_t ldo_sizelimit; +- + #ifdef HAVE_TLS + /* tls context */ + void *ldo_tls_ctx; +@@ -226,16 +256,12 @@ struct ldapoptions { + int ldo_tls_mode; + int ldo_tls_require_cert; + int ldo_tls_impl; +-#ifdef HAVE_OPENSSL_CRL + int ldo_tls_crlcheck; +-#endif ++#define LDAP_LDO_TLS_NULLARG ,0,0,0,{0,0,0,0,0,0,0,0,0},0,0,0,0 ++#else ++#define LDAP_LDO_TLS_NULLARG + #endif + +- LDAPURLDesc *ldo_defludp; +- int ldo_defport; +- char* ldo_defbase; +- char* ldo_defbinddn; /* bind dn */ +- + #ifdef HAVE_CYRUS_SASL + char* ldo_def_sasl_mech; /* SASL Mechanism(s) */ + char* ldo_def_sasl_realm; /* SASL realm */ +@@ -244,6 +270,9 @@ struct ldapoptions { + + /* SASL Security Properties */ + struct sasl_security_properties ldo_sasl_secprops; ++#define LDAP_LDO_SASL_NULLARG ,0,0,0,0,{0} ++#else ++#define LDAP_LDO_SASL_NULLARG + #endif + + #ifdef HAVE_GSSAPI +@@ -253,34 +282,17 @@ struct ldapoptions { + #define LDAP_GSSAPI_OPT_DO_NOT_FREE_GSS_CONTEXT 0x0001 + #define LDAP_GSSAPI_OPT_ALLOW_REMOTE_PRINCIPAL 0x0002 + unsigned ldo_gssapi_options; ++#define LDAP_LDO_GSSAPI_NULLARG ,0,0 ++#else ++#define LDAP_LDO_GSSAPI_NULLARG + #endif + +- /* +- * Per connection tcp-keepalive settings (Linux only, +- * ignored where unsupported) +- */ +- ber_int_t ldo_keepalive_idle; +- ber_int_t ldo_keepalive_probes; +- ber_int_t ldo_keepalive_interval; +- +- int ldo_refhoplimit; /* limit on referral nesting */ +- +- /* LDAPv3 server and client controls */ +- LDAPControl **ldo_sctrls; +- LDAPControl **ldo_cctrls; +- +- /* LDAP rebind callback function */ +- LDAP_REBIND_PROC *ldo_rebind_proc; +- void *ldo_rebind_params; +- LDAP_NEXTREF_PROC *ldo_nextref_proc; +- void *ldo_nextref_params; +- LDAP_URLLIST_PROC *ldo_urllist_proc; +- void *ldo_urllist_params; +- +- /* LDAP connection callback stack */ +- ldaplist *ldo_conn_cbs; +- +- LDAP_BOOLEANS ldo_booleans; /* boolean options */ +#ifdef LDAP_R_COMPILE + ldap_pvt_thread_mutex_t ldo_mutex; +#define LDAP_LDO_MUTEX_NULLARG , LDAP_PVT_MUTEX_NULL @@ -40,46 +174,120 @@ }; -@@ -422,19 +422,6 @@ struct ldap_common { - #define ld_requests ldc->ldc_requests - #define ld_responses ldc->ldc_responses +@@ -375,6 +387,46 @@ struct ldap_common { + Sockbuf *ldc_sb; /* socket descriptor & buffer */ + #define ld_sb ldc->ldc_sb ++ unsigned short ldc_lberoptions; ++#define ld_lberoptions ldc->ldc_lberoptions ++ ++ /* protected by msgid_mutex */ ++ ber_len_t ldc_msgid; ++#define ld_msgid ldc->ldc_msgid ++ ++ /* do not mess with these */ ++ /* protected by req_mutex */ ++ LDAPRequest *ldc_requests; /* list of outstanding requests */ ++ /* protected by res_mutex */ ++ LDAPMessage *ldc_responses; /* list of outstanding responses */ ++#define ld_requests ldc->ldc_requests ++#define ld_responses ldc->ldc_responses ++ ++ /* protected by abandon_mutex */ ++ ber_len_t ldc_nabandoned; ++ ber_int_t *ldc_abandoned; /* array of abandoned requests */ ++#define ld_nabandoned ldc->ldc_nabandoned ++#define ld_abandoned ldc->ldc_abandoned ++ ++ /* unused by libldap */ ++ LDAPCache *ldc_cache; /* non-null if cache is initialized */ ++#define ld_cache ldc->ldc_cache ++ ++ /* do not mess with the rest though */ ++ ++ /* protected by conn_mutex */ ++ LDAPConn *ldc_defconn; /* default connection */ ++#define ld_defconn ldc->ldc_defconn ++ LDAPConn *ldc_conns; /* list of server connections */ ++#define ld_conns ldc->ldc_conns ++ void *ldc_selectinfo;/* platform specifics for select */ ++#define ld_selectinfo ldc->ldc_selectinfo ++ ++ /* ldap_common refcnt - free only if 0 */ ++ /* protected by ldc_mutex */ ++ unsigned int ldc_refcnt; ++#define ld_ldcrefcnt ldc->ldc_refcnt ++ + /* protected by ldo_mutex */ + struct ldapoptions ldc_options; + #define ld_options ldc->ldc_options +@@ -403,66 +455,22 @@ struct ldap_common { + #define ld_urllist_params ld_options.ldo_urllist_params + + #define ld_version ld_options.ldo_version -#ifdef LDAP_R_COMPILE -- ldap_pvt_thread_mutex_t ldc_msgid_mutex; -- ldap_pvt_thread_mutex_t ldc_conn_mutex; -- ldap_pvt_thread_mutex_t ldc_req_mutex; -- ldap_pvt_thread_mutex_t ldc_res_mutex; -- ldap_pvt_thread_mutex_t ldc_abandon_mutex; --#define ld_msgid_mutex ldc->ldc_msgid_mutex --#define ld_conn_mutex ldc->ldc_conn_mutex --#define ld_req_mutex ldc->ldc_req_mutex --#define ld_res_mutex ldc->ldc_res_mutex --#define ld_abandon_mutex ldc->ldc_abandon_mutex +-#define ld_ldopts_mutex ld_options.ldo_mutex -#endif - - /* protected by abandon_mutex */ - ber_len_t ldc_nabandoned; - ber_int_t *ldc_abandoned; /* array of abandoned requests */ -@@ -463,6 +450,19 @@ struct ldap_common { - /* protected by ldc_mutex */ - unsigned int ldc_refcnt; - #define ld_ldcrefcnt ldc->ldc_refcnt -+ -+#ifdef LDAP_R_COMPILE -+ ldap_pvt_thread_mutex_t ldc_msgid_mutex; -+ ldap_pvt_thread_mutex_t ldc_conn_mutex; -+ ldap_pvt_thread_mutex_t ldc_req_mutex; -+ ldap_pvt_thread_mutex_t ldc_res_mutex; -+ ldap_pvt_thread_mutex_t ldc_abandon_mutex; -+#define ld_msgid_mutex ldc->ldc_msgid_mutex -+#define ld_conn_mutex ldc->ldc_conn_mutex -+#define ld_req_mutex ldc->ldc_req_mutex -+#define ld_res_mutex ldc->ldc_res_mutex -+#define ld_abandon_mutex ldc->ldc_abandon_mutex -+#endif +- unsigned short ldc_lberoptions; +-#define ld_lberoptions ldc->ldc_lberoptions +- +- /* protected by msgid_mutex */ +- ber_len_t ldc_msgid; +-#define ld_msgid ldc->ldc_msgid +- +- /* do not mess with these */ +- /* protected by req_mutex */ +- LDAPRequest *ldc_requests; /* list of outstanding requests */ +- /* protected by res_mutex */ +- LDAPMessage *ldc_responses; /* list of outstanding responses */ +-#define ld_requests ldc->ldc_requests +-#define ld_responses ldc->ldc_responses + + #ifdef LDAP_R_COMPILE ++ ldap_pvt_thread_mutex_t ldc_mutex; + ldap_pvt_thread_mutex_t ldc_msgid_mutex; + ldap_pvt_thread_mutex_t ldc_conn_mutex; + ldap_pvt_thread_mutex_t ldc_req_mutex; + ldap_pvt_thread_mutex_t ldc_res_mutex; + ldap_pvt_thread_mutex_t ldc_abandon_mutex; ++#define ld_ldopts_mutex ld_options.ldo_mutex ++#define ld_ldcmutex ldc->ldc_mutex + #define ld_msgid_mutex ldc->ldc_msgid_mutex + #define ld_conn_mutex ldc->ldc_conn_mutex + #define ld_req_mutex ldc->ldc_req_mutex + #define ld_res_mutex ldc->ldc_res_mutex + #define ld_abandon_mutex ldc->ldc_abandon_mutex + #endif +- +- /* protected by abandon_mutex */ +- ber_len_t ldc_nabandoned; +- ber_int_t *ldc_abandoned; /* array of abandoned requests */ +-#define ld_nabandoned ldc->ldc_nabandoned +-#define ld_abandoned ldc->ldc_abandoned +- +- /* unused by libldap */ +- LDAPCache *ldc_cache; /* non-null if cache is initialized */ +-#define ld_cache ldc->ldc_cache +- +- /* do not mess with the rest though */ +- +- /* protected by conn_mutex */ +- LDAPConn *ldc_defconn; /* default connection */ +-#define ld_defconn ldc->ldc_defconn +- LDAPConn *ldc_conns; /* list of server connections */ +-#define ld_conns ldc->ldc_conns +- void *ldc_selectinfo;/* platform specifics for select */ +-#define ld_selectinfo ldc->ldc_selectinfo +- +- /* ldap_common refcnt - free only if 0 */ +-#ifdef LDAP_R_COMPILE +- ldap_pvt_thread_mutex_t ldc_mutex; +-#define ld_ldcmutex ldc->ldc_mutex +-#endif +- /* protected by ldc_mutex */ +- unsigned int ldc_refcnt; +-#define ld_ldcrefcnt ldc->ldc_refcnt }; struct ldap { --- -1.7.4.2 -