summaryrefslogtreecommitdiff
path: root/core/openldap/mutex-end-of-struct-sigsegv.patch
blob: e8996386a91040057b190d6f42c0cb977abda3e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
 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 {