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 {
|