]> git.sur5r.net Git - openldap/blob - include/ldap.h
9b4a009b03d420e3625235c98d59c8c312242be3
[openldap] / include / ldap.h
1 /* $OpenLDAP$ */
2 /*
3  * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms are permitted only
7  * as authorized by the OpenLDAP Public License.  A copy of this
8  * license is available at http://www.OpenLDAP.org/license.html or
9  * in file LICENSE in the top-level directory of the distribution.
10  */
11 /* Portions
12  * Copyright (c) 1990 Regents of the University of Michigan.
13  * All rights reserved.
14  *
15  * Redistribution and use in source and binary forms are permitted
16  * provided that this notice is preserved and that due credit is given
17  * to the University of Michigan at Ann Arbor. The name of the University
18  * may not be used to endorse or promote products derived from this
19  * software without specific prior written permission. This software
20  * is provided ``as is'' without express or implied warranty.
21  */
22
23 #ifndef _LDAP_H
24 #define _LDAP_H
25
26 #include <ldap_cdefs.h>
27
28 /* draft spec requires ldap.h include lber declarations */
29 #include <lber.h>
30
31 LDAP_BEGIN_DECL
32
33 #define LDAP_VERSION1   1
34 #define LDAP_VERSION2   2
35 #define LDAP_VERSION3   3
36
37 #define LDAP_VERSION_MIN        LDAP_VERSION2
38 #define LDAP_VERSION            LDAP_VERSION2
39 #define LDAP_VERSION_MAX        LDAP_VERSION3
40
41 /*
42  * We'll use 2000+draft revision for our API version number
43  * As such, the number will be above the old RFC but below 
44  * whatever number does finally get assigned
45  */
46 #define LDAP_API_VERSION        2004
47 #define LDAP_VENDOR_NAME        "OpenLDAP"
48 /* We'll eventually release as 200 */
49 #define LDAP_VENDOR_VERSION     194
50
51 /* OpenLDAP API Features */
52 #define LDAP_API_FEATURE_X_OPENLDAP LDAP_VENDOR_VERSION
53
54 /* include LDAP_API_FEATURE defines */
55 #include <ldap_features.h>
56
57 #if defined( LDAP_API_FEATURE_X_OPENLDAP_REENTRANT ) || \
58         ( defined( LDAP_THREAD_SAFE ) && \
59                 defined( LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE ) )
60         /* -lldap may or may not be thread safe */
61         /* -lldap_r, if available, is always thread safe */
62 #       define  LDAP_API_FEATURE_THREAD_SAFE 1
63 #endif
64 #if defined( LDAP_THREAD_SAFE ) && \
65         defined( LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE )
66 /* #define LDAP_API_FEATURE_SESSION_SAFE        1       */
67 /* #define LDAP_API_OPERATION_SESSION_SAFE      1       */
68 #endif
69
70 #define LDAP_PORT               389             /* ldap:///             default LDAP port */
71 #define LDAPS_PORT              636             /* ldaps:///    default LDAP over TLS port */
72
73 #define LDAP_ROOT_DSE                           ""
74 #define LDAP_NO_ATTRS                           "1.1"
75 #define LDAP_ALL_USER_ATTRIBUTES        "*"
76 #define LDAP_ALL_OPERATIONAL_ATTRIBUTES "+" /* OpenLDAP extension */
77
78 /*
79  * LDAP_OPTions defined by draft-ldapext-ldap-c-api-02
80  * 0x0000 - 0x0fff reserved for api options
81  * 0x1000 - 0x3fff reserved for api extended options
82  * 0x4000 - 0x7fff reserved for private and experimental options
83  */
84 #define LDAP_OPT_API_INFO                       0x0000
85 #define LDAP_OPT_DESC                           0x0001 /* deprecated */
86 #define LDAP_OPT_DEREF                          0x0002
87 #define LDAP_OPT_SIZELIMIT                      0x0003
88 #define LDAP_OPT_TIMELIMIT                      0x0004
89 /* 0x05 - 0x07 not defined by current draft */
90 #define LDAP_OPT_REFERRALS                      0x0008
91 #define LDAP_OPT_RESTART                        0x0009
92 /* 0x0a - 0x10 not defined by current draft */
93 #define LDAP_OPT_PROTOCOL_VERSION       0x0011
94 #define LDAP_OPT_SERVER_CONTROLS        0x0012
95 #define LDAP_OPT_CLIENT_CONTROLS        0x0013
96 /* 0x14 not defined by current draft */
97 #define LDAP_OPT_API_FEATURE_INFO       0x0015
98
99 /* 0x16 - 0x2f not defined by current draft */
100 #define LDAP_OPT_HOST_NAME                      0x0030
101 #define LDAP_OPT_ERROR_NUMBER           0x0031
102 #define LDAP_OPT_ERROR_STRING           0x0032
103 #define LDAP_OPT_MATCHED_DN                     0x0033
104
105 /* 0x34 - 0x0fff not defined by current draft */
106
107 /* private and experimental options */
108 #define LDAP_OPT_DNS                            0x4001  /* use DN & DNS */
109
110 /* OpenLDAP specific options */
111 #define LDAP_OPT_DEBUG_LEVEL            0x5001  /* debug level */
112 #define LDAP_OPT_TIMEOUT                        0x5002  /* default timeout */
113 #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
117 /* TLS options */
118 #define LDAP_OPT_X_TLS_CACERTFILE       0x6001
119 #define LDAP_OPT_X_TLS_CACERTDIR        0x6002
120 #define LDAP_OPT_X_TLS_CERT             0x6003
121 #define LDAP_OPT_X_TLS_CERTFILE         0x6004
122 #define LDAP_OPT_X_TLS_KEYFILE          0x6005
123 #define LDAP_OPT_X_TLS_REQUIRE_CERT     0x6006
124 #define LDAP_OPT_X_TLS                  0x6007
125 #define LDAP_OPT_X_TLS_PROTOCOL         0x6008
126 #define LDAP_OPT_X_TLS_CIPHER_SUITE     0x6009
127
128 #define LDAP_OPT_X_TLS_NEVER            0
129 #define LDAP_OPT_X_TLS_HARD             1
130 #define LDAP_OPT_X_TLS_DEMAND           2
131 #define LDAP_OPT_X_TLS_ALLOW            3
132 #define LDAP_OPT_X_TLS_TRY              4
133
134 /* on/off values */
135 #define LDAP_OPT_ON             ((void *) 1)
136 #define LDAP_OPT_OFF    ((void *) 0)
137
138 #define LDAP_OPT_SUCCESS        0
139 #define LDAP_OPT_ERROR          (-1)
140
141 #define LDAP_API_INFO_VERSION   (1)
142 typedef struct ldapapiinfo {
143         int             ldapai_info_version;            /* version of LDAPAPIInfo (1) */
144         int             ldapai_api_version;                     /* revision of API supported */
145         int             ldapai_protocol_version;        /* highest LDAP version supported */
146         char    **ldapai_extensions;            /* names of API extensions */
147         char    *ldapai_vendor_name;            /* name of supplier */
148         int             ldapai_vendor_version;          /* supplier-specific version * 100 */
149 } LDAPAPIInfo;
150
151 #define LDAP_FEATURE_INFO_VERSION (1) /* version of api feature structure */
152 typedef struct ldap_apifeature_info {
153         int             ldapaif_info_version; /* version of this struct (1) */
154         char*   ldapaif_name;    /* matches LDAP_API_FEATURE_... less the prefix */
155         int             ldapaif_version; /* matches the value LDAP_API_FEATURE_... */
156 } LDAPAPIFeatureInfo;
157
158 typedef struct ldapcontrol {
159         char *                  ldctl_oid;
160         struct berval   ldctl_value;
161         char                    ldctl_iscritical;
162 } LDAPControl;
163
164 /* LDAP Controls */
165         /* chase referrals controls */
166 #define LDAP_CONTROL_REFERRALS  "1.2.840.113666.1.4.616"
167 #define LDAP_CHASE_SUBORDINATE_REFERRALS        0x0020U
168 #define LDAP_CHASE_EXTERNAL_REFERRALS   0x0040U
169
170 #define LDAP_CONTROL_MANAGEDSAIT "2.16.840.1.113730.3.4.2"
171
172 /* Experimental Controls */
173 #define LDAP_CONTROL_X_MODIFY_PASSWD "1.3.6.1.4.1.4203.666.5.1"
174
175 /* LDAP Unsolicited Notifications */
176 #define LDAP_NOTICE_OF_DISCONNECTION    "1.3.6.1.4.1.1466.20036"
177 #define LDAP_NOTICE_DISCONNECT LDAP_NOTICE_OF_DISCONNECTION
178
179
180 /* LDAP Extended Operations */
181 #define LDAP_EXOP_START_TLS "1.3.6.1.4.1.1466.20037"
182
183 #define LDAP_EXOP_X_MODIFY_PASSWD "1.3.6.1.4.1.4203.666.6.1"
184 #define LDAP_TAG_EXOP_X_MODIFY_PASSWD_ID        ((ber_tag_t) 0x80U)
185 #define LDAP_TAG_EXOP_X_MODIFY_PASSWD_OLD       ((ber_tag_t) 0x81U)
186 #define LDAP_TAG_EXOP_X_MODIFY_PASSWD_NEW       ((ber_tag_t) 0x82U)
187 #define LDAP_TAG_EXOP_X_MODIFY_PASSWD_GEN       ((ber_tag_t) 0x80U)
188
189 /* 
190  * specific LDAP instantiations of BER types we know about
191  */
192
193 /* Overview of LBER tag construction
194  *
195  *      Bits
196  *      ______
197  *      8 7 | CLASS
198  *      0 0 = UNIVERSAL
199  *      0 1 = APPLICATION
200  *      1 0 = CONTEXT-SPECIFIC
201  *      1 1 = PRIVATE
202  *              _____
203  *              | 6 | DATA-TYPE
204  *                0 = PRIMITIVE
205  *                1 = CONSTRUCTED
206  *                      ___________
207  *                      | 5 ... 1 | TAG-NUMBER
208  */
209
210 /* general stuff */
211 #define LDAP_TAG_MESSAGE        ((ber_tag_t) 0x30U)     /* constructed + 16 */
212 #define LDAP_TAG_MSGID          ((ber_tag_t) 0x02U)     /* integer */
213 #define LDAP_TAG_LDAPDN         ((ber_tag_t) 0x04U)     /* octect string */
214 #define LDAP_TAG_LDAPCRED       ((ber_tag_t) 0x04U)     /* octect string */
215 #define LDAP_TAG_CONTROLS       ((ber_tag_t) 0xa0U)     /* context specific + constructed + 0 */
216 #define LDAP_TAG_REFERRAL       ((ber_tag_t) 0xa3U)     /* context specific + constructed + 3 */
217
218 #define LDAP_TAG_NEWSUPERIOR    ((ber_tag_t) 0x80U)     /* context-specific + primitive + 0 */
219
220 #define LDAP_TAG_EXOP_REQ_OID   ((ber_tag_t) 0x80U)     /* context specific + primitive */
221 #define LDAP_TAG_EXOP_REQ_VALUE ((ber_tag_t) 0x81U)     /* context specific + primitive */
222 #define LDAP_TAG_EXOP_RES_OID   ((ber_tag_t) 0x8aU)     /* context specific + primitive */
223 #define LDAP_TAG_EXOP_RES_VALUE ((ber_tag_t) 0x8bU)     /* context specific + primitive */
224
225 #define LDAP_TAG_SASL_RES_CREDS ((ber_tag_t) 0x87U)     /* context specific + primitive */
226
227
228 /* possible operations a client can invoke */
229 #define LDAP_REQ_BIND                   ((ber_tag_t) 0x60U)     /* application + constructed */
230 #define LDAP_REQ_UNBIND                 ((ber_tag_t) 0x42U)     /* application + primitive   */
231 #define LDAP_REQ_SEARCH                 ((ber_tag_t) 0x63U)     /* application + constructed */
232 #define LDAP_REQ_MODIFY                 ((ber_tag_t) 0x66U)     /* application + constructed */
233 #define LDAP_REQ_ADD                    ((ber_tag_t) 0x68U)     /* application + constructed */
234 #define LDAP_REQ_DELETE                 ((ber_tag_t) 0x4aU)     /* application + primitive   */
235 #define LDAP_REQ_MODRDN                 ((ber_tag_t) 0x6cU)     /* application + constructed */
236 #define LDAP_REQ_MODDN                  LDAP_REQ_MODRDN 
237 #define LDAP_REQ_RENAME                 LDAP_REQ_MODRDN 
238 #define LDAP_REQ_COMPARE                ((ber_tag_t) 0x6eU)     /* application + constructed */
239 #define LDAP_REQ_ABANDON                ((ber_tag_t) 0x50U)     /* application + primitive   */
240 #define LDAP_REQ_EXTENDED               ((ber_tag_t) 0x77U)     /* application + constructed */
241
242 /* possible result types a server can return */
243 #define LDAP_RES_BIND                   ((ber_tag_t) 0x61U)     /* application + constructed */
244 #define LDAP_RES_SEARCH_ENTRY           ((ber_tag_t) 0x64U)     /* application + constructed */
245 #define LDAP_RES_SEARCH_REFERENCE       ((ber_tag_t) 0x73U)     /* V3: application + constructed */
246 #define LDAP_RES_SEARCH_RESULT          ((ber_tag_t) 0x65U)     /* application + constructed */
247 #define LDAP_RES_MODIFY                 ((ber_tag_t) 0x67U)     /* application + constructed */
248 #define LDAP_RES_ADD                    ((ber_tag_t) 0x69U)     /* application + constructed */
249 #define LDAP_RES_DELETE                 ((ber_tag_t) 0x6bU)     /* application + constructed */
250 #define LDAP_RES_MODRDN                 ((ber_tag_t) 0x6dU)     /* application + constructed */
251 #define LDAP_RES_MODDN                  LDAP_RES_MODRDN /* application + constructed */
252 #define LDAP_RES_RENAME                 LDAP_RES_MODRDN /* application + constructed */
253 #define LDAP_RES_COMPARE                ((ber_tag_t) 0x6fU)     /* application + constructed */
254 #define LDAP_RES_EXTENDED               ((ber_tag_t) 0x78U)     /* V3: application + constructed */
255
256 #define LDAP_RES_ANY                    ((ber_tag_t)(-1))
257 #define LDAP_RES_UNSOLICITED    ((ber_tag_t)(0))
258
259
260 /* sasl methods */
261 #define LDAP_SASL_SIMPLE                        NULL
262
263 /* authentication methods available */
264 #define LDAP_AUTH_NONE          ((ber_tag_t) 0x00U)     /* no authentication              */
265 #define LDAP_AUTH_SIMPLE        ((ber_tag_t) 0x80U)     /* context specific + primitive   */
266 #define LDAP_AUTH_SASL          ((ber_tag_t) 0xa3U)     /* context specific + primitive   */
267 #define LDAP_AUTH_KRBV4         ((ber_tag_t) 0xffU)     /* means do both of the following */
268 #define LDAP_AUTH_KRBV41        ((ber_tag_t) 0x81U)     /* context specific + primitive   */
269 #define LDAP_AUTH_KRBV42        ((ber_tag_t) 0x82U)     /* context specific + primitive   */
270
271
272 /* filter types */
273 #define LDAP_FILTER_AND         ((ber_tag_t) 0xa0U)     /* context specific + constructed */
274 #define LDAP_FILTER_OR          ((ber_tag_t) 0xa1U)     /* context specific + constructed */
275 #define LDAP_FILTER_NOT         ((ber_tag_t) 0xa2U)     /* context specific + constructed */
276 #define LDAP_FILTER_EQUALITY    ((ber_tag_t) 0xa3U)     /* context specific + constructed */
277 #define LDAP_FILTER_SUBSTRINGS  ((ber_tag_t) 0xa4U)     /* context specific + constructed */
278 #define LDAP_FILTER_GE          ((ber_tag_t) 0xa5U)     /* context specific + constructed */
279 #define LDAP_FILTER_LE          ((ber_tag_t) 0xa6U)     /* context specific + constructed */
280 #define LDAP_FILTER_PRESENT     ((ber_tag_t) 0x87U)     /* context specific + primitive   */
281 #define LDAP_FILTER_APPROX      ((ber_tag_t) 0xa8U)     /* context specific + constructed */
282 #define LDAP_FILTER_EXT         ((ber_tag_t) 0xa9U)     /* context specific + constructed */
283
284 /* extended filter component types */
285 #define LDAP_FILTER_EXT_OID     ((ber_tag_t) 0x81U)     /* context specific */
286 #define LDAP_FILTER_EXT_TYPE    ((ber_tag_t) 0x82U)     /* context specific */
287 #define LDAP_FILTER_EXT_VALUE   ((ber_tag_t) 0x83U)     /* context specific */
288 #define LDAP_FILTER_EXT_DNATTRS ((ber_tag_t) 0x84U)     /* context specific */
289
290 /* substring filter component types */
291 #define LDAP_SUBSTRING_INITIAL  ((ber_tag_t) 0x80U)     /* context specific */
292 #define LDAP_SUBSTRING_ANY      ((ber_tag_t) 0x81U)     /* context specific */
293 #define LDAP_SUBSTRING_FINAL    ((ber_tag_t) 0x82U)     /* context specific */
294
295 /* search scopes */
296 #define LDAP_SCOPE_BASE         ((ber_int_t) 0x0000)
297 #define LDAP_SCOPE_ONELEVEL     ((ber_int_t) 0x0001)
298 #define LDAP_SCOPE_SUBTREE      ((ber_int_t) 0x0002)
299
300 /* substring filter component types */
301 #define LDAP_SUBSTRING_INITIAL  ((ber_tag_t) 0x80U)     /* context specific */
302 #define LDAP_SUBSTRING_ANY      ((ber_tag_t) 0x81U)     /* context specific */
303 #define LDAP_SUBSTRING_FINAL    ((ber_tag_t) 0x82U)     /* context specific */
304
305 /* 
306  * possible error codes we can return
307  */
308
309 #define LDAP_RANGE(n,x,y)       (((x) <= (n)) && ((n) <= (y)))
310
311 #define LDAP_SUCCESS                    0x00
312 #define LDAP_OPERATIONS_ERROR           0x01
313 #define LDAP_PROTOCOL_ERROR             0x02
314 #define LDAP_TIMELIMIT_EXCEEDED         0x03
315 #define LDAP_SIZELIMIT_EXCEEDED         0x04
316 #define LDAP_COMPARE_FALSE              0x05
317 #define LDAP_COMPARE_TRUE               0x06
318 #define LDAP_AUTH_METHOD_NOT_SUPPORTED  0x07
319 #define LDAP_STRONG_AUTH_NOT_SUPPORTED  LDAP_AUTH_METHOD_NOT_SUPPORTED
320 #define LDAP_STRONG_AUTH_REQUIRED       0x08
321 #define LDAP_PARTIAL_RESULTS            0x09    /* not listed in v3 */
322
323 #define LDAP_REFERRAL                           0x0a /* LDAPv3 */
324 #define LDAP_ADMINLIMIT_EXCEEDED        0x0b /* LDAPv3 */
325 #define LDAP_UNAVAILABLE_CRITICAL_EXTENSION     0x0c /* LDAPv3 */
326 #define LDAP_CONFIDENTIALITY_REQUIRED   0x0d /* LDAPv3 */
327 #define LDAP_SASL_BIND_IN_PROGRESS      0x0e /* LDAPv3 */       
328
329 #define LDAP_ATTR_ERROR(n)      LDAP_RANGE((n),0x10,0x15) /* 16-21 */
330
331 #define LDAP_NO_SUCH_ATTRIBUTE          0x10
332 #define LDAP_UNDEFINED_TYPE             0x11
333 #define LDAP_INAPPROPRIATE_MATCHING     0x12
334 #define LDAP_CONSTRAINT_VIOLATION       0x13
335 #define LDAP_TYPE_OR_VALUE_EXISTS       0x14
336 #define LDAP_INVALID_SYNTAX             0x15
337
338 #define LDAP_NAME_ERROR(n)      LDAP_RANGE((n),0x20,0x24) /* 32-34,36 */
339
340 #define LDAP_NO_SUCH_OBJECT             0x20
341 #define LDAP_ALIAS_PROBLEM              0x21
342 #define LDAP_INVALID_DN_SYNTAX          0x22
343 #define LDAP_IS_LEAF                    0x23 /* not LDAPv3 */
344 #define LDAP_ALIAS_DEREF_PROBLEM        0x24
345
346 #define LDAP_SECURITY_ERROR(n)  LDAP_RANGE((n),0x30,0x32) /* 48-50 */
347
348 #define LDAP_INAPPROPRIATE_AUTH         0x30
349 #define LDAP_INVALID_CREDENTIALS        0x31
350 #define LDAP_INSUFFICIENT_ACCESS        0x32
351
352 #define LDAP_SERVICE_ERROR(n)   LDAP_RANGE((n),0x33,0x36) /* 51-54 */
353
354 #define LDAP_BUSY                       0x33
355 #define LDAP_UNAVAILABLE                0x34
356 #define LDAP_UNWILLING_TO_PERFORM       0x35
357 #define LDAP_LOOP_DETECT                0x36
358
359 #define LDAP_UPDATE_ERROR(n)    LDAP_RANGE((n),0x40,0x47) /* 64-69,71 */
360
361 #define LDAP_NAMING_VIOLATION           0x40
362 #define LDAP_OBJECT_CLASS_VIOLATION     0x41
363 #define LDAP_NOT_ALLOWED_ON_NONLEAF     0x42
364 #define LDAP_NOT_ALLOWED_ON_RDN         0x43
365 #define LDAP_ALREADY_EXISTS             0x44
366 #define LDAP_NO_OBJECT_CLASS_MODS       0x45
367 #define LDAP_RESULTS_TOO_LARGE          0x46 /* CLDAP */
368 #define LDAP_AFFECTS_MULTIPLE_DSAS      0x47 /* LDAPv3 */
369
370 #define LDAP_OTHER                      0x50
371
372 #define LDAP_API_ERROR(n)               LDAP_RANGE((n),0x51,0xff) /* 81+ */
373
374 #define LDAP_SERVER_DOWN                0x51
375 #define LDAP_LOCAL_ERROR                0x52
376 #define LDAP_ENCODING_ERROR             0x53
377 #define LDAP_DECODING_ERROR             0x54
378 #define LDAP_TIMEOUT                    0x55
379 #define LDAP_AUTH_UNKNOWN               0x56
380 #define LDAP_FILTER_ERROR               0x57
381 #define LDAP_USER_CANCELLED             0x58
382 #define LDAP_PARAM_ERROR                0x59
383 #define LDAP_NO_MEMORY                  0x5a
384
385 #define LDAP_CONNECT_ERROR                              0x5b    /* new */
386 #define LDAP_NOT_SUPPORTED                              0x5c    /* new */
387 #define LDAP_CONTROL_NOT_FOUND                  0x5d    /* new */
388 #define LDAP_NO_RESULTS_RETURNED                0x5e    /* new */
389 #define LDAP_MORE_RESULTS_TO_RETURN             0x5f    /* new */
390 #define LDAP_CLIENT_LOOP                                0x60    /* new */
391 #define LDAP_REFERRAL_LIMIT_EXCEEDED    0x61    /* new */
392
393 /*
394  * This structure represents both ldap messages and ldap responses.
395  * These are really the same, except in the case of search responses,
396  * where a response has multiple messages.
397  */
398
399 typedef struct ldapmsg LDAPMessage;
400
401 /* for modifications */
402 typedef struct ldapmod {
403         int             mod_op;
404
405 #define LDAP_MOD_ADD            ((ber_int_t) 0x0000)
406 #define LDAP_MOD_DELETE         ((ber_int_t) 0x0001)
407 #define LDAP_MOD_REPLACE        ((ber_int_t) 0x0002)
408 #define LDAP_MOD_BVALUES        ((ber_int_t) 0x0080)
409 /* IMPORTANT: do not use code 0x1000 (or above),
410  * it is used internally by the backends!
411  * (see ldap/servers/slapd/slap.h)
412  */
413
414         char            *mod_type;
415         union mod_vals_u {
416                 char            **modv_strvals;
417                 struct berval   **modv_bvals;
418         } mod_vals;
419 #define mod_values      mod_vals.modv_strvals
420 #define mod_bvalues     mod_vals.modv_bvals
421 } LDAPMod;
422
423 /*
424  * structures for ldap getfilter routines
425  */
426
427 typedef struct ldap_filt_info {
428         char                    *lfi_filter;
429         char                    *lfi_desc;
430         int                     lfi_scope;
431         int                     lfi_isexact;
432         struct ldap_filt_info   *lfi_next;
433 } LDAPFiltInfo;
434
435 typedef struct ldap_filt_list {
436     char                        *lfl_tag;
437     char                        *lfl_pattern;
438     char                        *lfl_delims;
439     LDAPFiltInfo                *lfl_ilist;
440     struct ldap_filt_list       *lfl_next;
441 } LDAPFiltList;
442
443
444 #define LDAP_FILT_MAXSIZ        1024
445
446 typedef struct ldap_filt_desc {
447         LDAPFiltList            *lfd_filtlist;
448         LDAPFiltInfo            *lfd_curfip;
449         LDAPFiltInfo            lfd_retfi;
450         char                    lfd_filter[ LDAP_FILT_MAXSIZ ];
451         char                    *lfd_curval;
452         char                    *lfd_curvalcopy;
453         char                    **lfd_curvalwords;
454         char                    *lfd_filtprefix;
455         char                    *lfd_filtsuffix;
456 } LDAPFiltDesc;
457
458
459 /*
460  * structure representing an ldap session which can
461  * encompass connections to multiple servers (in the
462  * face of referrals).
463  */
464 typedef struct ldap LDAP;
465
466 #define LDAP_DEREF_NEVER        0x00
467 #define LDAP_DEREF_SEARCHING    0x01
468 #define LDAP_DEREF_FINDING      0x02
469 #define LDAP_DEREF_ALWAYS       0x03
470
471 #define LDAP_NO_LIMIT           0
472
473 /* how many messages to retrieve results for */
474 #define LDAP_MSG_ONE            0x00
475 #define LDAP_MSG_ALL            0x01
476 #define LDAP_MSG_RECEIVED       0x02
477
478 /*
479  * structure for ldap friendly mapping routines
480  */
481
482 typedef struct ldap_friendly {
483         char    *lf_unfriendly;
484         char    *lf_friendly;
485 } LDAPFriendlyMap;
486
487 /*
488  * types for ldap URL handling
489  */
490 typedef struct ldap_url_desc {
491         struct ldap_url_desc *lud_next;
492         int             lud_ldaps;
493     char        *lud_host;
494     int         lud_port;
495     char        *lud_dn;
496     char        **lud_attrs;
497     int         lud_scope;
498     char        *lud_filter;
499         char    **lud_exts;
500 } LDAPURLDesc;
501
502 #define LDAP_URL_SUCCESS                0x00    /* Success */
503 #define LDAP_URL_ERR_MEM                0x01    /* can't allocate memory space */
504 #define LDAP_URL_ERR_PARAM              0x02    /* parameter is bad */
505
506 #define LDAP_URL_ERR_NOTLDAP    0x03    /* URL doesn't begin with "ldap[s]://" */
507 #define LDAP_URL_ERR_BADENCLOSURE 0x04  /* URL is missing trailing ">" */
508 #define LDAP_URL_ERR_BADURL             0x05    /* URL is bad */
509 #define LDAP_URL_ERR_BADHOST    0x06    /* host port is bad */
510 #define LDAP_URL_ERR_BADATTRS   0x07    /* bad (or missing) attributes */
511 #define LDAP_URL_ERR_BADSCOPE   0x08    /* scope string is invalid (or missing) */
512 #define LDAP_URL_ERR_BADFILTER  0x09    /* bad or missing filter */
513 #define LDAP_URL_ERR_BADEXTS    0x0a    /* bad or missing extensions */
514
515 /*
516  * The API draft spec says we should declare (or cause to be declared)
517  * 'struct timeval'.   We don't.  See IETF LDAPext discussions.
518  */
519 struct timeval;
520
521 /*
522  * in options.c:
523  */
524 LIBLDAP_F( int )
525 ldap_get_option LDAP_P((
526         LDAP *ld,
527         int option,
528         void *outvalue));
529
530 LIBLDAP_F( int )
531 ldap_set_option LDAP_P((
532         LDAP *ld,
533         int option,
534         LDAP_CONST void *invalue));
535
536
537 /*
538  * in controls.c:
539  */
540 LIBLDAP_F( void )
541 ldap_control_free LDAP_P((
542         LDAPControl *ctrl ));
543
544 LIBLDAP_F( void )
545 ldap_controls_free LDAP_P((
546         LDAPControl **ctrls ));
547
548   
549 /*
550  * in extended.c:
551  */
552 LIBLDAP_F( int )
553 ldap_extended_operation LDAP_P((
554         LDAP                    *ld,
555         LDAP_CONST char *reqoid,
556         struct berval   *reqdata,
557         LDAPControl             **serverctrls,
558         LDAPControl             **clientctrls,
559         int                             *msgidp ));
560
561 LIBLDAP_F( int )
562 ldap_extended_operation_s LDAP_P((
563         LDAP                    *ld,
564         LDAP_CONST char *reqoid,
565         struct berval   *reqdata,
566         LDAPControl             **serverctrls,
567         LDAPControl             **clientctrls,
568         char                    **retoidp,
569         struct berval   **retdatap ));
570
571 LIBLDAP_F( int )
572 ldap_parse_extended_result LDAP_P((
573         LDAP                    *ld,
574         LDAPMessage             *res,
575         char                    **retoidp,
576         struct berval   **retdatap,
577         int                             freeit ));
578
579 /*
580  * in abandon.c:
581  */
582 LIBLDAP_F( int )
583 ldap_abandon LDAP_P((
584         LDAP *ld,
585         int msgid ));
586
587 LIBLDAP_F( int )
588 ldap_abandon_ext LDAP_P((
589         LDAP                    *ld,
590         int                             msgid,
591         LDAPControl             **serverctrls,
592         LDAPControl             **clientctrls ));
593
594
595 /*
596  * in add.c:
597  */
598 LIBLDAP_F( int )
599 ldap_add_ext LDAP_P((
600         LDAP                    *ld,
601         LDAP_CONST char *dn,
602         LDAPMod                 **attrs,
603         LDAPControl             **serverctrls,
604         LDAPControl             **clientctrls,
605         int                     *msgidp ));
606
607 LIBLDAP_F( int )
608 ldap_add_ext_s LDAP_P((
609         LDAP                    *ld,
610         LDAP_CONST char *dn,
611         LDAPMod                 **attrs,
612         LDAPControl             **serverctrls,
613         LDAPControl             **clientctrls ));
614
615 LIBLDAP_F( int )
616 ldap_add LDAP_P((
617         LDAP *ld,
618         LDAP_CONST char *dn,
619         LDAPMod **attrs ));
620
621 LIBLDAP_F( int )
622 ldap_add_s LDAP_P((
623         LDAP *ld,
624         LDAP_CONST char *dn,
625         LDAPMod **attrs ));
626
627
628 /*
629  * in sasl.c:
630  */
631 LIBLDAP_F( int )
632 ldap_sasl_bind LDAP_P((
633         LDAP                    *ld,
634         LDAP_CONST char *dn,
635         LDAP_CONST char *mechanism,
636         struct berval   *cred,
637         LDAPControl             **serverctrls,
638         LDAPControl             **clientctrls,
639         int                             *msgidp ));
640
641 LIBLDAP_F( int )
642 ldap_sasl_bind_s LDAP_P((
643         LDAP                    *ld,
644         LDAP_CONST char *dn,
645         LDAP_CONST char *mechanism,
646         struct berval   *cred,
647         LDAPControl             **serverctrls,
648         LDAPControl             **clientctrls,
649         struct berval   **servercredp ));
650
651 LIBLDAP_F( int )
652 ldap_parse_sasl_bind_result LDAP_P((
653         LDAP                    *ld,
654         LDAPMessage             *res,
655         struct berval   **servercredp,
656         int                             freeit ));
657
658 /*
659  * in bind.c:
660  *      (deprecated)
661  */
662 LIBLDAP_F( int )
663 ldap_bind LDAP_P((
664         LDAP *ld,
665         LDAP_CONST char *who,
666         LDAP_CONST char *passwd,
667         int authmethod ));
668
669 LIBLDAP_F( int )
670 ldap_bind_s LDAP_P((
671         LDAP *ld,
672         LDAP_CONST char *who,
673         LDAP_CONST char *cred,
674         int authmethod ));
675
676 LIBLDAP_F( void )
677 ldap_set_rebind_proc LDAP_P((
678         LDAP *ld,
679         int (*rebindproc) LDAP_P((
680                 LDAP *ld,
681                 char **dnp,
682                 char **passwdp,
683                 int *authmethodp,
684                 int freeit ))));
685
686
687 /*
688  * in sbind.c:
689  */
690 LIBLDAP_F( int )
691 ldap_simple_bind LDAP_P((
692         LDAP *ld,
693         LDAP_CONST char *who,
694         LDAP_CONST char *passwd ));
695
696 LIBLDAP_F( int )
697 ldap_simple_bind_s LDAP_P((
698         LDAP *ld,
699         LDAP_CONST char *who,
700         LDAP_CONST char *passwd ));
701
702
703 /*
704  * in kbind.c:
705  *      (deprecated)
706  */
707 LIBLDAP_F( int )
708 ldap_kerberos_bind_s LDAP_P((
709         LDAP *ld,
710         LDAP_CONST char *who ));
711
712 LIBLDAP_F( int )
713 ldap_kerberos_bind1 LDAP_P((
714         LDAP *ld,
715         LDAP_CONST char *who ));
716
717 LIBLDAP_F( int )
718 ldap_kerberos_bind1_s LDAP_P((
719         LDAP *ld,
720         LDAP_CONST char *who ));
721
722 LIBLDAP_F( int )
723 ldap_kerberos_bind2 LDAP_P((
724         LDAP *ld,
725         LDAP_CONST char *who ));
726
727 LIBLDAP_F( int )
728 ldap_kerberos_bind2_s LDAP_P((
729         LDAP *ld,
730         LDAP_CONST char *who ));
731
732 /*
733  * in cache.c
734  * (deprecated)
735  */
736 LIBLDAP_F( int )
737 ldap_enable_cache LDAP_P(( LDAP *ld, long timeout, ber_len_t maxmem ));
738
739 LIBLDAP_F( void )
740 ldap_disable_cache LDAP_P(( LDAP *ld ));
741
742 LIBLDAP_F( void )
743 ldap_set_cache_options LDAP_P(( LDAP *ld, unsigned long opts ));
744
745 LIBLDAP_F( void )
746 ldap_destroy_cache LDAP_P(( LDAP *ld ));
747
748 LIBLDAP_F( void )
749 ldap_flush_cache LDAP_P(( LDAP *ld ));
750
751 LIBLDAP_F( void )
752 ldap_uncache_entry LDAP_P(( LDAP *ld, LDAP_CONST char *dn ));
753
754 LIBLDAP_F( void )
755 ldap_uncache_request LDAP_P(( LDAP *ld, int msgid ));
756
757
758 /*
759  * in compare.c:
760  */
761 LIBLDAP_F( int )
762 ldap_compare_ext LDAP_P((
763         LDAP                    *ld,
764         LDAP_CONST char *dn,
765         LDAP_CONST char *attr,
766         struct berval   *bvalue,
767         LDAPControl             **serverctrls,
768         LDAPControl             **clientctrls,
769         int                     *msgidp ));
770
771 LIBLDAP_F( int )
772 ldap_compare_ext_s LDAP_P((
773         LDAP                    *ld,
774         LDAP_CONST char *dn,
775         LDAP_CONST char *attr,
776         struct berval   *bvalue,
777         LDAPControl             **serverctrls,
778         LDAPControl             **clientctrls ));
779
780 LIBLDAP_F( int )
781 ldap_compare LDAP_P((
782         LDAP *ld,
783         LDAP_CONST char *dn,
784         LDAP_CONST char *attr,
785         LDAP_CONST char *value ));
786
787 LIBLDAP_F( int )
788 ldap_compare_s LDAP_P((
789         LDAP *ld,
790         LDAP_CONST char *dn,
791         LDAP_CONST char *attr,
792         LDAP_CONST char *value ));
793
794
795 /*
796  * in delete.c:
797  */
798 LIBLDAP_F( int )
799 ldap_delete_ext LDAP_P((
800         LDAP                    *ld,
801         LDAP_CONST char *dn,
802         LDAPControl             **serverctrls,
803         LDAPControl             **clientctrls,
804         int                     *msgidp ));
805
806 LIBLDAP_F( int )
807 ldap_delete_ext_s LDAP_P((
808         LDAP                    *ld,
809         LDAP_CONST char *dn,
810         LDAPControl             **serverctrls,
811         LDAPControl             **clientctrls ));
812
813 LIBLDAP_F( int )
814 ldap_delete LDAP_P((
815         LDAP *ld,
816         LDAP_CONST char *dn ));
817
818 LIBLDAP_F( int )
819 ldap_delete_s LDAP_P((
820         LDAP *ld,
821         LDAP_CONST char *dn ));
822
823
824 /*
825  * in error.c:
826  */
827 LIBLDAP_F( int )
828 ldap_parse_result LDAP_P((
829         LDAP                    *ld,
830         LDAPMessage             *res,
831         int                             *errcodep,
832         char                    **matcheddnp,
833         char                    **errmsgp,
834         char                    ***referralsp,
835         LDAPControl             ***serverctrls,
836         int                             freeit ));
837
838 LIBLDAP_F( char *)
839 ldap_err2string LDAP_P((
840         int err ));
841
842 LIBLDAP_F( int )
843 ldap_result2error LDAP_P((      /* deprecated */
844         LDAP *ld,
845         LDAPMessage *r,
846         int freeit ));
847
848 LIBLDAP_F( void )
849 ldap_perror LDAP_P((    /* deprecated */
850         LDAP *ld,
851         LDAP_CONST char *s ));
852
853
854 /*
855  * in modify.c:
856  */
857 LIBLDAP_F( int )
858 ldap_modify_ext LDAP_P((
859         LDAP                    *ld,
860         LDAP_CONST char *dn,
861         LDAPMod                 **mods,
862         LDAPControl             **serverctrls,
863         LDAPControl             **clientctrls,
864         int                     *msgidp ));
865
866 LIBLDAP_F( int )
867 ldap_modify_ext_s LDAP_P((
868         LDAP                    *ld,
869         LDAP_CONST char *dn,
870         LDAPMod                 **mods,
871         LDAPControl             **serverctrls,
872         LDAPControl             **clientctrls ));
873
874 LIBLDAP_F( int )
875 ldap_modify LDAP_P((
876         LDAP *ld,
877         LDAP_CONST char *dn,
878         LDAPMod **mods ));
879
880 LIBLDAP_F( int )
881 ldap_modify_s LDAP_P((
882         LDAP *ld,
883         LDAP_CONST char *dn,
884         LDAPMod **mods ));
885
886
887 /*
888  * in modrdn.c:
889  */
890 LIBLDAP_F( int )
891 ldap_rename LDAP_P((
892         LDAP *ld,
893         LDAP_CONST char *dn,
894         LDAP_CONST char *newrdn,
895         LDAP_CONST char *newSuperior,
896         int deleteoldrdn,
897         LDAPControl **sctrls,
898         LDAPControl **cctrls,
899         int *msgidp ));
900
901 LIBLDAP_F( int )
902 ldap_rename_s LDAP_P((
903         LDAP *ld,
904         LDAP_CONST char *dn,
905         LDAP_CONST char *newrdn,
906         LDAP_CONST char *newSuperior,
907         int deleteoldrdn,
908         LDAPControl **sctrls,
909         LDAPControl **cctrls ));
910
911 LIBLDAP_F( int )
912 ldap_rename_ext LDAP_P((
913         LDAP                    *ld,
914         LDAP_CONST char *dn,
915         LDAP_CONST char *newrdn,
916         LDAP_CONST char *newparent,
917         int                             deleteoldrdn,
918         LDAPControl             **serverctrls,
919         LDAPControl             **clientctrls,
920         int                     *msgidp ));
921
922 LIBLDAP_F( int )
923 ldap_rename_ext_s LDAP_P((
924         LDAP                    *ld,
925         LDAP_CONST char *dn,
926         LDAP_CONST char *newrdn,
927         LDAP_CONST char *newparent,
928         int                             deleteoldrdn,
929         LDAPControl             **serverctrls,
930         LDAPControl             **clientctrls ));
931
932 LIBLDAP_F( int )
933 ldap_rename2 LDAP_P((
934         LDAP *ld,
935         LDAP_CONST char *dn,
936         LDAP_CONST char *newrdn,
937         LDAP_CONST char *newSuperior,
938         int deleteoldrdn ));
939
940 LIBLDAP_F( int )
941 ldap_rename2_s LDAP_P((
942         LDAP *ld,
943         LDAP_CONST char *dn,
944         LDAP_CONST char *newrdn,
945         LDAP_CONST char *newSuperior,
946         int deleteoldrdn ));
947
948 LIBLDAP_F( int )
949 ldap_modrdn LDAP_P((
950         LDAP *ld,
951         LDAP_CONST char *dn,
952         LDAP_CONST char *newrdn ));
953
954 LIBLDAP_F( int )
955 ldap_modrdn_s LDAP_P((
956         LDAP *ld,
957         LDAP_CONST char *dn,
958         LDAP_CONST char *newrdn ));
959
960 LIBLDAP_F( int )
961 ldap_modrdn2 LDAP_P((
962         LDAP *ld,
963         LDAP_CONST char *dn,
964         LDAP_CONST char *newrdn,
965         int deleteoldrdn ));
966
967 LIBLDAP_F( int )
968 ldap_modrdn2_s LDAP_P((
969         LDAP *ld,
970         LDAP_CONST char *dn,
971         LDAP_CONST char *newrdn,
972         int deleteoldrdn));
973
974
975 /*
976  * in open.c:
977  */
978 LIBLDAP_F( LDAP *)
979 ldap_open LDAP_P((
980         LDAP_CONST char *host,
981         int port ));
982
983 LIBLDAP_F( LDAP *)
984 ldap_init LDAP_P((
985         LDAP_CONST char *host,
986         int port ));
987
988 LIBLDAP_F( int )
989 ldap_create LDAP_P(( 
990         LDAP **ldp ));
991
992 LIBLDAP_F( int )
993 ldap_initialize LDAP_P((
994         LDAP **ldp,
995         LDAP_CONST char *url ));
996
997 LIBLDAP_F( int )
998 ldap_start_tls LDAP_P((
999         LDAP *ld,
1000         LDAPControl **serverctrls,
1001         LDAPControl **clientctrls ));
1002
1003 /*
1004  * in messages.c:
1005  */
1006 LIBLDAP_F( LDAPMessage *)
1007 ldap_first_message LDAP_P((
1008         LDAP *ld,
1009         LDAPMessage *chain ));
1010
1011 LIBLDAP_F( LDAPMessage *)
1012 ldap_next_message LDAP_P((
1013         LDAP *ld,
1014         LDAPMessage *msg ));
1015
1016 LIBLDAP_F( int )
1017 ldap_count_messages LDAP_P((
1018         LDAP *ld,
1019         LDAPMessage *chain ));
1020
1021
1022 /*
1023  * in references.c:
1024  */
1025 LIBLDAP_F( LDAPMessage *)
1026 ldap_first_reference LDAP_P((
1027         LDAP *ld,
1028         LDAPMessage *chain ));
1029
1030 LIBLDAP_F( LDAPMessage *)
1031 ldap_next_reference LDAP_P((
1032         LDAP *ld,
1033         LDAPMessage *ref ));
1034
1035 LIBLDAP_F( int )
1036 ldap_count_references LDAP_P((
1037         LDAP *ld,
1038         LDAPMessage *chain ));
1039
1040 LIBLDAP_F( int )
1041 ldap_parse_reference LDAP_P((
1042         LDAP                    *ld,
1043         LDAPMessage             *ref,
1044         char                    ***referralsp,
1045         LDAPControl             ***serverctrls,
1046         int                             freeit));
1047
1048
1049 /*
1050  * in getentry.c:
1051  */
1052 LIBLDAP_F( LDAPMessage *)
1053 ldap_first_entry LDAP_P((
1054         LDAP *ld,
1055         LDAPMessage *chain ));
1056
1057 LIBLDAP_F( LDAPMessage *)
1058 ldap_next_entry LDAP_P((
1059         LDAP *ld,
1060         LDAPMessage *entry ));
1061
1062 LIBLDAP_F( int )
1063 ldap_count_entries LDAP_P((
1064         LDAP *ld,
1065         LDAPMessage *chain ));
1066
1067 LIBLDAP_F( int )
1068 ldap_get_entry_controls LDAP_P((
1069         LDAP                    *ld,
1070         LDAPMessage             *entry,
1071         LDAPControl             ***serverctrls));
1072
1073
1074 /*
1075  * in addentry.c
1076  */
1077 LIBLDAP_F( LDAPMessage *)
1078 ldap_delete_result_entry LDAP_P((
1079         LDAPMessage **list,
1080         LDAPMessage *e ));
1081
1082 LIBLDAP_F( void )
1083 ldap_add_result_entry LDAP_P((
1084         LDAPMessage **list,
1085         LDAPMessage *e ));
1086
1087
1088 /*
1089  * in getdn.c
1090  */
1091 LIBLDAP_F( char * )
1092 ldap_get_dn LDAP_P((
1093         LDAP *ld,
1094         LDAPMessage *entry ));
1095
1096 LIBLDAP_F( char * )
1097 ldap_dn2ufn LDAP_P((
1098         LDAP_CONST char *dn ));
1099
1100 LIBLDAP_F( char ** )
1101 ldap_explode_dn LDAP_P((
1102         LDAP_CONST char *dn,
1103         int notypes ));
1104
1105 LIBLDAP_F( char ** )
1106 ldap_explode_rdn LDAP_P((
1107         LDAP_CONST char *rdn,
1108         int notypes ));
1109
1110 LIBLDAP_F( char * )
1111 ldap_parent_dn LDAP_P((
1112         LDAP_CONST char *dn ));
1113
1114 LIBLDAP_F( char * )
1115 ldap_relative_dn LDAP_P((
1116         LDAP_CONST char *dn ));
1117
1118 LIBLDAP_F( char * )
1119 ldap_normalize_dn LDAP_P((
1120         LDAP_CONST char *dn ));
1121
1122 LIBLDAP_F( char ** )
1123 ldap_explode_dns LDAP_P(( /* deprecated */
1124         LDAP_CONST char *dn ));
1125
1126 LIBLDAP_F( int )
1127 ldap_is_dns_dn LDAP_P(( /* deprecated */
1128         LDAP_CONST char *dn ));
1129
1130
1131 /*
1132  * in getattr.c
1133  */
1134 LIBLDAP_F( char *)
1135 ldap_first_attribute LDAP_P((                                                                    
1136         LDAP *ld,
1137         LDAPMessage *entry,
1138         BerElement **ber ));
1139
1140 LIBLDAP_F( char *)
1141 ldap_next_attribute LDAP_P((
1142         LDAP *ld,
1143         LDAPMessage *entry,
1144         BerElement *ber ));
1145
1146
1147 /*
1148  * in getvalues.c
1149  */
1150 LIBLDAP_F( char **)
1151 ldap_get_values LDAP_P((
1152         LDAP *ld,
1153         LDAPMessage *entry,
1154         LDAP_CONST char *target ));
1155
1156 LIBLDAP_F( struct berval **)
1157 ldap_get_values_len LDAP_P((
1158         LDAP *ld,
1159         LDAPMessage *entry,
1160         LDAP_CONST char *target ));
1161
1162 LIBLDAP_F( int )
1163 ldap_count_values LDAP_P((
1164         char **vals ));
1165
1166 LIBLDAP_F( int )
1167 ldap_count_values_len LDAP_P((
1168         struct berval **vals ));
1169
1170 LIBLDAP_F( void )
1171 ldap_value_free LDAP_P((
1172         char **vals ));
1173
1174 LIBLDAP_F( void )
1175 ldap_value_free_len LDAP_P((
1176         struct berval **vals ));
1177
1178 /*
1179  * in result.c:
1180  */
1181 LIBLDAP_F( int )
1182 ldap_result LDAP_P((
1183         LDAP *ld,
1184         int msgid,
1185         int all,
1186         struct timeval *timeout,
1187         LDAPMessage **result ));
1188
1189 LIBLDAP_F( int )
1190 ldap_msgtype LDAP_P((
1191         LDAPMessage *lm ));
1192
1193 LIBLDAP_F( int )
1194 ldap_msgid   LDAP_P((
1195         LDAPMessage *lm ));
1196
1197 LIBLDAP_F( int )
1198 ldap_msgfree LDAP_P((
1199         LDAPMessage *lm ));
1200
1201 LIBLDAP_F( int )
1202 ldap_msgdelete LDAP_P((
1203         LDAP *ld,
1204         int msgid ));
1205
1206
1207 /*
1208  * in search.c:
1209  */
1210 LIBLDAP_F( int )
1211 ldap_search_ext LDAP_P((
1212         LDAP                    *ld,
1213         LDAP_CONST char *base,
1214         int                             scope,
1215         LDAP_CONST char *filter,
1216         char                    **attrs,
1217         int                             attrsonly,
1218         LDAPControl             **serverctrls,
1219         LDAPControl             **clientctrls,
1220         struct timeval  *timeout,
1221         int                             sizelimit,
1222         int                             *msgidp ));
1223
1224 LIBLDAP_F( int )
1225 ldap_search_ext_s LDAP_P((
1226         LDAP                    *ld,
1227         LDAP_CONST char *base,
1228         int                             scope,
1229         LDAP_CONST char *filter,
1230         char                    **attrs,
1231         int                             attrsonly,
1232         LDAPControl             **serverctrls,
1233         LDAPControl             **clientctrls,
1234         struct timeval  *timeout,
1235         int                             sizelimit,
1236         LDAPMessage             **res ));
1237
1238 LIBLDAP_F( int )
1239 ldap_search LDAP_P((
1240         LDAP *ld,
1241         LDAP_CONST char *base,
1242         int scope,
1243         LDAP_CONST char *filter,
1244         char **attrs,
1245         int attrsonly ));
1246
1247 LIBLDAP_F( int )
1248 ldap_search_s LDAP_P((
1249         LDAP *ld,
1250         LDAP_CONST char *base,
1251         int scope,
1252         LDAP_CONST char *filter,
1253         char **attrs,
1254         int attrsonly,
1255         LDAPMessage **res ));
1256
1257 LIBLDAP_F( int )
1258 ldap_search_st LDAP_P((                                                  
1259         LDAP *ld,
1260         LDAP_CONST char *base,
1261         int scope,
1262         LDAP_CONST char *filter,
1263     char **attrs,
1264         int attrsonly,
1265         struct timeval *timeout,
1266         LDAPMessage **res ));
1267
1268
1269 /*
1270  * in ufn.c
1271  */
1272 LIBLDAP_F( int )
1273 ldap_ufn_search_c LDAP_P((
1274         LDAP *ld,
1275         LDAP_CONST char *ufn,
1276         char **attrs,
1277         int attrsonly,
1278         LDAPMessage **res,
1279         int (*cancelproc)( void *cl ),
1280         void *cancelparm ));
1281
1282 LIBLDAP_F( int )
1283 ldap_ufn_search_ct LDAP_P((
1284         LDAP *ld,
1285         LDAP_CONST char *ufn,
1286         char **attrs,
1287         int attrsonly,
1288         LDAPMessage **res,
1289         int (*cancelproc)( void *cl ),
1290         void *cancelparm,
1291         char *tag1,
1292         char *tag2,
1293         char *tag3 ));
1294
1295 LIBLDAP_F( int )
1296 ldap_ufn_search_s LDAP_P((
1297         LDAP *ld,
1298         LDAP_CONST char *ufn,
1299         char **attrs,
1300         int attrsonly,
1301         LDAPMessage **res ));
1302
1303 LIBLDAP_F( LDAPFiltDesc *)
1304 ldap_ufn_setfilter LDAP_P((
1305         LDAP *ld,
1306         LDAP_CONST char *fname ));
1307
1308 LIBLDAP_F( void )
1309 ldap_ufn_setprefix LDAP_P((
1310         LDAP *ld,
1311         LDAP_CONST char *prefix ));
1312
1313 LIBLDAP_F( int )
1314 ldap_ufn_timeout LDAP_P((
1315         void *tvparam ));
1316
1317
1318 /*
1319  * in unbind.c
1320  */
1321 LIBLDAP_F( int )
1322 ldap_unbind LDAP_P((
1323         LDAP *ld ));
1324
1325 LIBLDAP_F( int )
1326 ldap_unbind_s LDAP_P((
1327         LDAP *ld ));
1328
1329 LIBLDAP_F( int )
1330 ldap_unbind_ext LDAP_P((
1331         LDAP                    *ld,
1332         LDAPControl             **serverctrls,
1333         LDAPControl             **clientctrls));
1334
1335 LIBLDAP_F( int )
1336 ldap_unbind_ext_s LDAP_P((
1337         LDAP                    *ld,
1338         LDAPControl             **serverctrls,
1339         LDAPControl             **clientctrls));
1340
1341 /*
1342  * in getfilter.c
1343  */
1344 LIBLDAP_F( LDAPFiltDesc *)
1345 ldap_init_getfilter LDAP_P((
1346         LDAP_CONST char *fname ));
1347
1348 LIBLDAP_F( LDAPFiltDesc *)
1349 ldap_init_getfilter_buf LDAP_P((
1350         /* LDAP_CONST */ char *buf,
1351         ber_len_t buflen ));
1352
1353 LIBLDAP_F( LDAPFiltInfo *)
1354 ldap_getfirstfilter LDAP_P((
1355         LDAPFiltDesc *lfdp,
1356         /* LDAP_CONST */ char *tagpat,
1357         /* LDAP_CONST */ char *value ));
1358
1359 LIBLDAP_F( LDAPFiltInfo *)
1360 ldap_getnextfilter LDAP_P((
1361         LDAPFiltDesc *lfdp ));
1362
1363 LIBLDAP_F( void )
1364 ldap_setfilteraffixes LDAP_P((
1365         LDAPFiltDesc *lfdp,
1366         LDAP_CONST char *prefix,
1367         LDAP_CONST char *suffix ));
1368
1369 LIBLDAP_F( void )
1370 ldap_build_filter LDAP_P((
1371         char *buf,
1372         ber_len_t buflen,
1373         LDAP_CONST char *pattern,
1374         LDAP_CONST char *prefix,
1375         LDAP_CONST char *suffix,
1376         LDAP_CONST char *attr,
1377         LDAP_CONST char *value,
1378         char **valwords ));
1379
1380
1381 /*
1382  * in free.c
1383  */
1384
1385 LIBLDAP_F( void * )
1386 ldap_memalloc LDAP_P((
1387         ber_len_t s ));
1388
1389 LIBLDAP_F( void * )
1390 ldap_memrealloc LDAP_P((
1391         void* p,
1392         ber_len_t s ));
1393
1394 LIBLDAP_F( void * )
1395 ldap_memcalloc LDAP_P((
1396         ber_len_t n,
1397         ber_len_t s ));
1398
1399 LIBLDAP_F( void )
1400 ldap_memfree LDAP_P((
1401         void* p ));
1402
1403 LIBLDAP_F( void )
1404 ldap_memvfree LDAP_P((
1405         void** v ));
1406
1407 LIBLDAP_F( char * )
1408 ldap_strdup LDAP_P((
1409         LDAP_CONST char * ));
1410
1411 LIBLDAP_F( void )
1412 ldap_getfilter_free LDAP_P((
1413         LDAPFiltDesc *lfdp ));
1414
1415 LIBLDAP_F( void )
1416 ldap_mods_free LDAP_P((
1417         LDAPMod **mods,
1418         int freemods ));
1419
1420
1421 /*
1422  * in friendly.c
1423  */
1424 LIBLDAP_F( char * )
1425 ldap_friendly_name LDAP_P((
1426         LDAP_CONST char *filename,
1427         /* LDAP_CONST */ char *uname,
1428         LDAPFriendlyMap **map ));
1429
1430 LIBLDAP_F( void )
1431 ldap_free_friendlymap LDAP_P((
1432         LDAPFriendlyMap **map ));
1433
1434
1435 /*
1436  * in cldap.c
1437  */
1438 LIBLDAP_F( LDAP * )
1439 cldap_open LDAP_P((
1440         LDAP_CONST char *host,
1441         int port ));
1442
1443 LIBLDAP_F( void )
1444 cldap_close LDAP_P((
1445         LDAP *ld ));
1446
1447 LIBLDAP_F( int )
1448 cldap_search_s LDAP_P(( LDAP *ld,
1449         LDAP_CONST char *base,
1450         int scope,
1451         LDAP_CONST char *filter,
1452         char **attrs,
1453         int attrsonly,
1454         LDAPMessage **res,
1455         char *logdn ));
1456
1457 LIBLDAP_F( void )
1458 cldap_setretryinfo LDAP_P((
1459         LDAP *ld,
1460         int tries,
1461         int timeout ));
1462
1463
1464 /*
1465  * in sort.c
1466  */
1467 LIBLDAP_F( int )
1468 ldap_sort_entries LDAP_P(( LDAP *ld,
1469         LDAPMessage **chain,
1470         LDAP_CONST char *attr,
1471         int (*cmp) (LDAP_CONST char *, LDAP_CONST char *) ));
1472
1473 LIBLDAP_F( int )
1474 ldap_sort_values LDAP_P((
1475         LDAP *ld,
1476         char **vals,
1477         int (*cmp) (LDAP_CONST void *, LDAP_CONST void *) ));
1478
1479 LIBLDAP_F( int )
1480 ldap_sort_strcasecmp LDAP_P((
1481         LDAP_CONST void *a,
1482         LDAP_CONST void *b ));
1483
1484
1485 /*
1486  * in url.c
1487  *
1488  * need _ext varients
1489  */
1490 LIBLDAP_F( int )
1491 ldap_is_ldap_url LDAP_P((
1492         LDAP_CONST char *url ));
1493
1494 LIBLDAP_F( int )
1495 ldap_is_ldaps_url LDAP_P((
1496         LDAP_CONST char *url ));
1497
1498 LIBLDAP_F( int )
1499 ldap_url_parse LDAP_P((
1500         LDAP_CONST char *url,
1501         LDAPURLDesc **ludpp ));
1502
1503 LIBLDAP_F( void )
1504 ldap_free_urldesc LDAP_P((
1505         LDAPURLDesc *ludp ));
1506
1507 LIBLDAP_F( int )
1508 ldap_url_search LDAP_P((
1509         LDAP *ld,
1510         LDAP_CONST char *url,
1511         int attrsonly ));
1512
1513 LIBLDAP_F( int )
1514 ldap_url_search_s LDAP_P((
1515         LDAP *ld,
1516         LDAP_CONST char *url,
1517         int attrsonly,
1518         LDAPMessage **res ));
1519
1520 LIBLDAP_F( int )
1521 ldap_url_search_st LDAP_P((
1522         LDAP *ld,
1523         LDAP_CONST char *url,
1524         int attrsonly,
1525         struct timeval *timeout,
1526         LDAPMessage **res ));
1527
1528
1529 /*
1530  * in charset.c
1531  *      DEPRECATED
1532  */
1533 LIBLDAP_F( void )
1534 ldap_set_string_translators LDAP_P((
1535         LDAP *ld,
1536         BERTranslateProc encode_proc,
1537         BERTranslateProc decode_proc ));
1538
1539 LIBLDAP_F( int )
1540 ldap_translate_from_t61 LDAP_P((
1541         LDAP *ld,
1542         char **bufp,
1543         ber_len_t *lenp,
1544         int free_input ));
1545
1546 LIBLDAP_F( int )
1547 ldap_translate_to_t61 LDAP_P((
1548         LDAP *ld,
1549         char **bufp,
1550         ber_len_t *lenp,
1551         int free_input ));
1552
1553 LIBLDAP_F( void )
1554 ldap_enable_translation LDAP_P((
1555         LDAP *ld,
1556         LDAPMessage *entry,
1557         int enable ));
1558
1559 LIBLDAP_F( int )
1560 ldap_t61_to_8859 LDAP_P((
1561         char **bufp,
1562         ber_len_t *buflenp,
1563         int free_input ));
1564
1565 LIBLDAP_F( int )
1566 ldap_8859_to_t61 LDAP_P((
1567         char **bufp,
1568         ber_len_t *buflenp,
1569         int free_input ));
1570
1571 LDAP_END_DECL
1572
1573 #endif /* _LDAP_H */