ldap.h 41.2 KB
Newer Older
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1
/* $OpenLDAP$ */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
2
3
4
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
 * 
 * Copyright 1998-2003 The OpenLDAP Foundation.
5
6
 * All rights reserved.
 *
7
8
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted only as authorized by the OpenLDAP
Kurt Zeilenga's avatar
Kurt Zeilenga committed
9
10
11
12
13
 * Public License.
 *
 * A copy of this license is available in file LICENSE in the
 * top-level directory of the distribution or, alternatively, at
 * <http://www.OpenLDAP.org/license.html>.
14
 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
15
/* Portions Copyright (c) 1990 Regents of the University of Michigan.
Kurt Zeilenga's avatar
Kurt Zeilenga committed
16
17
18
19
20
21
22
23
24
25
26
27
28
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms are permitted
 * provided that this notice is preserved and that due credit is given
 * to the University of Michigan at Ann Arbor. The name of the University
 * may not be used to endorse or promote products derived from this
 * software without specific prior written permission. This software
 * is provided ``as is'' without express or implied warranty.
 */

#ifndef _LDAP_H
#define _LDAP_H

Kurt Zeilenga's avatar
Kurt Zeilenga committed
29
/* pull in lber */
30
31
#include <lber.h>

32
33
34
/* include version and API feature defines */
#include <ldap_features.h>

Kurt Zeilenga's avatar
Kurt Zeilenga committed
35
LDAP_BEGIN_DECL
Kurt Zeilenga's avatar
Kurt Zeilenga committed
36
37
38

#define LDAP_VERSION1	1
#define LDAP_VERSION2	2
Kurt Zeilenga's avatar
Kurt Zeilenga committed
39
#define LDAP_VERSION3	3
40
41

#define LDAP_VERSION_MIN	LDAP_VERSION2
42
43
#define	LDAP_VERSION		LDAP_VERSION2
#define LDAP_VERSION_MAX	LDAP_VERSION3
Kurt Zeilenga's avatar
Kurt Zeilenga committed
44

45
46
/*
 * We'll use 2000+draft revision for our API version number
47
 * As such, the number will be above the old RFC but below
48
49
 * whatever number does finally get assigned
 */
50
#define LDAP_API_VERSION	2004
51
#define LDAP_VENDOR_NAME	"OpenLDAP"
52

53
/* OpenLDAP API Features */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
54
#define LDAP_API_FEATURE_X_OPENLDAP LDAP_VENDOR_VERSION
55

56
57
58
59
60
61
62
63
64
65
66
67
68
#if defined( LDAP_API_FEATURE_X_OPENLDAP_REENTRANT ) || \
	( defined( LDAP_THREAD_SAFE ) && \
		defined( LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE ) )
	/* -lldap may or may not be thread safe */
	/* -lldap_r, if available, is always thread safe */
#	define	LDAP_API_FEATURE_THREAD_SAFE 1
#endif
#if defined( LDAP_THREAD_SAFE ) && \
	defined( LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE )
/* #define LDAP_API_FEATURE_SESSION_SAFE	1	*/
/* #define LDAP_API_OPERATION_SESSION_SAFE	1	*/
#endif

Kurt Zeilenga's avatar
Kurt Zeilenga committed
69
70
#define LDAP_PORT		389		/* ldap:///		default LDAP port */
#define LDAPS_PORT		636		/* ldaps:///	default LDAP over TLS port */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
71
72
73
74

#define LDAP_ROOT_DSE				""
#define LDAP_NO_ATTRS				"1.1"
#define LDAP_ALL_USER_ATTRIBUTES	"*"
75
#define LDAP_ALL_OPERATIONAL_ATTRIBUTES	"+" /* OpenLDAP extension */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
76

Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
77
78
79
80
81
82
/*
 * LDAP_OPTions defined by draft-ldapext-ldap-c-api-02
 * 0x0000 - 0x0fff reserved for api options
 * 0x1000 - 0x3fff reserved for api extended options
 * 0x4000 - 0x7fff reserved for private and experimental options
 */
83
#define LDAP_OPT_API_INFO			0x0000
84
#define LDAP_OPT_DESC				0x0001 /* deprecated */
85
86
87
#define LDAP_OPT_DEREF				0x0002
#define LDAP_OPT_SIZELIMIT			0x0003
#define LDAP_OPT_TIMELIMIT			0x0004
Kurt Zeilenga's avatar
Kurt Zeilenga committed
88
/* 0x05 - 0x07 not defined by current draft */
89
90
#define LDAP_OPT_REFERRALS			0x0008
#define LDAP_OPT_RESTART			0x0009
Kurt Zeilenga's avatar
Kurt Zeilenga committed
91
/* 0x0a - 0x10 not defined by current draft */
92
93
94
#define LDAP_OPT_PROTOCOL_VERSION	0x0011
#define LDAP_OPT_SERVER_CONTROLS	0x0012
#define LDAP_OPT_CLIENT_CONTROLS	0x0013
Kurt Zeilenga's avatar
Kurt Zeilenga committed
95
96
97
98
/* 0x14 not defined by current draft */
#define LDAP_OPT_API_FEATURE_INFO	0x0015

/* 0x16 - 0x2f not defined by current draft */
99
#define LDAP_OPT_HOST_NAME			0x0030
100
101
#define LDAP_OPT_RESULT_CODE		0x0031
#define LDAP_OPT_ERROR_NUMBER		LDAP_OPT_RESULT_CODE
102
#define LDAP_OPT_ERROR_STRING		0x0032
103
#define LDAP_OPT_MATCHED_DN			0x0033
104

105
/* 0x34 - 0x0fff not defined by current draft */
Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
106

107
108
#define LDAP_OPT_PRIVATE_EXTENSION_BASE 0x4000  /* to 0x7FFF inclusive */

Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
109
/* private and experimental options */
110
/* OpenLDAP specific options */
Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
111
112
113
#define LDAP_OPT_DEBUG_LEVEL		0x5001	/* debug level */
#define LDAP_OPT_TIMEOUT			0x5002	/* default timeout */
#define LDAP_OPT_REFHOPLIMIT		0x5003	/* ref hop limit */
114
#define LDAP_OPT_NETWORK_TIMEOUT	0x5005	/* socket level timeout */
115
#define LDAP_OPT_URI				0x5006
116
#define LDAP_OPT_REFERRAL_URLS      0x5007  /* Referral URLs */
117

118
/* OpenLDAP TLS options */
119
120
121
122
#define LDAP_OPT_X_TLS				0x6000
#define LDAP_OPT_X_TLS_CTX			0x6001	/* SSL CTX */
#define LDAP_OPT_X_TLS_CACERTFILE	0x6002
#define LDAP_OPT_X_TLS_CACERTDIR	0x6003
Julio Sánchez Fernández's avatar
   
Julio Sánchez Fernández committed
123
124
125
#define LDAP_OPT_X_TLS_CERTFILE		0x6004
#define LDAP_OPT_X_TLS_KEYFILE		0x6005
#define LDAP_OPT_X_TLS_REQUIRE_CERT	0x6006
126
/* #define LDAP_OPT_X_TLS_PROTOCOL		0x6007 */
127
128
#define LDAP_OPT_X_TLS_CIPHER_SUITE	0x6008
#define LDAP_OPT_X_TLS_RANDOM_FILE	0x6009
129
#define LDAP_OPT_X_TLS_SSL_CTX		0x600a
Julio Sánchez Fernández's avatar
   
Julio Sánchez Fernández committed
130
131
132
133
134
135
136

#define LDAP_OPT_X_TLS_NEVER		0
#define LDAP_OPT_X_TLS_HARD		1
#define LDAP_OPT_X_TLS_DEMAND		2
#define LDAP_OPT_X_TLS_ALLOW		3
#define LDAP_OPT_X_TLS_TRY		4

137
/* OpenLDAP SASL options */
138
139
140
141
142
143
144
145
146
147
#define LDAP_OPT_X_SASL_MECH			0x6100
#define LDAP_OPT_X_SASL_REALM			0x6101
#define LDAP_OPT_X_SASL_AUTHCID			0x6102
#define LDAP_OPT_X_SASL_AUTHZID			0x6103
#define LDAP_OPT_X_SASL_SSF				0x6104 /* read-only */
#define LDAP_OPT_X_SASL_SSF_EXTERNAL	0x6105 /* write-only */
#define LDAP_OPT_X_SASL_SECPROPS		0x6106 /* write-only */
#define LDAP_OPT_X_SASL_SSF_MIN			0x6107
#define LDAP_OPT_X_SASL_SSF_MAX			0x6108
#define	LDAP_OPT_X_SASL_MAXBUFSIZE		0x6109
148

149
/* on/off values */
150
#define LDAP_OPT_ON		((void *) &ber_pvt_opt_on)
151
#define LDAP_OPT_OFF	((void *) 0)
152

153
154
155
156
157
158
/*
 * ldap_get_option() and ldap_set_option() return values.
 * As later versions may return other values indicating
 * failure, current applications should only compare returned
 * value against LDAP_OPT_SUCCESS.
 */
159
160
161
#define LDAP_OPT_SUCCESS	0
#define	LDAP_OPT_ERROR		(-1)

162
#define LDAP_API_INFO_VERSION	(1)
163
164
165
166
167
typedef struct ldapapiinfo {
	int		ldapai_info_version;		/* version of LDAPAPIInfo (1) */
	int		ldapai_api_version;			/* revision of API supported */
	int		ldapai_protocol_version;	/* highest LDAP version supported */
	char	**ldapai_extensions;		/* names of API extensions */
168
	char	*ldapai_vendor_name;		/* name of supplier */
169
	int		ldapai_vendor_version;		/* supplier-specific version * 100 */
170
171
} LDAPAPIInfo;

Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
172
#define LDAP_FEATURE_INFO_VERSION (1) /* version of api feature structure */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
173
174
175
176
177
178
typedef struct ldap_apifeature_info {
	int		ldapaif_info_version; /* version of this struct (1) */
	char*	ldapaif_name;    /* matches LDAP_API_FEATURE_... less the prefix */
	int		ldapaif_version; /* matches the value LDAP_API_FEATURE_... */
} LDAPAPIFeatureInfo;

179
typedef struct ldapcontrol {
Kurt Zeilenga's avatar
Kurt Zeilenga committed
180
	char *			ldctl_oid;
181
182
	struct berval	ldctl_value;
	char			ldctl_iscritical;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
183
} LDAPControl;
184

185
/* LDAP Controls */
186
#define LDAP_CONTROL_ASSERT				"1.3.6.1.4.1.4203.666.5.9"
187
188
#define LDAP_CONTROL_PRE_READ			"1.3.6.1.4.1.4203.666.5.10.1"
#define LDAP_CONTROL_POST_READ			"1.3.6.1.4.1.4203.666.5.10.2"
189
#define LDAP_CONTROL_MODIFY_INCREMENT	"1.3.6.1.4.1.4203.666.5.11"
190

191
192
193
194
195
#define LDAP_CONTROL_VALUESRETURNFILTER	"1.2.826.0.1.334810.2.3"
#define LDAP_CONTROL_SUBENTRIES			"1.3.6.1.4.1.4203.1.10.1"
#define LDAP_CONTROL_NOOP				"1.3.6.1.4.1.4203.1.10.2"
#define LDAP_CONTROL_MANAGEDSAIT		"2.16.840.1.113730.3.4.2"
#define LDAP_CONTROL_PROXY_AUTHZ		"2.16.840.1.113730.3.4.18"
196

197
#if 0
Kurt Zeilenga's avatar
Kurt Zeilenga committed
198
199
200
#define LDAP_CONTROL_DUPENT_REQUEST		"2.16.840.1.113719.1.27.101.1"
#define LDAP_CONTROL_DUPENT_RESPONSE	"2.16.840.1.113719.1.27.101.2"
#define LDAP_CONTROL_DUPENT_ENTRY		"2.16.840.1.113719.1.27.101.3"
Kurt Zeilenga's avatar
Kurt Zeilenga committed
201
#define LDAP_CONTROL_DUPENT	LDAP_CONTROL_DUPENT_REQUEST
Pierangelo Masarati's avatar
Pierangelo Masarati committed
202
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
203

204
#define LDAP_CONTROL_PAGEDRESULTS		"1.2.840.113556.1.4.319"
205

Kurt Zeilenga's avatar
Kurt Zeilenga committed
206
207
208
209
#define LDAP_CONTROL_SYNC		"1.3.6.1.4.1.4203.666.5.6"
#define LDAP_CONTROL_SYNC_STATE	"1.3.6.1.4.1.4203.666.5.7"
#define LDAP_CONTROL_SYNC_DONE	"1.3.6.1.4.1.4203.666.5.8"
#define LDAP_SYNC_INFO			"1.3.6.1.4.1.4203.666.10.2"
210

211
212
213
214
215
216
217
218
219
220
221
222
#define LDAP_SYNC_REFRESH_PRESENTS	0
#define LDAP_SYNC_REFRESH_DELETES   1

#define LDAP_TAG_SYNC_NEW_COOKIE		((ber_tag_t) 0x80U)
#define LDAP_TAG_SYNC_REFRESH_DELETE	((ber_tag_t) 0xa1U)
#define LDAP_TAG_SYNC_REFRESH_PRESENT	((ber_tag_t) 0xa2U)
#define	LDAP_TAG_SYNC_ID_SET			((ber_tag_t) 0xa3U)

#define LDAP_TAG_SYNC_COOKIE	((ber_tag_t) 0x04U)
#define LDAP_TAG_REFRESHDELETES	((ber_tag_t) 0x01U)
#define LDAP_TAG_REFRESHDONE	((ber_tag_t) 0x01U)
#define LDAP_TAG_RELOAD_HINT	((ber_tag_t) 0x01U)
223

224
225
226
227
#define LDAP_SYNC_PRESENT		0
#define LDAP_SYNC_ADD			1
#define LDAP_SYNC_MODIFY		2
#define LDAP_SYNC_DELETE		3
228

229
230
231
232
233
#define LDAP_CONTROL_SORTREQUEST    "1.2.840.113556.1.4.473"
#define LDAP_CONTROL_SORTRESPONSE	"1.2.840.113556.1.4.474"
#define LDAP_CONTROL_VLVREQUEST    	"2.16.840.1.113730.3.4.9"
#define LDAP_CONTROL_VLVRESPONSE    "2.16.840.1.113730.3.4.10"

234
/* controls for MSAD compatibility */
235
#define LDAP_CONTROL_X_DOMAIN_SCOPE "1.2.840.113556.1.4.1339"
Kurt Zeilenga's avatar
Kurt Zeilenga committed
236
#define LDAP_CONTROL_X_PERMISSIVE_MODIFY "1.2.840.113556.1.4.1413"
237

238
/* LDAP Unsolicited Notifications */
239
240
#define	LDAP_NOTICE_OF_DISCONNECTION	"1.3.6.1.4.1.1466.20036"
#define LDAP_NOTICE_DISCONNECT LDAP_NOTICE_OF_DISCONNECTION
Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
241

242
/* LDAP Extended Operations */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
243
244
245
246
247
248
249
#define LDAP_EXOP_START_TLS	"1.3.6.1.4.1.1466.20037"

#define LDAP_EXOP_MODIFY_PASSWD	"1.3.6.1.4.1.4203.1.11.1"
#define LDAP_TAG_EXOP_MODIFY_PASSWD_ID	((ber_tag_t) 0x80U)
#define LDAP_TAG_EXOP_MODIFY_PASSWD_OLD	((ber_tag_t) 0x81U)
#define LDAP_TAG_EXOP_MODIFY_PASSWD_NEW	((ber_tag_t) 0x82U)
#define LDAP_TAG_EXOP_MODIFY_PASSWD_GEN	((ber_tag_t) 0x80U)
Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
250

Kurt Zeilenga's avatar
Kurt Zeilenga committed
251
#define LDAP_EXOP_X_WHO_AM_I	"1.3.6.1.4.1.4203.1.11.3"
252
#define LDAP_EXOP_X_CANCEL		"1.3.6.1.4.1.4203.666.6.3"
Kurt Zeilenga's avatar
Kurt Zeilenga committed
253

Kurt Zeilenga's avatar
Kurt Zeilenga committed
254
255
256
257
258
259
/* LDAP Features */
#define LDAP_FEATURE_ALL_OPERATIONAL_ATTRS "1.3.6.1.4.1.4203.1.5.1"  /* + */
#define LDAP_FEATURE_OBJECTCLASS_ATTRS "1.3.6.1.4.1.4203.1.5.2"
#define LDAP_FEATURE_ABSOLUTE_FILTERS "1.3.6.1.4.1.4203.1.5.3"  /* (&) (|) */
#define LDAP_FEATURE_LANGUAGE_TAG_OPTIONS "1.3.6.1.4.1.4203.1.5.4"
#define LDAP_FEATURE_LANGUAGE_RANGE_OPTIONS "1.3.6.1.4.1.4203.1.5.5"
260
#define LDAP_FEATURE_MODIFY_INCREMENT "1.3.6.1.4.1.4203.666.5.6"
Kurt Zeilenga's avatar
Kurt Zeilenga committed
261

262
/*
Kurt Zeilenga's avatar
Kurt Zeilenga committed
263
264
265
 * specific LDAP instantiations of BER types we know about
 */

Kurt Zeilenga's avatar
Kurt Zeilenga committed
266
267
268
269
270
271
272
273
274
/* Overview of LBER tag construction
 *
 *	Bits
 *	______
 *	8 7 | CLASS
 *	0 0 = UNIVERSAL
 *	0 1 = APPLICATION
 *	1 0 = CONTEXT-SPECIFIC
 *	1 1 = PRIVATE
275
 *		_____
Kurt Zeilenga's avatar
Kurt Zeilenga committed
276
277
278
279
280
 *		| 6 | DATA-TYPE
 *		  0 = PRIMITIVE
 *		  1 = CONSTRUCTED
 *			___________
 *			| 5 ... 1 | TAG-NUMBER
281
 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
282
283

/* general stuff */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
284
285
#define LDAP_TAG_MESSAGE	((ber_tag_t) 0x30U)	/* constructed + 16 */
#define LDAP_TAG_MSGID		((ber_tag_t) 0x02U)	/* integer */
286

Kurt Zeilenga's avatar
Kurt Zeilenga committed
287
288
#define LDAP_TAG_LDAPDN		((ber_tag_t) 0x04U)	/* octet string */
#define LDAP_TAG_LDAPCRED	((ber_tag_t) 0x04U)	/* octet string */
289

Kurt Zeilenga's avatar
Kurt Zeilenga committed
290
291
#define LDAP_TAG_CONTROLS	((ber_tag_t) 0xa0U)	/* context specific + constructed + 0 */
#define LDAP_TAG_REFERRAL	((ber_tag_t) 0xa3U)	/* context specific + constructed + 3 */
292

Kurt Zeilenga's avatar
Kurt Zeilenga committed
293
#define LDAP_TAG_NEWSUPERIOR	((ber_tag_t) 0x80U)	/* context-specific + primitive + 0 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
294

Kurt Zeilenga's avatar
Kurt Zeilenga committed
295
296
297
298
#define LDAP_TAG_EXOP_REQ_OID   ((ber_tag_t) 0x80U)	/* context specific + primitive */
#define LDAP_TAG_EXOP_REQ_VALUE ((ber_tag_t) 0x81U)	/* context specific + primitive */
#define LDAP_TAG_EXOP_RES_OID   ((ber_tag_t) 0x8aU)	/* context specific + primitive */
#define LDAP_TAG_EXOP_RES_VALUE ((ber_tag_t) 0x8bU)	/* context specific + primitive */
299

Kurt Zeilenga's avatar
Kurt Zeilenga committed
300
#define LDAP_TAG_SASL_RES_CREDS	((ber_tag_t) 0x87U)	/* context specific + primitive */
301

Kurt Zeilenga's avatar
Kurt Zeilenga committed
302
/* possible operations a client can invoke */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
303
304
305
306
307
308
309
310
311
312
313
314
#define LDAP_REQ_BIND		((ber_tag_t) 0x60U)	/* application + constructed */
#define LDAP_REQ_UNBIND		((ber_tag_t) 0x42U)	/* application + primitive   */
#define LDAP_REQ_SEARCH		((ber_tag_t) 0x63U)	/* application + constructed */
#define LDAP_REQ_MODIFY		((ber_tag_t) 0x66U)	/* application + constructed */
#define LDAP_REQ_ADD		((ber_tag_t) 0x68U)	/* application + constructed */
#define LDAP_REQ_DELETE		((ber_tag_t) 0x4aU)	/* application + primitive   */
#define LDAP_REQ_MODDN		((ber_tag_t) 0x6cU)	/* application + constructed */
#define LDAP_REQ_MODRDN		LDAP_REQ_MODDN
#define LDAP_REQ_RENAME		LDAP_REQ_MODDN
#define LDAP_REQ_COMPARE	((ber_tag_t) 0x6eU)	/* application + constructed */
#define LDAP_REQ_ABANDON	((ber_tag_t) 0x50U)	/* application + primitive   */
#define LDAP_REQ_EXTENDED	((ber_tag_t) 0x77U)	/* application + constructed */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
315
316

/* possible result types a server can return */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
317
318
#define LDAP_RES_BIND		((ber_tag_t) 0x61U)	/* application + constructed */
#define LDAP_RES_SEARCH_ENTRY	((ber_tag_t) 0x64U)	/* application + constructed */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
319
#define LDAP_RES_SEARCH_REFERENCE	((ber_tag_t) 0x73U)	/* V3: application + constructed */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
320
321
322
323
324
325
326
327
328
#define LDAP_RES_SEARCH_RESULT	((ber_tag_t) 0x65U)	/* application + constructed */
#define LDAP_RES_MODIFY		((ber_tag_t) 0x67U)	/* application + constructed */
#define LDAP_RES_ADD		((ber_tag_t) 0x69U)	/* application + constructed */
#define LDAP_RES_DELETE		((ber_tag_t) 0x6bU)	/* application + constructed */
#define LDAP_RES_MODDN		((ber_tag_t) 0x6dU)	/* application + constructed */
#define LDAP_RES_MODRDN		LDAP_RES_MODDN	/* application + constructed */
#define LDAP_RES_RENAME		LDAP_RES_MODDN	/* application + constructed */
#define LDAP_RES_COMPARE	((ber_tag_t) 0x6fU)	/* application + constructed */
#define LDAP_RES_EXTENDED	((ber_tag_t) 0x78U)	/* V3: application + constructed */
329
#define LDAP_RES_INTERMEDIATE	((ber_tag_t) 0x79U) /* V3+: application + constructed */
330

331
332
#define LDAP_RES_ANY			(-1)
#define LDAP_RES_UNSOLICITED	(0)
Kurt Zeilenga's avatar
Kurt Zeilenga committed
333
334


335
/* sasl methods */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
336
337
#define LDAP_SASL_SIMPLE	((char*)0)
#define LDAP_SASL_NULL		("")
338

339

Kurt Zeilenga's avatar
Kurt Zeilenga committed
340
/* authentication methods available */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
341
342
343
344
345
346
#define LDAP_AUTH_NONE	((ber_tag_t) 0x00U)	/* no authentication		  */
#define LDAP_AUTH_SIMPLE	((ber_tag_t) 0x80U)	/* context specific + primitive */
#define LDAP_AUTH_SASL	((ber_tag_t) 0xa3U)	/* context specific + constructed */
#define LDAP_AUTH_KRBV4	((ber_tag_t) 0xffU)	/* means do both of the following */
#define LDAP_AUTH_KRBV41	((ber_tag_t) 0x81U)	/* context specific + primitive */
#define LDAP_AUTH_KRBV42	((ber_tag_t) 0x82U)	/* context specific + primitive */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
347
348
349


/* filter types */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
350
351
352
#define LDAP_FILTER_AND	((ber_tag_t) 0xa0U)	/* context specific + constructed */
#define LDAP_FILTER_OR	((ber_tag_t) 0xa1U)	/* context specific + constructed */
#define LDAP_FILTER_NOT	((ber_tag_t) 0xa2U)	/* context specific + constructed */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
353
354
#define LDAP_FILTER_EQUALITY	((ber_tag_t) 0xa3U)	/* context specific + constructed */
#define LDAP_FILTER_SUBSTRINGS	((ber_tag_t) 0xa4U)	/* context specific + constructed */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
355
356
#define LDAP_FILTER_GE	((ber_tag_t) 0xa5U)	/* context specific + constructed */
#define LDAP_FILTER_LE	((ber_tag_t) 0xa6U)	/* context specific + constructed */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
357
358
#define LDAP_FILTER_PRESENT	((ber_tag_t) 0x87U)	/* context specific + primitive   */
#define LDAP_FILTER_APPROX	((ber_tag_t) 0xa8U)	/* context specific + constructed */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
359
#define LDAP_FILTER_EXT	((ber_tag_t) 0xa9U)	/* context specific + constructed */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
360

Kurt Zeilenga's avatar
Kurt Zeilenga committed
361
/* extended filter component types */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
362
#define LDAP_FILTER_EXT_OID		((ber_tag_t) 0x81U)	/* context specific */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
363
364
365
#define LDAP_FILTER_EXT_TYPE	((ber_tag_t) 0x82U)	/* context specific */
#define LDAP_FILTER_EXT_VALUE	((ber_tag_t) 0x83U)	/* context specific */
#define LDAP_FILTER_EXT_DNATTRS	((ber_tag_t) 0x84U)	/* context specific */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
366

Kurt Zeilenga's avatar
Kurt Zeilenga committed
367
/* substring filter component types */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
368
#define LDAP_SUBSTRING_INITIAL	((ber_tag_t) 0x80U)	/* context specific */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
369
#define LDAP_SUBSTRING_ANY		((ber_tag_t) 0x81U)	/* context specific */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
370
#define LDAP_SUBSTRING_FINAL	((ber_tag_t) 0x82U)	/* context specific */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
371
372

/* search scopes */
373
#define LDAP_SCOPE_DEFAULT	((ber_int_t) -1)
Kurt Zeilenga's avatar
Kurt Zeilenga committed
374
375
376
#define LDAP_SCOPE_BASE		((ber_int_t) 0x0000)
#define LDAP_SCOPE_ONELEVEL	((ber_int_t) 0x0001)
#define LDAP_SCOPE_SUBTREE	((ber_int_t) 0x0002)
Kurt Zeilenga's avatar
Kurt Zeilenga committed
377

378
379
/* substring filter component types */
#define LDAP_SUBSTRING_INITIAL	((ber_tag_t) 0x80U)	/* context specific */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
380
#define LDAP_SUBSTRING_ANY		((ber_tag_t) 0x81U)	/* context specific */
381
#define LDAP_SUBSTRING_FINAL	((ber_tag_t) 0x82U)	/* context specific */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
382

383
/*
Kurt Zeilenga's avatar
Kurt Zeilenga committed
384
385
386
 * possible error codes we can return
 */

Kurt Zeilenga's avatar
Kurt Zeilenga committed
387
#define LDAP_RANGE(n,x,y)	(((x) <= (n)) && ((n) <= (y)))
388

Kurt Zeilenga's avatar
Kurt Zeilenga committed
389
#define LDAP_SUCCESS				0x00
Kurt Zeilenga's avatar
Kurt Zeilenga committed
390
#define LDAP_OPERATIONS_ERROR		0x01
Kurt Zeilenga's avatar
Kurt Zeilenga committed
391
#define LDAP_PROTOCOL_ERROR			0x02
Kurt Zeilenga's avatar
Kurt Zeilenga committed
392
393
#define LDAP_TIMELIMIT_EXCEEDED		0x03
#define LDAP_SIZELIMIT_EXCEEDED		0x04
Kurt Zeilenga's avatar
Kurt Zeilenga committed
394
395
#define LDAP_COMPARE_FALSE			0x05
#define LDAP_COMPARE_TRUE			0x06
396
397
#define LDAP_AUTH_METHOD_NOT_SUPPORTED	0x07
#define LDAP_STRONG_AUTH_NOT_SUPPORTED	LDAP_AUTH_METHOD_NOT_SUPPORTED
Kurt Zeilenga's avatar
Kurt Zeilenga committed
398
#define LDAP_STRONG_AUTH_REQUIRED	0x08
Kurt Zeilenga's avatar
Kurt Zeilenga committed
399
#define LDAP_PARTIAL_RESULTS		0x09	/* LDAPv2+ (not LDAPv3) */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
400
401

#define	LDAP_REFERRAL				0x0a /* LDAPv3 */
402
#define LDAP_ADMINLIMIT_EXCEEDED	0x0b /* LDAPv3 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
403
#define	LDAP_UNAVAILABLE_CRITICAL_EXTENSION	0x0c /* LDAPv3 */
404
#define LDAP_CONFIDENTIALITY_REQUIRED	0x0d /* LDAPv3 */
405
#define	LDAP_SASL_BIND_IN_PROGRESS	0x0e /* LDAPv3 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
406

407
408
#define LDAP_ATTR_ERROR(n)	LDAP_RANGE((n),0x10,0x15) /* 16-21 */

Kurt Zeilenga's avatar
Kurt Zeilenga committed
409
#define LDAP_NO_SUCH_ATTRIBUTE		0x10
Kurt Zeilenga's avatar
Kurt Zeilenga committed
410
#define LDAP_UNDEFINED_TYPE			0x11
Kurt Zeilenga's avatar
Kurt Zeilenga committed
411
412
413
#define LDAP_INAPPROPRIATE_MATCHING	0x12
#define LDAP_CONSTRAINT_VIOLATION	0x13
#define LDAP_TYPE_OR_VALUE_EXISTS	0x14
Kurt Zeilenga's avatar
Kurt Zeilenga committed
414
#define LDAP_INVALID_SYNTAX			0x15
Kurt Zeilenga's avatar
Kurt Zeilenga committed
415

416
417
#define LDAP_NAME_ERROR(n)	LDAP_RANGE((n),0x20,0x24) /* 32-34,36 */

Kurt Zeilenga's avatar
Kurt Zeilenga committed
418
419
#define LDAP_NO_SUCH_OBJECT			0x20
#define LDAP_ALIAS_PROBLEM			0x21
Kurt Zeilenga's avatar
Kurt Zeilenga committed
420
#define LDAP_INVALID_DN_SYNTAX		0x22
Kurt Zeilenga's avatar
Kurt Zeilenga committed
421
#define LDAP_IS_LEAF				0x23 /* not LDAPv3 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
422
423
#define LDAP_ALIAS_DEREF_PROBLEM	0x24

424
#define LDAP_SECURITY_ERROR(n)	LDAP_RANGE((n),0x2F,0x32) /* 47-50 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
425

426
#define LDAP_PROXY_AUTHZ_FAILURE	0x2F /* LDAPv3 proxy authorization */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
427
428
429
#define LDAP_INAPPROPRIATE_AUTH		0x30
#define LDAP_INVALID_CREDENTIALS	0x31
#define LDAP_INSUFFICIENT_ACCESS	0x32
430
431
432

#define LDAP_SERVICE_ERROR(n)	LDAP_RANGE((n),0x33,0x36) /* 51-54 */

Kurt Zeilenga's avatar
Kurt Zeilenga committed
433
434
#define LDAP_BUSY					0x33
#define LDAP_UNAVAILABLE			0x34
Kurt Zeilenga's avatar
Kurt Zeilenga committed
435
#define LDAP_UNWILLING_TO_PERFORM	0x35
Kurt Zeilenga's avatar
Kurt Zeilenga committed
436
#define LDAP_LOOP_DETECT			0x36
Kurt Zeilenga's avatar
Kurt Zeilenga committed
437

438
439
#define LDAP_UPDATE_ERROR(n)	LDAP_RANGE((n),0x40,0x47) /* 64-69,71 */

Kurt Zeilenga's avatar
Kurt Zeilenga committed
440
441
442
443
#define LDAP_NAMING_VIOLATION		0x40
#define LDAP_OBJECT_CLASS_VIOLATION	0x41
#define LDAP_NOT_ALLOWED_ON_NONLEAF	0x42
#define LDAP_NOT_ALLOWED_ON_RDN		0x43
Kurt Zeilenga's avatar
Kurt Zeilenga committed
444
#define LDAP_ALREADY_EXISTS			0x44
Kurt Zeilenga's avatar
Kurt Zeilenga committed
445
#define LDAP_NO_OBJECT_CLASS_MODS	0x45
446
447
#define LDAP_RESULTS_TOO_LARGE		0x46 /* CLDAP */
#define LDAP_AFFECTS_MULTIPLE_DSAS	0x47 /* LDAPv3 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
448

Kurt Zeilenga's avatar
Kurt Zeilenga committed
449
#define LDAP_OTHER				0x50
450

451
#define LDAP_API_ERROR(n)		LDAP_RANGE((n),0x51,0x61) /* 81-97 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
452
#define LDAP_API_RESULT(n)		(((n) == LDAP_SUCCESS) || \
Kurt Zeilenga's avatar
Kurt Zeilenga committed
453
								LDAP_RANGE((n),0x51,0x61)) /* 0,81-97 */
454

Kurt Zeilenga's avatar
Kurt Zeilenga committed
455
/* reserved for APIs */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
456
457
458
459
460
461
462
463
464
465
466
#define LDAP_SERVER_DOWN		0x51
#define LDAP_LOCAL_ERROR		0x52
#define LDAP_ENCODING_ERROR		0x53
#define LDAP_DECODING_ERROR		0x54
#define LDAP_TIMEOUT			0x55
#define LDAP_AUTH_UNKNOWN		0x56
#define LDAP_FILTER_ERROR		0x57
#define LDAP_USER_CANCELLED		0x58
#define LDAP_PARAM_ERROR		0x59
#define LDAP_NO_MEMORY			0x5a

Kurt Zeilenga's avatar
Kurt Zeilenga committed
467
/* used but not reserved for APIs */
468
469
470
471
472
473
474
#define LDAP_CONNECT_ERROR				0x5b	/* draft-ietf-ldap-c-api-xx */
#define LDAP_NOT_SUPPORTED				0x5c	/* draft-ietf-ldap-c-api-xx */
#define LDAP_CONTROL_NOT_FOUND			0x5d	/* draft-ietf-ldap-c-api-xx */
#define LDAP_NO_RESULTS_RETURNED		0x5e	/* draft-ietf-ldap-c-api-xx */
#define LDAP_MORE_RESULTS_TO_RETURN		0x5f	/* draft-ietf-ldap-c-api-xx */
#define LDAP_CLIENT_LOOP				0x60	/* draft-ietf-ldap-c-api-xx */
#define LDAP_REFERRAL_LIMIT_EXCEEDED	0x61	/* draft-ietf-ldap-c-api-xx */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
475

476
477
478
479
480
481
#define LDAP_SYNC_RESOURCES_EXHAUSTED	0x100
#define LDAP_SYNC_SECURITY_VIOLATION	0x101
#define LDAP_SYNC_INVALID_COOKIE		0x102
#define LDAP_SYNC_UNSUPPORTED_SCHEME	0x103
#define LDAP_SYNC_CLIENT_DISCONNECT		0x104
#define LDAP_SYNC_RELOAD_REQUIRED		0x105
482

483
484
#define LDAP_ASSERTION_FAILED			0x10f

485
#ifdef LDAP_EXOP_X_CANCEL
Jong Hyuk Choi's avatar
Jong Hyuk Choi committed
486
/* resultCode for Cancel Response */
487
488
489
490
491
#define LDAP_CANCELLED					0x110
#define LDAP_NO_SUCH_OPERATION			0x111
#define LDAP_TOO_LATE					0x112
#define LDAP_CANNOT_CANCEL				0x113
#endif
Jong Hyuk Choi's avatar
Jong Hyuk Choi committed
492

493
/* LDAP SYNC request type */
494
495
#define LDAP_SYNC_NONE					0x00
#define LDAP_SYNC_REFRESH_ONLY			0x01
496
497
#define LDAP_SYNC_REFRESH_AND_PERSIST	0x03

Kurt Zeilenga's avatar
Kurt Zeilenga committed
498
499
500
501
502
503
/*
 * This structure represents both ldap messages and ldap responses.
 * These are really the same, except in the case of search responses,
 * where a response has multiple messages.
 */

504
typedef struct ldapmsg LDAPMessage;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
505

506
507
508
509
/* for modifications */
typedef struct ldapmod {
	int		mod_op;

510
#define LDAP_MOD_OP			(0x0007)
Kurt Zeilenga's avatar
Kurt Zeilenga committed
511
512
513
#define LDAP_MOD_ADD		(0x0000)
#define LDAP_MOD_DELETE		(0x0001)
#define LDAP_MOD_REPLACE	(0x0002)
514
#define LDAP_MOD_INCREMENT	(0x0003)
Kurt Zeilenga's avatar
Kurt Zeilenga committed
515
#define LDAP_MOD_BVALUES	(0x0080)
516
517
518
519
520
521
522
523
524
525
526
527
528
529
/* IMPORTANT: do not use code 0x1000 (or above),
 * it is used internally by the backends!
 * (see ldap/servers/slapd/slap.h)
 */

	char		*mod_type;
	union mod_vals_u {
		char		**modv_strvals;
		struct berval	**modv_bvals;
	} mod_vals;
#define mod_values	mod_vals.modv_strvals
#define mod_bvalues	mod_vals.modv_bvals
} LDAPMod;

Kurt Zeilenga's avatar
Kurt Zeilenga committed
530
/*
Kurt Zeilenga's avatar
Kurt Zeilenga committed
531
532
533
 * structure representing an ldap session which can
 * encompass connections to multiple servers (in the
 * face of referrals).
Kurt Zeilenga's avatar
Kurt Zeilenga committed
534
 */
535
typedef struct ldap LDAP;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
536

Kurt Zeilenga's avatar
Kurt Zeilenga committed
537
#define LDAP_DEREF_NEVER		0x00
538
#define LDAP_DEREF_SEARCHING	0x01
Kurt Zeilenga's avatar
Kurt Zeilenga committed
539
540
#define LDAP_DEREF_FINDING		0x02
#define LDAP_DEREF_ALWAYS		0x03
Kurt Zeilenga's avatar
Kurt Zeilenga committed
541

Kurt Zeilenga's avatar
Kurt Zeilenga committed
542
#define LDAP_NO_LIMIT			0
Kurt Zeilenga's avatar
Kurt Zeilenga committed
543

Kurt Zeilenga's avatar
Kurt Zeilenga committed
544
/* how many messages to retrieve results for */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
545
546
547
#define LDAP_MSG_ONE			0x00
#define LDAP_MSG_ALL			0x01
#define LDAP_MSG_RECEIVED		0x02
Kurt Zeilenga's avatar
Kurt Zeilenga committed
548
549
550
551
552

/*
 * types for ldap URL handling
 */
typedef struct ldap_url_desc {
Kurt Zeilenga's avatar
Kurt Zeilenga committed
553
554
555
556
557
558
559
560
561
	struct ldap_url_desc *lud_next;
	char	*lud_scheme;
	char	*lud_host;
	int		lud_port;
	char	*lud_dn;
	char	**lud_attrs;
	int		lud_scope;
	char	*lud_filter;
	char	**lud_exts;
562
	int		lud_crit_exts;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
563
564
} LDAPURLDesc;

Kurt Zeilenga's avatar
Kurt Zeilenga committed
565
566
567
568
#define LDAP_URL_SUCCESS		0x00	/* Success */
#define LDAP_URL_ERR_MEM		0x01	/* can't allocate memory space */
#define LDAP_URL_ERR_PARAM		0x02	/* parameter is bad */

569
#define LDAP_URL_ERR_BADSCHEME	0x03	/* URL doesn't begin with "ldap[si]://" */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
570
571
572
573
574
575
576
#define LDAP_URL_ERR_BADENCLOSURE 0x04	/* URL is missing trailing ">" */
#define LDAP_URL_ERR_BADURL		0x05	/* URL is bad */
#define LDAP_URL_ERR_BADHOST	0x06	/* host port is bad */
#define LDAP_URL_ERR_BADATTRS	0x07	/* bad (or missing) attributes */
#define LDAP_URL_ERR_BADSCOPE	0x08	/* scope string is invalid (or missing) */
#define LDAP_URL_ERR_BADFILTER	0x09	/* bad or missing filter */
#define LDAP_URL_ERR_BADEXTS	0x0a	/* bad or missing extensions */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
577

Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
578
579
/*
 * The API draft spec says we should declare (or cause to be declared)
580
 * 'struct timeval'.   We don't.  See IETF LDAPext discussions.
Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
581
 */
582
struct timeval;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
583

584
585
586
/*
 * in options.c:
 */
587
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
588
ldap_get_option LDAP_P((
589
	LDAP *ld,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
590
591
592
	int option,
	void *outvalue));

593
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
594
595
596
597
ldap_set_option LDAP_P((
	LDAP *ld,
	int option,
	LDAP_CONST void *invalue));
598

599
/* V3 REBIND Function Callback Prototype */
600
typedef int (LDAP_REBIND_PROC) LDAP_P((
Kurt Zeilenga's avatar
Kurt Zeilenga committed
601
602
	LDAP *ld, LDAP_CONST char *url,
	ber_tag_t request, ber_int_t msgid,
603
	void *params ));
604

605
LDAP_F( int )
606
607
ldap_set_rebind_proc LDAP_P((
	LDAP *ld,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
608
	LDAP_REBIND_PROC *rebind_proc,
609
	void *params ));
610
611
612
613

/*
 * in controls.c:
 */
614
615
LDAP_F( int )
ldap_create_control LDAP_P((
Kurt Zeilenga's avatar
Kurt Zeilenga committed
616
	LDAP_CONST char *requestOID,
617
	BerElement *ber,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
618
619
620
	int iscritical,
	LDAPControl **ctrlp ));

621
LDAP_F( void )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
622
623
624
ldap_control_free LDAP_P((
	LDAPControl *ctrl ));

625
LDAP_F( void )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
626
627
ldap_controls_free LDAP_P((
	LDAPControl **ctrls ));
628

Luke Howard's avatar
   
Luke Howard committed
629
630
631
/*
 * in dnssrv.c:
 */
632
LDAP_F( int )
633
634
635
636
ldap_domain2dn LDAP_P((
	LDAP_CONST char* domain,
	char** dn ));

637
LDAP_F( int )
638
639
640
641
ldap_dn2domain LDAP_P((
	LDAP_CONST char* dn,
	char** domain ));

642
LDAP_F( int )
643
644
645
ldap_domain2hostlist LDAP_P((
	LDAP_CONST char *domain,
	char** hostlist ));
Luke Howard's avatar
   
Luke Howard committed
646

647
648
649
/*
 * in extended.c:
 */
650
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
651
ldap_extended_operation LDAP_P((
652
	LDAP			*ld,
653
654
	LDAP_CONST char	*reqoid,
	struct berval	*reqdata,
655
656
657
658
	LDAPControl		**serverctrls,
	LDAPControl		**clientctrls,
	int				*msgidp ));

659
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
660
ldap_extended_operation_s LDAP_P((
661
	LDAP			*ld,
662
663
	LDAP_CONST char	*reqoid,
	struct berval	*reqdata,
664
665
666
667
668
	LDAPControl		**serverctrls,
	LDAPControl		**clientctrls,
	char			**retoidp,
	struct berval	**retdatap ));

669
LDAP_F( int )
670
671
672
673
674
675
676
ldap_parse_extended_result LDAP_P((
	LDAP			*ld,
	LDAPMessage		*res,
	char			**retoidp,
	struct berval	**retdatap,
	int				freeit ));

677
LDAP_F( int )
678
ldap_parse_intermediate LDAP_P((
679
680
681
682
683
684
685
	LDAP			*ld,
	LDAPMessage		*res,
	char			**retoidp,
	struct berval	**retdatap,
	LDAPControl		***serverctrls,
	int				freeit ));

Kurt Zeilenga's avatar
Kurt Zeilenga committed
686
687
688
/*
 * in abandon.c:
 */
689
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
690
ldap_abandon_ext LDAP_P((
691
692
693
694
695
	LDAP			*ld,
	int				msgid,
	LDAPControl		**serverctrls,
	LDAPControl		**clientctrls ));

696
LDAP_F( int )
697
698
699
700
ldap_abandon LDAP_P((	/* deprecated */
	LDAP *ld,
	int msgid ));

Kurt Zeilenga's avatar
Kurt Zeilenga committed
701

Kurt Zeilenga's avatar
Kurt Zeilenga committed
702
703
704
/*
 * in add.c:
 */
705
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
706
ldap_add_ext LDAP_P((
707
	LDAP			*ld,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
708
	LDAP_CONST char	*dn,
709
710
711
712
713
	LDAPMod			**attrs,
	LDAPControl		**serverctrls,
	LDAPControl		**clientctrls,
	int 			*msgidp ));

714
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
715
ldap_add_ext_s LDAP_P((
716
	LDAP			*ld,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
717
	LDAP_CONST char	*dn,
718
719
	LDAPMod			**attrs,
	LDAPControl		**serverctrls,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
720
	LDAPControl		**clientctrls ));
721

722
LDAP_F( int )
723
ldap_add LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
724
725
726
727
	LDAP *ld,
	LDAP_CONST char *dn,
	LDAPMod **attrs ));

728
LDAP_F( int )
729
ldap_add_s LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
730
731
732
	LDAP *ld,
	LDAP_CONST char *dn,
	LDAPMod **attrs ));
Kurt Zeilenga's avatar
Kurt Zeilenga committed
733

734
735

/*
736
 * in sasl.c:
737
 */
738
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
739
ldap_sasl_bind LDAP_P((
740
	LDAP			*ld,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
741
742
743
	LDAP_CONST char	*dn,
	LDAP_CONST char	*mechanism,
	struct berval	*cred,
744
745
	LDAPControl		**serverctrls,
	LDAPControl		**clientctrls,
746
	int				*msgidp ));
747

748
749
750
751
752
753
754
755
756
757
758
759
760
761
/* Interaction flags (should be passed about in a control)
 *  Automatic (default): use defaults, prompt otherwise
 *  Interactive: prompt always
 *  Quiet: never prompt
 */
#define LDAP_SASL_AUTOMATIC		0U
#define LDAP_SASL_INTERACTIVE	1U
#define LDAP_SASL_QUIET			2U

/*
 * V3 SASL Interaction Function Callback Prototype
 *	when using Cyrus SASL, interact is pointer to sasl_interact_t
 *  should likely passed in a control (and provided controls)
 */
762
typedef int (LDAP_SASL_INTERACT_PROC) LDAP_P((
763
	LDAP *ld, unsigned flags, void* defaults, void *interact ));
764

765
LDAP_F( int )
766
ldap_sasl_interactive_bind_s LDAP_P((
767
768
769
770
	LDAP *ld,
	LDAP_CONST char *dn, /* usually NULL */
	LDAP_CONST char *saslMechanism,
	LDAPControl **serverControls,
771
	LDAPControl **clientControls,
772
773
774

	/* should be client controls */
	unsigned flags,
775
	LDAP_SASL_INTERACT_PROC *proc,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
776
	void *defaults ));
777

778
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
779
ldap_sasl_bind_s LDAP_P((
780
	LDAP			*ld,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
781
782
	LDAP_CONST char	*dn,
	LDAP_CONST char	*mechanism,
783
784
785
786
787
	struct berval	*cred,
	LDAPControl		**serverctrls,
	LDAPControl		**clientctrls,
	struct berval	**servercredp ));

788
LDAP_F( int )
789
790
791
792
793
ldap_parse_sasl_bind_result LDAP_P((
	LDAP			*ld,
	LDAPMessage		*res,
	struct berval	**servercredp,
	int				freeit ));
794

Kurt Zeilenga's avatar
Kurt Zeilenga committed
795
796
/*
 * in bind.c:
Kurt Zeilenga's avatar
Kurt Zeilenga committed
797
 *	(deprecated)
Kurt Zeilenga's avatar
Kurt Zeilenga committed
798
 */
799
LDAP_F( int )
800
ldap_bind LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
801
802
803
804
805
	LDAP *ld,
	LDAP_CONST char *who,
	LDAP_CONST char *passwd,
	int authmethod ));

806
LDAP_F( int )
807
ldap_bind_s LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
808
809
810
811
812
	LDAP *ld,
	LDAP_CONST char *who,
	LDAP_CONST char *cred,
	int authmethod ));

Kurt Zeilenga's avatar
Kurt Zeilenga committed
813
814
815
/*
 * in sbind.c:
 */
816
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
817
818
819
820
821
ldap_simple_bind LDAP_P((
	LDAP *ld,
	LDAP_CONST char *who,
	LDAP_CONST char *passwd ));

822
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
823
824
825
826
ldap_simple_bind_s LDAP_P((
	LDAP *ld,
	LDAP_CONST char *who,
	LDAP_CONST char *passwd ));
Kurt Zeilenga's avatar
Kurt Zeilenga committed
827

828

Kurt Zeilenga's avatar
Kurt Zeilenga committed
829
830
/*
 * in kbind.c:
Kurt Zeilenga's avatar
Kurt Zeilenga committed
831
 *	(deprecated)
Kurt Zeilenga's avatar
Kurt Zeilenga committed
832
 */
833
LDAP_F( int )
834
ldap_kerberos_bind_s LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
835
836
837
	LDAP *ld,
	LDAP_CONST char *who ));

838
LDAP_F( int )
839
ldap_kerberos_bind1 LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
840
841
842
	LDAP *ld,
	LDAP_CONST char *who ));

843
LDAP_F( int )
844
ldap_kerberos_bind1_s LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
845
846
847
	LDAP *ld,
	LDAP_CONST char *who ));

848
LDAP_F( int )
849
ldap_kerberos_bind2 LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
850
851
852
	LDAP *ld,
	LDAP_CONST char *who ));

853
LDAP_F( int )
854
ldap_kerberos_bind2_s LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
855
856
	LDAP *ld,
	LDAP_CONST char *who ));
Kurt Zeilenga's avatar
Kurt Zeilenga committed
857

858

859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
/*
 * LDAP Cancel Extended Operation <draft-zeilenga-ldap-cancel-xx.txt>
 */

LDAP_F( int )
ldap_cancel LDAP_P(( LDAP *ld,
	int cancelid,
	LDAPControl		**sctrls,
	LDAPControl		**cctrls,
	int				*msgidp ));

LDAP_F( int )
ldap_cancel_s LDAP_P((
	LDAP *ld,
	int cancelid,
	LDAPControl **sctrl,
	LDAPControl **cctrl ));

Kurt Zeilenga's avatar
Kurt Zeilenga committed
877
878
879
/*
 * in compare.c:
 */
880
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
881
ldap_compare_ext LDAP_P((
882
	LDAP			*ld,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
883
884
	LDAP_CONST char	*dn,
	LDAP_CONST char	*attr,
885
886
887
888
889
	struct berval	*bvalue,
	LDAPControl		**serverctrls,
	LDAPControl		**clientctrls,
	int 			*msgidp ));

890
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
891
ldap_compare_ext_s LDAP_P((
892
	LDAP			*ld,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
893
894
	LDAP_CONST char	*dn,
	LDAP_CONST char	*attr,
895
896
	struct berval	*bvalue,
	LDAPControl		**serverctrls,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
897
898
	LDAPControl		**clientctrls ));

899
LDAP_F( int )
900
ldap_compare LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
901
902
903
904
	LDAP *ld,
	LDAP_CONST char *dn,
	LDAP_CONST char *attr,
	LDAP_CONST char *value ));
905

906
LDAP_F( int )
907
ldap_compare_s LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
908
909
910
911
	LDAP *ld,
	LDAP_CONST char *dn,
	LDAP_CONST char *attr,
	LDAP_CONST char *value ));
Kurt Zeilenga's avatar
Kurt Zeilenga committed
912

913

Kurt Zeilenga's avatar
Kurt Zeilenga committed
914
915
916
/*
 * in delete.c:
 */
917
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
918
ldap_delete_ext LDAP_P((
919
	LDAP			*ld,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
920
	LDAP_CONST char	*dn,
921
922
923
924
	LDAPControl		**serverctrls,
	LDAPControl		**clientctrls,
	int 			*msgidp ));

925
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
926
ldap_delete_ext_s LDAP_P((
927
	LDAP			*ld,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
928
	LDAP_CONST char	*dn,
929
	LDAPControl		**serverctrls,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
930
931
	LDAPControl		**clientctrls ));

932
LDAP_F( int )
933
ldap_delete LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
934
935
	LDAP *ld,
	LDAP_CONST char *dn ));
936

937
LDAP_F( int )
938
ldap_delete_s LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
939
940
	LDAP *ld,
	LDAP_CONST char *dn ));
Kurt Zeilenga's avatar
Kurt Zeilenga committed
941

942

Kurt Zeilenga's avatar
Kurt Zeilenga committed
943
944
945
/*
 * in error.c:
 */
946
LDAP_F( int )
947
948
949
950
951
952
953
954
955
ldap_parse_result LDAP_P((
	LDAP			*ld,
	LDAPMessage		*res,
	int				*errcodep,
	char			**matcheddnp,
	char			**errmsgp,
	char			***referralsp,
	LDAPControl		***serverctrls,
	int				freeit ));
Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
956

Kurt Zeilenga's avatar
Kurt Zeilenga committed
957
LDAP_F( char * )
Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
958
959
960
ldap_err2string LDAP_P((
	int err ));

961
LDAP_F( int )
962
963
964
965
966
ldap_result2error LDAP_P((	/* deprecated */
	LDAP *ld,
	LDAPMessage *r,
	int freeit ));

967
LDAP_F( void )
Kurt Zeilenga's avatar
ldap.h:    
Kurt Zeilenga committed
968
ldap_perror LDAP_P((	/* deprecated */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
969
970
	LDAP *ld,
	LDAP_CONST char *s ));
Kurt Zeilenga's avatar
Kurt Zeilenga committed
971

972

Kurt Zeilenga's avatar
Kurt Zeilenga committed
973
974
975
/*
 * in modify.c:
 */
976
LDAP_F( int )
Kurt Zeilenga's avatar
Kurt Zeilenga committed
977
ldap_modify_ext LDAP_P((
978
	LDAP			*ld,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
979
	LDAP_CONST char	*dn,
980
981
982
983
984
	LDAPMod			**mods,
	LDAPControl		**serverctrls,
	LDAPControl		**clientctrls,
	int 			*msgidp ));