libraries/libldap/init.c | 8 ++- libraries/libldap/ldap-int.h | 198 ++++++++++++++++++++++-------------------- 2 files changed, 110 insertions(+), 96 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..ac6c9e5 100644 --- a/libraries/libldap/ldap-int.h +++ b/libraries/libldap/ldap-int.h @@ -185,29 +185,59 @@ struct ldapoptions { #define LDAP_TRASHED_SESSION 0xFF int ldo_debug; -#ifdef LDAP_R_COMPILE - ldap_pvt_thread_mutex_t ldo_mutex; -#define LDAP_LDO_MUTEX_NULLARG , LDAP_PVT_MUTEX_NULL -#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* */ char* ldo_cldapdn; int ldo_is_udp; +#define LDAP_LDO_CONNECTIONLESS_NULLARG ,0,0,0 +#else +#define LDAP_LDO_CONNECTIONLESS_NULLARG #endif - /* 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 +#else +#define LDAP_LDO_MUTEX_NULLARG +#endif }; @@ -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 -#define ld_ldopts_mutex ld_options.ldo_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 {