From 40a2db889caad7472ef347c83f0f9c5f906792da Mon Sep 17 00:00:00 2001
From: Howard Chu <hyc@openldap.org>
Date: Tue, 24 Jan 2012 14:40:00 -0800
Subject: [PATCH] More for prev commit
 (270ef33acf18dc13bfd07f8a8e66b446f80e7d27)

---
 libraries/libldap/init.c     |   8 +-
 libraries/libldap/ldap-int.h | 166 ++++++++++++++++++-----------------
 2 files changed, 94 insertions(+), 80 deletions(-)

diff --git a/libraries/libldap/init.c b/libraries/libldap/init.c
index 8b5b2e6228..c87e7d0aa8 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 6db09cf238..c722088290 100644
--- a/libraries/libldap/ldap-int.h
+++ b/libraries/libldap/ldap-int.h
@@ -188,22 +188,59 @@ struct ldapoptions {
 #define LDAP_TRASHED_SESSION	0xFF
 	int   ldo_debug;
 
+	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;
@@ -222,15 +259,11 @@ struct ldapoptions {
    	int			ldo_tls_mode;
    	int			ldo_tls_require_cert;
 	int			ldo_tls_impl;
-#ifdef HAVE_OPENSSL_CRL
    	int			ldo_tls_crlcheck;
+#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
-#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) */
@@ -240,6 +273,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
@@ -249,35 +285,11 @@ 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
@@ -378,38 +390,6 @@ struct ldap_common {
 	Sockbuf		*ldc_sb;	/* socket descriptor & buffer */
 #define ld_sb			ldc->ldc_sb
 
-	/* protected by ldo_mutex */
-	struct ldapoptions ldc_options;
-#define ld_options		ldc->ldc_options
-
-#define ld_valid		ld_options.ldo_valid
-#define ld_debug		ld_options.ldo_debug
-
-#define ld_deref		ld_options.ldo_deref
-#define ld_timelimit		ld_options.ldo_timelimit
-#define ld_sizelimit		ld_options.ldo_sizelimit
-
-#define ld_defbinddn		ld_options.ldo_defbinddn
-#define ld_defbase		ld_options.ldo_defbase
-#define ld_defhost		ld_options.ldo_defhost
-#define ld_defport		ld_options.ldo_defport
-
-#define ld_refhoplimit		ld_options.ldo_refhoplimit
-
-#define ld_sctrls		ld_options.ldo_sctrls
-#define ld_cctrls		ld_options.ldo_cctrls
-#define ld_rebind_proc		ld_options.ldo_rebind_proc
-#define ld_rebind_params	ld_options.ldo_rebind_params
-#define ld_nextref_proc		ld_options.ldo_nextref_proc
-#define ld_nextref_params	ld_options.ldo_nextref_params
-#define ld_urllist_proc		ld_options.ldo_urllist_proc
-#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
 
@@ -446,20 +426,48 @@ struct ldap_common {
 #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
 
+	/* protected by ldo_mutex */
+	struct ldapoptions ldc_options;
+#define ld_options		ldc->ldc_options
+
+#define ld_valid		ld_options.ldo_valid
+#define ld_debug		ld_options.ldo_debug
+
+#define ld_deref		ld_options.ldo_deref
+#define ld_timelimit		ld_options.ldo_timelimit
+#define ld_sizelimit		ld_options.ldo_sizelimit
+
+#define ld_defbinddn		ld_options.ldo_defbinddn
+#define ld_defbase		ld_options.ldo_defbase
+#define ld_defhost		ld_options.ldo_defhost
+#define ld_defport		ld_options.ldo_defport
+
+#define ld_refhoplimit		ld_options.ldo_refhoplimit
+
+#define ld_sctrls		ld_options.ldo_sctrls
+#define ld_cctrls		ld_options.ldo_cctrls
+#define ld_rebind_proc		ld_options.ldo_rebind_proc
+#define ld_rebind_params	ld_options.ldo_rebind_params
+#define ld_nextref_proc		ld_options.ldo_nextref_proc
+#define ld_nextref_params	ld_options.ldo_nextref_params
+#define ld_urllist_proc		ld_options.ldo_urllist_proc
+#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_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
-- 
GitLab