1/* $NetBSD: ldap.h,v 1.1.1.7 2018/02/06 01:53:05 christos Exp $ */
2
3/* $OpenLDAP$ */
4/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 *
6 * Copyright 1998-2017 The OpenLDAP Foundation.
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted only as authorized by the OpenLDAP
11 * Public License.
12 *
13 * A copy of this license is available in file LICENSE in the
14 * top-level directory of the distribution or, alternatively, at
15 * <http://www.OpenLDAP.org/license.html>.
16 */
17/* Portions Copyright (c) 1990 Regents of the University of Michigan.
18 * All rights reserved.
19 *
20 * Redistribution and use in source and binary forms are permitted
21 * provided that this notice is preserved and that due credit is given
22 * to the University of Michigan at Ann Arbor. The name of the University
23 * may not be used to endorse or promote products derived from this
24 * software without specific prior written permission. This software
25 * is provided ``as is'' without express or implied warranty.
26 */
27
28#ifndef _LDAP_H
29#define _LDAP_H
30
31/* pull in lber */
32#include <lber.h>
33
34/* include version and API feature defines */
35#include <ldap_features.h>
36
37LDAP_BEGIN_DECL
38
39#define LDAP_VERSION1 1
40#define LDAP_VERSION2 2
41#define LDAP_VERSION3 3
42
43#define LDAP_VERSION_MIN LDAP_VERSION2
44#define LDAP_VERSION LDAP_VERSION2
45#define LDAP_VERSION_MAX LDAP_VERSION3
46
47/*
48 * We use 3000+n here because it is above 1823 (for RFC 1823),
49 * above 2000+rev of IETF LDAPEXT draft (now quite dated),
50 * yet below allocations for new RFCs (just in case there is
51 * someday an RFC produced).
52 */
53#define LDAP_API_VERSION 3001
54#define LDAP_VENDOR_NAME "OpenLDAP"
55
56/* OpenLDAP API Features */
57#define LDAP_API_FEATURE_X_OPENLDAP LDAP_VENDOR_VERSION
58
59#if defined( LDAP_API_FEATURE_X_OPENLDAP_REENTRANT ) || \
60 ( defined( LDAP_THREAD_SAFE ) && \
61 defined( LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE ) )
62 /* -lldap may or may not be thread safe */
63 /* -lldap_r, if available, is always thread safe */
64# define LDAP_API_FEATURE_THREAD_SAFE 1
65# define LDAP_API_FEATURE_SESSION_THREAD_SAFE 1
66# define LDAP_API_FEATURE_OPERATION_THREAD_SAFE 1
67#endif
68#if defined( LDAP_THREAD_SAFE ) && \
69 defined( LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE )
70/* #define LDAP_API_FEATURE_SESSION_SAFE 1 */
71/* #define LDAP_API_OPERATION_SESSION_SAFE 1 */
72#endif
73
74
75#define LDAP_PORT 389 /* ldap:/// default LDAP port */
76#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */
77
78#define LDAP_ROOT_DSE ""
79#define LDAP_NO_ATTRS "1.1"
80#define LDAP_ALL_USER_ATTRIBUTES "*"
81#define LDAP_ALL_OPERATIONAL_ATTRIBUTES "+" /* RFC 3673 */
82
83/* RFC 4511: maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- */
84#define LDAP_MAXINT (2147483647)
85
86/*
87 * LDAP_OPTions
88 * 0x0000 - 0x0fff reserved for api options
89 * 0x1000 - 0x3fff reserved for api extended options
90 * 0x4000 - 0x7fff reserved for private and experimental options
91 */
92
93#define LDAP_OPT_API_INFO 0x0000
94#define LDAP_OPT_DESC 0x0001 /* historic */
95#define LDAP_OPT_DEREF 0x0002
96#define LDAP_OPT_SIZELIMIT 0x0003
97#define LDAP_OPT_TIMELIMIT 0x0004
98/* 0x05 - 0x07 not defined */
99#define LDAP_OPT_REFERRALS 0x0008
100#define LDAP_OPT_RESTART 0x0009
101/* 0x0a - 0x10 not defined */
102#define LDAP_OPT_PROTOCOL_VERSION 0x0011
103#define LDAP_OPT_SERVER_CONTROLS 0x0012
104#define LDAP_OPT_CLIENT_CONTROLS 0x0013
105/* 0x14 not defined */
106#define LDAP_OPT_API_FEATURE_INFO 0x0015
107/* 0x16 - 0x2f not defined */
108#define LDAP_OPT_HOST_NAME 0x0030
109#define LDAP_OPT_RESULT_CODE 0x0031
110#define LDAP_OPT_ERROR_NUMBER LDAP_OPT_RESULT_CODE
111#define LDAP_OPT_DIAGNOSTIC_MESSAGE 0x0032
112#define LDAP_OPT_ERROR_STRING LDAP_OPT_DIAGNOSTIC_MESSAGE
113#define LDAP_OPT_MATCHED_DN 0x0033
114/* 0x0034 - 0x3fff not defined */
115/* 0x0091 used by Microsoft for LDAP_OPT_AUTO_RECONNECT */
116#define LDAP_OPT_SSPI_FLAGS 0x0092
117/* 0x0093 used by Microsoft for LDAP_OPT_SSL_INFO */
118/* 0x0094 used by Microsoft for LDAP_OPT_REF_DEREF_CONN_PER_MSG */
119#define LDAP_OPT_SIGN 0x0095
120#define LDAP_OPT_ENCRYPT 0x0096
121#define LDAP_OPT_SASL_METHOD 0x0097
122/* 0x0098 used by Microsoft for LDAP_OPT_AREC_EXCLUSIVE */
123#define LDAP_OPT_SECURITY_CONTEXT 0x0099
124/* 0x009A used by Microsoft for LDAP_OPT_ROOTDSE_CACHE */
125/* 0x009B - 0x3fff not defined */
126
127/* API Extensions */
128#define LDAP_OPT_API_EXTENSION_BASE 0x4000 /* API extensions */
129
130/* private and experimental options */
131/* OpenLDAP specific options */
132#define LDAP_OPT_DEBUG_LEVEL 0x5001 /* debug level */
133#define LDAP_OPT_TIMEOUT 0x5002 /* default timeout */
134#define LDAP_OPT_REFHOPLIMIT 0x5003 /* ref hop limit */
135#define LDAP_OPT_NETWORK_TIMEOUT 0x5005 /* socket level timeout */
136#define LDAP_OPT_URI 0x5006
137#define LDAP_OPT_REFERRAL_URLS 0x5007 /* Referral URLs */
138#define LDAP_OPT_SOCKBUF 0x5008 /* sockbuf */
139#define LDAP_OPT_DEFBASE 0x5009 /* searchbase */
140#define LDAP_OPT_CONNECT_ASYNC 0x5010 /* create connections asynchronously */
141#define LDAP_OPT_CONNECT_CB 0x5011 /* connection callbacks */
142#define LDAP_OPT_SESSION_REFCNT 0x5012 /* session reference count */
143
144/* OpenLDAP TLS options */
145#define LDAP_OPT_X_TLS 0x6000
146#define LDAP_OPT_X_TLS_CTX 0x6001 /* OpenSSL CTX* */
147#define LDAP_OPT_X_TLS_CACERTFILE 0x6002
148#define LDAP_OPT_X_TLS_CACERTDIR 0x6003
149#define LDAP_OPT_X_TLS_CERTFILE 0x6004
150#define LDAP_OPT_X_TLS_KEYFILE 0x6005
151#define LDAP_OPT_X_TLS_REQUIRE_CERT 0x6006
152#define LDAP_OPT_X_TLS_PROTOCOL_MIN 0x6007
153#define LDAP_OPT_X_TLS_CIPHER_SUITE 0x6008
154#define LDAP_OPT_X_TLS_RANDOM_FILE 0x6009
155#define LDAP_OPT_X_TLS_SSL_CTX 0x600a /* OpenSSL SSL* */
156#define LDAP_OPT_X_TLS_CRLCHECK 0x600b
157#define LDAP_OPT_X_TLS_CONNECT_CB 0x600c
158#define LDAP_OPT_X_TLS_CONNECT_ARG 0x600d
159#define LDAP_OPT_X_TLS_DHFILE 0x600e
160#define LDAP_OPT_X_TLS_NEWCTX 0x600f
161#define LDAP_OPT_X_TLS_CRLFILE 0x6010 /* GNUtls only */
162#define LDAP_OPT_X_TLS_PACKAGE 0x6011
163
164#define LDAP_OPT_X_TLS_NEVER 0
165#define LDAP_OPT_X_TLS_HARD 1
166#define LDAP_OPT_X_TLS_DEMAND 2
167#define LDAP_OPT_X_TLS_ALLOW 3
168#define LDAP_OPT_X_TLS_TRY 4
169
170#define LDAP_OPT_X_TLS_CRL_NONE 0
171#define LDAP_OPT_X_TLS_CRL_PEER 1
172#define LDAP_OPT_X_TLS_CRL_ALL 2
173
174/* for LDAP_OPT_X_TLS_PROTOCOL_MIN */
175#define LDAP_OPT_X_TLS_PROTOCOL(maj,min) (((maj) << 8) + (min))
176#define LDAP_OPT_X_TLS_PROTOCOL_SSL2 (2 << 8)
177#define LDAP_OPT_X_TLS_PROTOCOL_SSL3 (3 << 8)
178#define LDAP_OPT_X_TLS_PROTOCOL_TLS1_0 ((3 << 8) + 1)
179#define LDAP_OPT_X_TLS_PROTOCOL_TLS1_1 ((3 << 8) + 2)
180#define LDAP_OPT_X_TLS_PROTOCOL_TLS1_2 ((3 << 8) + 3)
181
182/* OpenLDAP SASL options */
183#define LDAP_OPT_X_SASL_MECH 0x6100
184#define LDAP_OPT_X_SASL_REALM 0x6101
185#define LDAP_OPT_X_SASL_AUTHCID 0x6102
186#define LDAP_OPT_X_SASL_AUTHZID 0x6103
187#define LDAP_OPT_X_SASL_SSF 0x6104 /* read-only */
188#define LDAP_OPT_X_SASL_SSF_EXTERNAL 0x6105 /* write-only */
189#define LDAP_OPT_X_SASL_SECPROPS 0x6106 /* write-only */
190#define LDAP_OPT_X_SASL_SSF_MIN 0x6107
191#define LDAP_OPT_X_SASL_SSF_MAX 0x6108
192#define LDAP_OPT_X_SASL_MAXBUFSIZE 0x6109
193#define LDAP_OPT_X_SASL_MECHLIST 0x610a /* read-only */
194#define LDAP_OPT_X_SASL_NOCANON 0x610b
195#define LDAP_OPT_X_SASL_USERNAME 0x610c /* read-only */
196#define LDAP_OPT_X_SASL_GSS_CREDS 0x610d
197
198/* OpenLDAP GSSAPI options */
199#define LDAP_OPT_X_GSSAPI_DO_NOT_FREE_CONTEXT 0x6200
200#define LDAP_OPT_X_GSSAPI_ALLOW_REMOTE_PRINCIPAL 0x6201
201
202/*
203 * OpenLDAP per connection tcp-keepalive settings
204 * (Linux only, ignored where unsupported)
205 */
206#define LDAP_OPT_X_KEEPALIVE_IDLE 0x6300
207#define LDAP_OPT_X_KEEPALIVE_PROBES 0x6301
208#define LDAP_OPT_X_KEEPALIVE_INTERVAL 0x6302
209
210/* Private API Extensions -- reserved for application use */
211#define LDAP_OPT_PRIVATE_EXTENSION_BASE 0x7000 /* Private API inclusive */
212
213/*
214 * ldap_get_option() and ldap_set_option() return values.
215 * As later versions may return other values indicating
216 * failure, current applications should only compare returned
217 * value against LDAP_OPT_SUCCESS.
218 */
219#define LDAP_OPT_SUCCESS 0
220#define LDAP_OPT_ERROR (-1)
221
222/* option on/off values */
223#define LDAP_OPT_ON ((void *) &ber_pvt_opt_on)
224#define LDAP_OPT_OFF ((void *) 0)
225
226typedef struct ldapapiinfo {
227 int ldapai_info_version; /* version of LDAPAPIInfo */
228#define LDAP_API_INFO_VERSION (1)
229 int ldapai_api_version; /* revision of API supported */
230 int ldapai_protocol_version; /* highest LDAP version supported */
231 char **ldapai_extensions; /* names of API extensions */
232 char *ldapai_vendor_name; /* name of supplier */
233 int ldapai_vendor_version; /* supplier-specific version * 100 */
234} LDAPAPIInfo;
235
236typedef struct ldap_apifeature_info {
237 int ldapaif_info_version; /* version of LDAPAPIFeatureInfo */
238#define LDAP_FEATURE_INFO_VERSION (1) /* apifeature_info struct version */
239 char* ldapaif_name; /* LDAP_API_FEATURE_* (less prefix) */
240 int ldapaif_version; /* value of LDAP_API_FEATURE_... */
241} LDAPAPIFeatureInfo;
242
243/*
244 * LDAP Control structure
245 */
246typedef struct ldapcontrol {
247 char * ldctl_oid; /* numericoid of control */
248 struct berval ldctl_value; /* encoded value of control */
249 char ldctl_iscritical; /* criticality */
250} LDAPControl;
251
252/* LDAP Controls */
253/* standard track controls */
254#define LDAP_CONTROL_MANAGEDSAIT "2.16.840.1.113730.3.4.2" /* RFC 3296 */
255#define LDAP_CONTROL_PROXY_AUTHZ "2.16.840.1.113730.3.4.18" /* RFC 4370 */
256#define LDAP_CONTROL_SUBENTRIES "1.3.6.1.4.1.4203.1.10.1" /* RFC 3672 */
257
258#define LDAP_CONTROL_VALUESRETURNFILTER "1.2.826.0.1.3344810.2.3"/* RFC 3876 */
259
260#define LDAP_CONTROL_ASSERT "1.3.6.1.1.12" /* RFC 4528 */
261#define LDAP_CONTROL_PRE_READ "1.3.6.1.1.13.1" /* RFC 4527 */
262#define LDAP_CONTROL_POST_READ "1.3.6.1.1.13.2" /* RFC 4527 */
263
264#define LDAP_CONTROL_SORTREQUEST "1.2.840.113556.1.4.473" /* RFC 2891 */
265#define LDAP_CONTROL_SORTRESPONSE "1.2.840.113556.1.4.474" /* RFC 2891 */
266
267/* non-standard track controls */
268#define LDAP_CONTROL_PAGEDRESULTS "1.2.840.113556.1.4.319" /* RFC 2696 */
269
270/* LDAP Content Synchronization Operation -- RFC 4533 */
271#define LDAP_SYNC_OID "1.3.6.1.4.1.4203.1.9.1"
272#define LDAP_CONTROL_SYNC LDAP_SYNC_OID ".1"
273#define LDAP_CONTROL_SYNC_STATE LDAP_SYNC_OID ".2"
274#define LDAP_CONTROL_SYNC_DONE LDAP_SYNC_OID ".3"
275#define LDAP_SYNC_INFO LDAP_SYNC_OID ".4"
276
277#define LDAP_SYNC_NONE 0x00
278#define LDAP_SYNC_REFRESH_ONLY 0x01
279#define LDAP_SYNC_RESERVED 0x02
280#define LDAP_SYNC_REFRESH_AND_PERSIST 0x03
281
282#define LDAP_SYNC_REFRESH_PRESENTS 0
283#define LDAP_SYNC_REFRESH_DELETES 1
284
285#define LDAP_TAG_SYNC_NEW_COOKIE ((ber_tag_t) 0x80U)
286#define LDAP_TAG_SYNC_REFRESH_DELETE ((ber_tag_t) 0xa1U)
287#define LDAP_TAG_SYNC_REFRESH_PRESENT ((ber_tag_t) 0xa2U)
288#define LDAP_TAG_SYNC_ID_SET ((ber_tag_t) 0xa3U)
289
290#define LDAP_TAG_SYNC_COOKIE ((ber_tag_t) 0x04U)
291#define LDAP_TAG_REFRESHDELETES ((ber_tag_t) 0x01U)
292#define LDAP_TAG_REFRESHDONE ((ber_tag_t) 0x01U)
293#define LDAP_TAG_RELOAD_HINT ((ber_tag_t) 0x01U)
294
295#define LDAP_SYNC_PRESENT 0
296#define LDAP_SYNC_ADD 1
297#define LDAP_SYNC_MODIFY 2
298#define LDAP_SYNC_DELETE 3
299#define LDAP_SYNC_NEW_COOKIE 4
300
301/* LDAP Don't Use Copy Control (RFC 6171) */
302#define LDAP_CONTROL_DONTUSECOPY "1.3.6.1.1.22"
303
304/* Password policy Controls *//* work in progress */
305/* ITS#3458: released; disabled by default */
306#define LDAP_CONTROL_PASSWORDPOLICYREQUEST "1.3.6.1.4.1.42.2.27.8.5.1"
307#define LDAP_CONTROL_PASSWORDPOLICYRESPONSE "1.3.6.1.4.1.42.2.27.8.5.1"
308
309/* various works in progress */
310#define LDAP_CONTROL_NOOP "1.3.6.1.4.1.4203.666.5.2"
311#define LDAP_CONTROL_NO_SUBORDINATES "1.3.6.1.4.1.4203.666.5.11"
312#define LDAP_CONTROL_RELAX "1.3.6.1.4.1.4203.666.5.12"
313#define LDAP_CONTROL_MANAGEDIT LDAP_CONTROL_RELAX
314#define LDAP_CONTROL_SLURP "1.3.6.1.4.1.4203.666.5.13"
315#define LDAP_CONTROL_VALSORT "1.3.6.1.4.1.4203.666.5.14"
316#define LDAP_CONTROL_X_DEREF "1.3.6.1.4.1.4203.666.5.16"
317#define LDAP_CONTROL_X_WHATFAILED "1.3.6.1.4.1.4203.666.5.17"
318
319/* LDAP Chaining Behavior Control *//* work in progress */
320/* <draft-sermersheim-ldap-chaining>;
321 * see also LDAP_NO_REFERRALS_FOUND, LDAP_CANNOT_CHAIN */
322#define LDAP_CONTROL_X_CHAINING_BEHAVIOR "1.3.6.1.4.1.4203.666.11.3"
323
324#define LDAP_CHAINING_PREFERRED 0
325#define LDAP_CHAINING_REQUIRED 1
326#define LDAP_REFERRALS_PREFERRED 2
327#define LDAP_REFERRALS_REQUIRED 3
328
329/* MS Active Directory controls (for compatibility) */
330#define LDAP_CONTROL_X_INCREMENTAL_VALUES "1.2.840.113556.1.4.802"
331#define LDAP_CONTROL_X_DOMAIN_SCOPE "1.2.840.113556.1.4.1339"
332#define LDAP_CONTROL_X_PERMISSIVE_MODIFY "1.2.840.113556.1.4.1413"
333#define LDAP_CONTROL_X_SEARCH_OPTIONS "1.2.840.113556.1.4.1340"
334#define LDAP_SEARCH_FLAG_DOMAIN_SCOPE 1 /* do not generate referrals */
335#define LDAP_SEARCH_FLAG_PHANTOM_ROOT 2 /* search all subordinate NCs */
336#define LDAP_CONTROL_X_TREE_DELETE "1.2.840.113556.1.4.805"
337
338/* MS Active Directory controls - not implemented in slapd(8) */
339#define LDAP_CONTROL_X_EXTENDED_DN "1.2.840.113556.1.4.529"
340
341/* <draft-wahl-ldap-session> */
342#define LDAP_CONTROL_X_SESSION_TRACKING "1.3.6.1.4.1.21008.108.63.1"
343#define LDAP_CONTROL_X_SESSION_TRACKING_RADIUS_ACCT_SESSION_ID \
344 LDAP_CONTROL_X_SESSION_TRACKING ".1"
345#define LDAP_CONTROL_X_SESSION_TRACKING_RADIUS_ACCT_MULTI_SESSION_ID \
346 LDAP_CONTROL_X_SESSION_TRACKING ".2"
347#define LDAP_CONTROL_X_SESSION_TRACKING_USERNAME \
348 LDAP_CONTROL_X_SESSION_TRACKING ".3"
349/* various expired works */
350
351/* LDAP Duplicated Entry Control Extension *//* not implemented in slapd(8) */
352#define LDAP_CONTROL_DUPENT_REQUEST "2.16.840.1.113719.1.27.101.1"
353#define LDAP_CONTROL_DUPENT_RESPONSE "2.16.840.1.113719.1.27.101.2"
354#define LDAP_CONTROL_DUPENT_ENTRY "2.16.840.1.113719.1.27.101.3"
355#define LDAP_CONTROL_DUPENT LDAP_CONTROL_DUPENT_REQUEST
356
357/* LDAP Persistent Search Control *//* not implemented in slapd(8) */
358#define LDAP_CONTROL_PERSIST_REQUEST "2.16.840.1.113730.3.4.3"
359#define LDAP_CONTROL_PERSIST_ENTRY_CHANGE_NOTICE "2.16.840.1.113730.3.4.7"
360#define LDAP_CONTROL_PERSIST_ENTRY_CHANGE_ADD 0x1
361#define LDAP_CONTROL_PERSIST_ENTRY_CHANGE_DELETE 0x2
362#define LDAP_CONTROL_PERSIST_ENTRY_CHANGE_MODIFY 0x4
363#define LDAP_CONTROL_PERSIST_ENTRY_CHANGE_RENAME 0x8
364
365/* LDAP VLV */
366#define LDAP_CONTROL_VLVREQUEST "2.16.840.1.113730.3.4.9"
367#define LDAP_CONTROL_VLVRESPONSE "2.16.840.1.113730.3.4.10"
368
369/* LDAP Unsolicited Notifications */
370#define LDAP_NOTICE_OF_DISCONNECTION "1.3.6.1.4.1.1466.20036" /* RFC 4511 */
371#define LDAP_NOTICE_DISCONNECT LDAP_NOTICE_OF_DISCONNECTION
372
373/* LDAP Extended Operations */
374#define LDAP_EXOP_START_TLS "1.3.6.1.4.1.1466.20037" /* RFC 4511 */
375
376#define LDAP_EXOP_MODIFY_PASSWD "1.3.6.1.4.1.4203.1.11.1" /* RFC 3062 */
377#define LDAP_TAG_EXOP_MODIFY_PASSWD_ID ((ber_tag_t) 0x80U)
378#define LDAP_TAG_EXOP_MODIFY_PASSWD_OLD ((ber_tag_t) 0x81U)
379#define LDAP_TAG_EXOP_MODIFY_PASSWD_NEW ((ber_tag_t) 0x82U)
380#define LDAP_TAG_EXOP_MODIFY_PASSWD_GEN ((ber_tag_t) 0x80U)
381
382#define LDAP_EXOP_CANCEL "1.3.6.1.1.8" /* RFC 3909 */
383#define LDAP_EXOP_X_CANCEL LDAP_EXOP_CANCEL
384
385#define LDAP_EXOP_REFRESH "1.3.6.1.4.1.1466.101.119.1" /* RFC 2589 */
386#define LDAP_TAG_EXOP_REFRESH_REQ_DN ((ber_tag_t) 0x80U)
387#define LDAP_TAG_EXOP_REFRESH_REQ_TTL ((ber_tag_t) 0x81U)
388#define LDAP_TAG_EXOP_REFRESH_RES_TTL ((ber_tag_t) 0x81U)
389
390#define LDAP_EXOP_WHO_AM_I "1.3.6.1.4.1.4203.1.11.3" /* RFC 4532 */
391#define LDAP_EXOP_X_WHO_AM_I LDAP_EXOP_WHO_AM_I
392
393/* various works in progress */
394#define LDAP_EXOP_TURN "1.3.6.1.1.19" /* RFC 4531 */
395#define LDAP_EXOP_X_TURN LDAP_EXOP_TURN
396
397/* LDAP Distributed Procedures <draft-sermersheim-ldap-distproc> */
398/* a work in progress */
399#define LDAP_X_DISTPROC_BASE "1.3.6.1.4.1.4203.666.11.6"
400#define LDAP_EXOP_X_CHAINEDREQUEST LDAP_X_DISTPROC_BASE ".1"
401#define LDAP_FEATURE_X_CANCHAINOPS LDAP_X_DISTPROC_BASE ".2"
402#define LDAP_CONTROL_X_RETURNCONTREF LDAP_X_DISTPROC_BASE ".3"
403#define LDAP_URLEXT_X_LOCALREFOID LDAP_X_DISTPROC_BASE ".4"
404#define LDAP_URLEXT_X_REFTYPEOID LDAP_X_DISTPROC_BASE ".5"
405#define LDAP_URLEXT_X_SEARCHEDSUBTREEOID \
406 LDAP_X_DISTPROC_BASE ".6"
407#define LDAP_URLEXT_X_FAILEDNAMEOID LDAP_X_DISTPROC_BASE ".7"
408#define LDAP_URLEXT_X_LOCALREF "x-localReference"
409#define LDAP_URLEXT_X_REFTYPE "x-referenceType"
410#define LDAP_URLEXT_X_SEARCHEDSUBTREE "x-searchedSubtree"
411#define LDAP_URLEXT_X_FAILEDNAME "x-failedName"
412
413#ifdef LDAP_DEVEL
414#define LDAP_X_TXN "1.3.6.1.4.1.4203.666.11.7" /* tmp */
415#define LDAP_EXOP_X_TXN_START LDAP_X_TXN ".1"
416#define LDAP_CONTROL_X_TXN_SPEC LDAP_X_TXN ".2"
417#define LDAP_EXOP_X_TXN_END LDAP_X_TXN ".3"
418#define LDAP_EXOP_X_TXN_ABORTED_NOTICE LDAP_X_TXN ".4"
419#endif
420
421/* LDAP Features */
422#define LDAP_FEATURE_ALL_OP_ATTRS "1.3.6.1.4.1.4203.1.5.1" /* RFC 3673 */
423#define LDAP_FEATURE_OBJECTCLASS_ATTRS \
424 "1.3.6.1.4.1.4203.1.5.2" /* @objectClass - new number to be assigned */
425#define LDAP_FEATURE_ABSOLUTE_FILTERS "1.3.6.1.4.1.4203.1.5.3" /* (&) (|) */
426#define LDAP_FEATURE_LANGUAGE_TAG_OPTIONS "1.3.6.1.4.1.4203.1.5.4"
427#define LDAP_FEATURE_LANGUAGE_RANGE_OPTIONS "1.3.6.1.4.1.4203.1.5.5"
428#define LDAP_FEATURE_MODIFY_INCREMENT "1.3.6.1.1.14"
429
430/* LDAP Experimental (works in progress) Features */
431#define LDAP_FEATURE_SUBORDINATE_SCOPE \
432 "1.3.6.1.4.1.4203.666.8.1" /* "children" */
433#define LDAP_FEATURE_CHILDREN_SCOPE LDAP_FEATURE_SUBORDINATE_SCOPE
434
435/*
436 * specific LDAP instantiations of BER types we know about
437 */
438
439/* Overview of LBER tag construction
440 *
441 * Bits
442 * ______
443 * 8 7 | CLASS
444 * 0 0 = UNIVERSAL
445 * 0 1 = APPLICATION
446 * 1 0 = CONTEXT-SPECIFIC
447 * 1 1 = PRIVATE
448 * _____
449 * | 6 | DATA-TYPE
450 * 0 = PRIMITIVE
451 * 1 = CONSTRUCTED
452 * ___________
453 * | 5 ... 1 | TAG-NUMBER
454 */
455
456/* general stuff */
457#define LDAP_TAG_MESSAGE ((ber_tag_t) 0x30U) /* constructed + 16 */
458#define LDAP_TAG_MSGID ((ber_tag_t) 0x02U) /* integer */
459
460#define LDAP_TAG_LDAPDN ((ber_tag_t) 0x04U) /* octet string */
461#define LDAP_TAG_LDAPCRED ((ber_tag_t) 0x04U) /* octet string */
462
463#define LDAP_TAG_CONTROLS ((ber_tag_t) 0xa0U) /* context specific + constructed + 0 */
464#define LDAP_TAG_REFERRAL ((ber_tag_t) 0xa3U) /* context specific + constructed + 3 */
465
466#define LDAP_TAG_NEWSUPERIOR ((ber_tag_t) 0x80U) /* context-specific + primitive + 0 */
467
468#define LDAP_TAG_EXOP_REQ_OID ((ber_tag_t) 0x80U) /* context specific + primitive */
469#define LDAP_TAG_EXOP_REQ_VALUE ((ber_tag_t) 0x81U) /* context specific + primitive */
470#define LDAP_TAG_EXOP_RES_OID ((ber_tag_t) 0x8aU) /* context specific + primitive */
471#define LDAP_TAG_EXOP_RES_VALUE ((ber_tag_t) 0x8bU) /* context specific + primitive */
472
473#define LDAP_TAG_IM_RES_OID ((ber_tag_t) 0x80U) /* context specific + primitive */
474#define LDAP_TAG_IM_RES_VALUE ((ber_tag_t) 0x81U) /* context specific + primitive */
475
476#define LDAP_TAG_SASL_RES_CREDS ((ber_tag_t) 0x87U) /* context specific + primitive */
477
478/* LDAP Request Messages */
479#define LDAP_REQ_BIND ((ber_tag_t) 0x60U) /* application + constructed */
480#define LDAP_REQ_UNBIND ((ber_tag_t) 0x42U) /* application + primitive */
481#define LDAP_REQ_SEARCH ((ber_tag_t) 0x63U) /* application + constructed */
482#define LDAP_REQ_MODIFY ((ber_tag_t) 0x66U) /* application + constructed */
483#define LDAP_REQ_ADD ((ber_tag_t) 0x68U) /* application + constructed */
484#define LDAP_REQ_DELETE ((ber_tag_t) 0x4aU) /* application + primitive */
485#define LDAP_REQ_MODDN ((ber_tag_t) 0x6cU) /* application + constructed */
486#define LDAP_REQ_MODRDN LDAP_REQ_MODDN
487#define LDAP_REQ_RENAME LDAP_REQ_MODDN
488#define LDAP_REQ_COMPARE ((ber_tag_t) 0x6eU) /* application + constructed */
489#define LDAP_REQ_ABANDON ((ber_tag_t) 0x50U) /* application + primitive */
490#define LDAP_REQ_EXTENDED ((ber_tag_t) 0x77U) /* application + constructed */
491
492/* LDAP Response Messages */
493#define LDAP_RES_BIND ((ber_tag_t) 0x61U) /* application + constructed */
494#define LDAP_RES_SEARCH_ENTRY ((ber_tag_t) 0x64U) /* application + constructed */
495#define LDAP_RES_SEARCH_REFERENCE ((ber_tag_t) 0x73U) /* V3: application + constructed */
496#define LDAP_RES_SEARCH_RESULT ((ber_tag_t) 0x65U) /* application + constructed */
497#define LDAP_RES_MODIFY ((ber_tag_t) 0x67U) /* application + constructed */
498#define LDAP_RES_ADD ((ber_tag_t) 0x69U) /* application + constructed */
499#define LDAP_RES_DELETE ((ber_tag_t) 0x6bU) /* application + constructed */
500#define LDAP_RES_MODDN ((ber_tag_t) 0x6dU) /* application + constructed */
501#define LDAP_RES_MODRDN LDAP_RES_MODDN /* application + constructed */
502#define LDAP_RES_RENAME LDAP_RES_MODDN /* application + constructed */
503#define LDAP_RES_COMPARE ((ber_tag_t) 0x6fU) /* application + constructed */
504#define LDAP_RES_EXTENDED ((ber_tag_t) 0x78U) /* V3: application + constructed */
505#define LDAP_RES_INTERMEDIATE ((ber_tag_t) 0x79U) /* V3+: application + constructed */
506
507#define LDAP_RES_ANY (-1)
508#define LDAP_RES_UNSOLICITED (0)
509
510
511/* sasl methods */
512#define LDAP_SASL_SIMPLE ((char*)0)
513#define LDAP_SASL_NULL ("")
514
515
516/* authentication methods available */
517#define LDAP_AUTH_NONE ((ber_tag_t) 0x00U) /* no authentication */
518#define LDAP_AUTH_SIMPLE ((ber_tag_t) 0x80U) /* context specific + primitive */
519#define LDAP_AUTH_SASL ((ber_tag_t) 0xa3U) /* context specific + constructed */
520#define LDAP_AUTH_KRBV4 ((ber_tag_t) 0xffU) /* means do both of the following */
521#define LDAP_AUTH_KRBV41 ((ber_tag_t) 0x81U) /* context specific + primitive */
522#define LDAP_AUTH_KRBV42 ((ber_tag_t) 0x82U) /* context specific + primitive */
523
524/* used by the Windows API but not used on the wire */
525#define LDAP_AUTH_NEGOTIATE ((ber_tag_t) 0x04FFU)
526
527/* filter types */
528#define LDAP_FILTER_AND ((ber_tag_t) 0xa0U) /* context specific + constructed */
529#define LDAP_FILTER_OR ((ber_tag_t) 0xa1U) /* context specific + constructed */
530#define LDAP_FILTER_NOT ((ber_tag_t) 0xa2U) /* context specific + constructed */
531#define LDAP_FILTER_EQUALITY ((ber_tag_t) 0xa3U) /* context specific + constructed */
532#define LDAP_FILTER_SUBSTRINGS ((ber_tag_t) 0xa4U) /* context specific + constructed */
533#define LDAP_FILTER_GE ((ber_tag_t) 0xa5U) /* context specific + constructed */
534#define LDAP_FILTER_LE ((ber_tag_t) 0xa6U) /* context specific + constructed */
535#define LDAP_FILTER_PRESENT ((ber_tag_t) 0x87U) /* context specific + primitive */
536#define LDAP_FILTER_APPROX ((ber_tag_t) 0xa8U) /* context specific + constructed */
537#define LDAP_FILTER_EXT ((ber_tag_t) 0xa9U) /* context specific + constructed */
538
539/* extended filter component types */
540#define LDAP_FILTER_EXT_OID ((ber_tag_t) 0x81U) /* context specific */
541#define LDAP_FILTER_EXT_TYPE ((ber_tag_t) 0x82U) /* context specific */
542#define LDAP_FILTER_EXT_VALUE ((ber_tag_t) 0x83U) /* context specific */
543#define LDAP_FILTER_EXT_DNATTRS ((ber_tag_t) 0x84U) /* context specific */
544
545/* substring filter component types */
546#define LDAP_SUBSTRING_INITIAL ((ber_tag_t) 0x80U) /* context specific */
547#define LDAP_SUBSTRING_ANY ((ber_tag_t) 0x81U) /* context specific */
548#define LDAP_SUBSTRING_FINAL ((ber_tag_t) 0x82U) /* context specific */
549
550/* search scopes */
551#define LDAP_SCOPE_BASE ((ber_int_t) 0x0000)
552#define LDAP_SCOPE_BASEOBJECT LDAP_SCOPE_BASE
553#define LDAP_SCOPE_ONELEVEL ((ber_int_t) 0x0001)
554#define LDAP_SCOPE_ONE LDAP_SCOPE_ONELEVEL
555#define LDAP_SCOPE_SUBTREE ((ber_int_t) 0x0002)
556#define LDAP_SCOPE_SUB LDAP_SCOPE_SUBTREE
557#define LDAP_SCOPE_SUBORDINATE ((ber_int_t) 0x0003) /* OpenLDAP extension */
558#define LDAP_SCOPE_CHILDREN LDAP_SCOPE_SUBORDINATE
559#define LDAP_SCOPE_DEFAULT ((ber_int_t) -1) /* OpenLDAP extension */
560
561/* substring filter component types */
562#define LDAP_SUBSTRING_INITIAL ((ber_tag_t) 0x80U) /* context specific */
563#define LDAP_SUBSTRING_ANY ((ber_tag_t) 0x81U) /* context specific */
564#define LDAP_SUBSTRING_FINAL ((ber_tag_t) 0x82U) /* context specific */
565
566/*
567 * LDAP Result Codes
568 */
569#define LDAP_SUCCESS 0x00
570
571#define LDAP_RANGE(n,x,y) (((x) <= (n)) && ((n) <= (y)))
572
573#define LDAP_OPERATIONS_ERROR 0x01
574#define LDAP_PROTOCOL_ERROR 0x02
575#define LDAP_TIMELIMIT_EXCEEDED 0x03
576#define LDAP_SIZELIMIT_EXCEEDED 0x04
577#define LDAP_COMPARE_FALSE 0x05
578#define LDAP_COMPARE_TRUE 0x06
579#define LDAP_AUTH_METHOD_NOT_SUPPORTED 0x07
580#define LDAP_STRONG_AUTH_NOT_SUPPORTED LDAP_AUTH_METHOD_NOT_SUPPORTED
581#define LDAP_STRONG_AUTH_REQUIRED 0x08
582#define LDAP_STRONGER_AUTH_REQUIRED LDAP_STRONG_AUTH_REQUIRED
583#define LDAP_PARTIAL_RESULTS 0x09 /* LDAPv2+ (not LDAPv3) */
584
585#define LDAP_REFERRAL 0x0a /* LDAPv3 */
586#define LDAP_ADMINLIMIT_EXCEEDED 0x0b /* LDAPv3 */
587#define LDAP_UNAVAILABLE_CRITICAL_EXTENSION 0x0c /* LDAPv3 */
588#define LDAP_CONFIDENTIALITY_REQUIRED 0x0d /* LDAPv3 */
589#define LDAP_SASL_BIND_IN_PROGRESS 0x0e /* LDAPv3 */
590
591#define LDAP_ATTR_ERROR(n) LDAP_RANGE((n),0x10,0x15) /* 16-21 */
592
593#define LDAP_NO_SUCH_ATTRIBUTE 0x10
594#define LDAP_UNDEFINED_TYPE 0x11
595#define LDAP_INAPPROPRIATE_MATCHING 0x12
596#define LDAP_CONSTRAINT_VIOLATION 0x13
597#define LDAP_TYPE_OR_VALUE_EXISTS 0x14
598#define LDAP_INVALID_SYNTAX 0x15
599
600#define LDAP_NAME_ERROR(n) LDAP_RANGE((n),0x20,0x24) /* 32-34,36 */
601
602#define LDAP_NO_SUCH_OBJECT 0x20
603#define LDAP_ALIAS_PROBLEM 0x21
604#define LDAP_INVALID_DN_SYNTAX 0x22
605#define LDAP_IS_LEAF 0x23 /* not LDAPv3 */
606#define LDAP_ALIAS_DEREF_PROBLEM 0x24
607
608#define LDAP_SECURITY_ERROR(n) LDAP_RANGE((n),0x2F,0x32) /* 47-50 */
609
610#define LDAP_X_PROXY_AUTHZ_FAILURE 0x2F /* LDAPv3 proxy authorization */
611#define LDAP_INAPPROPRIATE_AUTH 0x30
612#define LDAP_INVALID_CREDENTIALS 0x31
613#define LDAP_INSUFFICIENT_ACCESS 0x32
614
615#define LDAP_SERVICE_ERROR(n) LDAP_RANGE((n),0x33,0x36) /* 51-54 */
616
617#define LDAP_BUSY 0x33
618#define LDAP_UNAVAILABLE 0x34
619#define LDAP_UNWILLING_TO_PERFORM 0x35
620#define LDAP_LOOP_DETECT 0x36
621
622#define LDAP_UPDATE_ERROR(n) LDAP_RANGE((n),0x40,0x47) /* 64-69,71 */
623
624#define LDAP_NAMING_VIOLATION 0x40
625#define LDAP_OBJECT_CLASS_VIOLATION 0x41
626#define LDAP_NOT_ALLOWED_ON_NONLEAF 0x42
627#define LDAP_NOT_ALLOWED_ON_RDN 0x43
628#define LDAP_ALREADY_EXISTS 0x44
629#define LDAP_NO_OBJECT_CLASS_MODS 0x45
630#define LDAP_RESULTS_TOO_LARGE 0x46 /* CLDAP */
631#define LDAP_AFFECTS_MULTIPLE_DSAS 0x47
632
633#define LDAP_VLV_ERROR 0x4C
634
635#define LDAP_OTHER 0x50
636
637/* LCUP operation codes (113-117) - not implemented */
638#define LDAP_CUP_RESOURCES_EXHAUSTED 0x71
639#define LDAP_CUP_SECURITY_VIOLATION 0x72
640#define LDAP_CUP_INVALID_DATA 0x73
641#define LDAP_CUP_UNSUPPORTED_SCHEME 0x74
642#define LDAP_CUP_RELOAD_REQUIRED 0x75
643
644/* Cancel operation codes (118-121) */
645#define LDAP_CANCELLED 0x76
646#define LDAP_NO_SUCH_OPERATION 0x77
647#define LDAP_TOO_LATE 0x78
648#define LDAP_CANNOT_CANCEL 0x79
649
650/* Assertion control (122) */
651#define LDAP_ASSERTION_FAILED 0x7A
652
653/* Proxied Authorization Denied (123) */
654#define LDAP_PROXIED_AUTHORIZATION_DENIED 0x7B
655
656/* Experimental result codes */
657#define LDAP_E_ERROR(n) LDAP_RANGE((n),0x1000,0x3FFF)
658
659/* LDAP Sync (4096) */
660#define LDAP_SYNC_REFRESH_REQUIRED 0x1000
661
662
663/* Private Use result codes */
664#define LDAP_X_ERROR(n) LDAP_RANGE((n),0x4000,0xFFFF)
665
666#define LDAP_X_SYNC_REFRESH_REQUIRED 0x4100 /* defunct */
667#define LDAP_X_ASSERTION_FAILED 0x410f /* defunct */
668
669/* for the LDAP No-Op control */
670#define LDAP_X_NO_OPERATION 0x410e
671
672/* for the Chaining Behavior control (consecutive result codes requested;
673 * see <draft-sermersheim-ldap-chaining> ) */
674#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
675#define LDAP_X_NO_REFERRALS_FOUND 0x4110
676#define LDAP_X_CANNOT_CHAIN 0x4111
677#endif
678
679/* for Distributed Procedures (see <draft-sermersheim-ldap-distproc>) */
680#ifdef LDAP_X_DISTPROC_BASE
681#define LDAP_X_INVALIDREFERENCE 0x4112
682#endif
683
684#ifdef LDAP_X_TXN
685#define LDAP_X_TXN_SPECIFY_OKAY 0x4120
686#define LDAP_X_TXN_ID_INVALID 0x4121
687#endif
688
689/* API Error Codes
690 *
691 * Based on draft-ietf-ldap-c-api-xx
692 * but with new negative code values
693 */
694#define LDAP_API_ERROR(n) ((n)<0)
695#define LDAP_API_RESULT(n) ((n)<=0)
696
697#define LDAP_SERVER_DOWN (-1)
698#define LDAP_LOCAL_ERROR (-2)
699#define LDAP_ENCODING_ERROR (-3)
700#define LDAP_DECODING_ERROR (-4)
701#define LDAP_TIMEOUT (-5)
702#define LDAP_AUTH_UNKNOWN (-6)
703#define LDAP_FILTER_ERROR (-7)
704#define LDAP_USER_CANCELLED (-8)
705#define LDAP_PARAM_ERROR (-9)
706#define LDAP_NO_MEMORY (-10)
707#define LDAP_CONNECT_ERROR (-11)
708#define LDAP_NOT_SUPPORTED (-12)
709#define LDAP_CONTROL_NOT_FOUND (-13)
710#define LDAP_NO_RESULTS_RETURNED (-14)
711#define LDAP_MORE_RESULTS_TO_RETURN (-15) /* Obsolete */
712#define LDAP_CLIENT_LOOP (-16)
713#define LDAP_REFERRAL_LIMIT_EXCEEDED (-17)
714#define LDAP_X_CONNECTING (-18)
715
716
717/*
718 * This structure represents both ldap messages and ldap responses.
719 * These are really the same, except in the case of search responses,
720 * where a response has multiple messages.
721 */
722
723typedef struct ldapmsg LDAPMessage;
724
725/* for modifications */
726typedef struct ldapmod {
727 int mod_op;
728
729#define LDAP_MOD_OP (0x0007)
730#define LDAP_MOD_ADD (0x0000)
731#define LDAP_MOD_DELETE (0x0001)
732#define LDAP_MOD_REPLACE (0x0002)
733#define LDAP_MOD_INCREMENT (0x0003) /* OpenLDAP extension */
734#define LDAP_MOD_BVALUES (0x0080)
735/* IMPORTANT: do not use code 0x1000 (or above),
736 * it is used internally by the backends!
737 * (see ldap/servers/slapd/slap.h)
738 */
739
740 char *mod_type;
741 union mod_vals_u {
742 char **modv_strvals;
743 struct berval **modv_bvals;
744 } mod_vals;
745#define mod_values mod_vals.modv_strvals
746#define mod_bvalues mod_vals.modv_bvals
747} LDAPMod;
748
749/*
750 * structure representing an ldap session which can
751 * encompass connections to multiple servers (in the
752 * face of referrals).
753 */
754typedef struct ldap LDAP;
755
756#define LDAP_DEREF_NEVER 0x00
757#define LDAP_DEREF_SEARCHING 0x01
758#define LDAP_DEREF_FINDING 0x02
759#define LDAP_DEREF_ALWAYS 0x03
760
761#define LDAP_NO_LIMIT 0
762
763/* how many messages to retrieve results for */
764#define LDAP_MSG_ONE 0x00
765#define LDAP_MSG_ALL 0x01
766#define LDAP_MSG_RECEIVED 0x02
767
768/*
769 * types for ldap URL handling
770 */
771typedef struct ldap_url_desc {
772 struct ldap_url_desc *lud_next;
773 char *lud_scheme;
774 char *lud_host;
775 int lud_port;
776 char *lud_dn;
777 char **lud_attrs;
778 int lud_scope;
779 char *lud_filter;
780 char **lud_exts;
781 int lud_crit_exts;
782} LDAPURLDesc;
783
784#define LDAP_URL_SUCCESS 0x00 /* Success */
785#define LDAP_URL_ERR_MEM 0x01 /* can't allocate memory space */
786#define LDAP_URL_ERR_PARAM 0x02 /* parameter is bad */
787
788#define LDAP_URL_ERR_BADSCHEME 0x03 /* URL doesn't begin with "ldap[si]://" */
789#define LDAP_URL_ERR_BADENCLOSURE 0x04 /* URL is missing trailing ">" */
790#define LDAP_URL_ERR_BADURL 0x05 /* URL is bad */
791#define LDAP_URL_ERR_BADHOST 0x06 /* host port is bad */
792#define LDAP_URL_ERR_BADATTRS 0x07 /* bad (or missing) attributes */
793#define LDAP_URL_ERR_BADSCOPE 0x08 /* scope string is invalid (or missing) */
794#define LDAP_URL_ERR_BADFILTER 0x09 /* bad or missing filter */
795#define LDAP_URL_ERR_BADEXTS 0x0a /* bad or missing extensions */
796
797/*
798 * LDAP sync (RFC4533) API
799 */
800
801typedef struct ldap_sync_t ldap_sync_t;
802
803typedef enum {
804 /* these are private - the client should never see them */
805 LDAP_SYNC_CAPI_NONE = -1,
806
807 LDAP_SYNC_CAPI_PHASE_FLAG = 0x10U,
808 LDAP_SYNC_CAPI_IDSET_FLAG = 0x20U,
809 LDAP_SYNC_CAPI_DONE_FLAG = 0x40U,
810
811 /* these are passed to ls_search_entry() */
812 LDAP_SYNC_CAPI_PRESENT = LDAP_SYNC_PRESENT,
813 LDAP_SYNC_CAPI_ADD = LDAP_SYNC_ADD,
814 LDAP_SYNC_CAPI_MODIFY = LDAP_SYNC_MODIFY,
815 LDAP_SYNC_CAPI_DELETE = LDAP_SYNC_DELETE,
816
817 /* these are passed to ls_intermediate() */
818 LDAP_SYNC_CAPI_PRESENTS = ( LDAP_SYNC_CAPI_PHASE_FLAG | LDAP_SYNC_CAPI_PRESENT ),
819 LDAP_SYNC_CAPI_DELETES = ( LDAP_SYNC_CAPI_PHASE_FLAG | LDAP_SYNC_CAPI_DELETE ),
820
821 LDAP_SYNC_CAPI_PRESENTS_IDSET = ( LDAP_SYNC_CAPI_PRESENTS | LDAP_SYNC_CAPI_IDSET_FLAG ),
822 LDAP_SYNC_CAPI_DELETES_IDSET = ( LDAP_SYNC_CAPI_DELETES | LDAP_SYNC_CAPI_IDSET_FLAG ),
823
824 LDAP_SYNC_CAPI_DONE = ( LDAP_SYNC_CAPI_DONE_FLAG | LDAP_SYNC_CAPI_PRESENTS )
825} ldap_sync_refresh_t;
826
827/*
828 * Called when an entry is returned by ldap_result().
829 * If phase is LDAP_SYNC_CAPI_ADD or LDAP_SYNC_CAPI_MODIFY,
830 * the entry has been either added or modified, and thus
831 * the complete view of the entry should be in the LDAPMessage.
832 * If phase is LDAP_SYNC_CAPI_PRESENT or LDAP_SYNC_CAPI_DELETE,
833 * only the DN should be in the LDAPMessage.
834 */
835typedef int (*ldap_sync_search_entry_f) LDAP_P((
836 ldap_sync_t *ls,
837 LDAPMessage *msg,
838 struct berval *entryUUID,
839 ldap_sync_refresh_t phase ));
840
841/*
842 * Called when a reference is returned; the client should know
843 * what to do with it.
844 */
845typedef int (*ldap_sync_search_reference_f) LDAP_P((
846 ldap_sync_t *ls,
847 LDAPMessage *msg ));
848
849/*
850 * Called when specific intermediate/final messages are returned.
851 * If phase is LDAP_SYNC_CAPI_PRESENTS or LDAP_SYNC_CAPI_DELETES,
852 * a "presents" or "deletes" phase begins.
853 * If phase is LDAP_SYNC_CAPI_DONE, a special "presents" phase
854 * with refreshDone set to "TRUE" has been returned, to indicate
855 * that the refresh phase of a refreshAndPersist is complete.
856 * In the above cases, syncUUIDs is NULL.
857 *
858 * If phase is LDAP_SYNC_CAPI_PRESENTS_IDSET or
859 * LDAP_SYNC_CAPI_DELETES_IDSET, syncUUIDs is an array of UUIDs
860 * that are either present or have been deleted.
861 */
862typedef int (*ldap_sync_intermediate_f) LDAP_P((
863 ldap_sync_t *ls,
864 LDAPMessage *msg,
865 BerVarray syncUUIDs,
866 ldap_sync_refresh_t phase ));
867
868/*
869 * Called when a searchResultDone is returned. In refreshAndPersist,
870 * this can only occur if the search for any reason is being terminated
871 * by the server.
872 */
873typedef int (*ldap_sync_search_result_f) LDAP_P((
874 ldap_sync_t *ls,
875 LDAPMessage *msg,
876 int refreshDeletes ));
877
878/*
879 * This structure contains all information about the persistent search;
880 * the caller is responsible for connecting, setting version, binding, tls...
881 */
882struct ldap_sync_t {
883 /* conf search params */
884 char *ls_base;
885 int ls_scope;
886 char *ls_filter;
887 char **ls_attrs;
888 int ls_timelimit;
889 int ls_sizelimit;
890
891 /* poll timeout */
892 int ls_timeout;
893
894 /* helpers - add as appropriate */
895 ldap_sync_search_entry_f ls_search_entry;
896 ldap_sync_search_reference_f ls_search_reference;
897 ldap_sync_intermediate_f ls_intermediate;
898 ldap_sync_search_result_f ls_search_result;
899
900 /* set by the caller as appropriate */
901 void *ls_private;
902
903 /* conn stuff */
904 LDAP *ls_ld;
905
906 /* --- the parameters below are private - do not modify --- */
907
908 /* FIXME: make the structure opaque, and provide an interface
909 * to modify the public values? */
910
911 /* result stuff */
912 int ls_msgid;
913
914 /* sync stuff */
915 /* needed by refreshOnly */
916 int ls_reloadHint;
917
918 /* opaque - need to pass between sessions, updated by the API */
919 struct berval ls_cookie;
920
921 /* state variable - do not modify */
922 ldap_sync_refresh_t ls_refreshPhase;
923};
924
925/*
926 * End of LDAP sync (RFC4533) API
927 */
928
929/*
930 * Connection callbacks...
931 */
932struct ldap_conncb;
933struct sockaddr;
934
935/* Called after a connection is established */
936typedef int (ldap_conn_add_f) LDAP_P(( LDAP *ld, Sockbuf *sb, LDAPURLDesc *srv, struct sockaddr *addr,
937 struct ldap_conncb *ctx ));
938/* Called before a connection is closed */
939typedef void (ldap_conn_del_f) LDAP_P(( LDAP *ld, Sockbuf *sb, struct ldap_conncb *ctx ));
940
941/* Callbacks are pushed on a stack. Last one pushed is first one executed. The
942 * delete callback is called with a NULL Sockbuf just before freeing the LDAP handle.
943 */
944typedef struct ldap_conncb {
945 ldap_conn_add_f *lc_add;
946 ldap_conn_del_f *lc_del;
947 void *lc_arg;
948} ldap_conncb;
949
950/*
951 * The API draft spec says we should declare (or cause to be declared)
952 * 'struct timeval'. We don't. See IETF LDAPext discussions.
953 */
954struct timeval;
955
956/*
957 * in options.c:
958 */
959LDAP_F( int )
960ldap_get_option LDAP_P((
961 LDAP *ld,
962 int option,
963 void *outvalue));
964
965LDAP_F( int )
966ldap_set_option LDAP_P((
967 LDAP *ld,
968 int option,
969 LDAP_CONST void *invalue));
970
971/* V3 REBIND Function Callback Prototype */
972typedef int (LDAP_REBIND_PROC) LDAP_P((
973 LDAP *ld, LDAP_CONST char *url,
974 ber_tag_t request, ber_int_t msgid,
975 void *params ));
976
977LDAP_F( int )
978ldap_set_rebind_proc LDAP_P((
979 LDAP *ld,
980 LDAP_REBIND_PROC *rebind_proc,
981 void *params ));
982
983/* V3 referral selection Function Callback Prototype */
984typedef int (LDAP_NEXTREF_PROC) LDAP_P((
985 LDAP *ld, char ***refsp, int *cntp,
986 void *params ));
987
988LDAP_F( int )
989ldap_set_nextref_proc LDAP_P((
990 LDAP *ld,
991 LDAP_NEXTREF_PROC *nextref_proc,
992 void *params ));
993
994/* V3 URLLIST Function Callback Prototype */
995typedef int (LDAP_URLLIST_PROC) LDAP_P((
996 LDAP *ld,
997 LDAPURLDesc **urllist,
998 LDAPURLDesc **url,
999 void *params ));
1000
1001LDAP_F( int )
1002ldap_set_urllist_proc LDAP_P((
1003 LDAP *ld,
1004 LDAP_URLLIST_PROC *urllist_proc,
1005 void *params ));
1006
1007/*
1008 * in controls.c:
1009 */
1010#if LDAP_DEPRECATED
1011LDAP_F( int )
1012ldap_create_control LDAP_P(( /* deprecated, use ldap_control_create */
1013 LDAP_CONST char *requestOID,
1014 BerElement *ber,
1015 int iscritical,
1016 LDAPControl **ctrlp ));
1017
1018LDAP_F( LDAPControl * )
1019ldap_find_control LDAP_P(( /* deprecated, use ldap_control_find */
1020 LDAP_CONST char *oid,
1021 LDAPControl **ctrls ));
1022#endif
1023
1024LDAP_F( int )
1025ldap_control_create LDAP_P((
1026 LDAP_CONST char *requestOID,
1027 int iscritical,
1028 struct berval *value,
1029 int dupval,
1030 LDAPControl **ctrlp ));
1031
1032LDAP_F( LDAPControl * )
1033ldap_control_find LDAP_P((
1034 LDAP_CONST char *oid,
1035 LDAPControl **ctrls,
1036 LDAPControl ***nextctrlp ));
1037
1038LDAP_F( void )
1039ldap_control_free LDAP_P((
1040 LDAPControl *ctrl ));
1041
1042LDAP_F( void )
1043ldap_controls_free LDAP_P((
1044 LDAPControl **ctrls ));
1045
1046LDAP_F( LDAPControl ** )
1047ldap_controls_dup LDAP_P((
1048 LDAPControl *LDAP_CONST *controls ));
1049
1050LDAP_F( LDAPControl * )
1051ldap_control_dup LDAP_P((
1052 LDAP_CONST LDAPControl *c ));
1053
1054/*
1055 * in dnssrv.c:
1056 */
1057LDAP_F( int )
1058ldap_domain2dn LDAP_P((
1059 LDAP_CONST char* domain,
1060 char** dn ));
1061
1062LDAP_F( int )
1063ldap_dn2domain LDAP_P((
1064 LDAP_CONST char* dn,
1065 char** domain ));
1066
1067LDAP_F( int )
1068ldap_domain2hostlist LDAP_P((
1069 LDAP_CONST char *domain,
1070 char** hostlist ));
1071
1072/*
1073 * in extended.c:
1074 */
1075LDAP_F( int )
1076ldap_extended_operation LDAP_P((
1077 LDAP *ld,
1078 LDAP_CONST char *reqoid,
1079 struct berval *reqdata,
1080 LDAPControl **serverctrls,
1081 LDAPControl **clientctrls,
1082 int *msgidp ));
1083
1084LDAP_F( int )
1085ldap_extended_operation_s LDAP_P((
1086 LDAP *ld,
1087 LDAP_CONST char *reqoid,
1088 struct berval *reqdata,
1089 LDAPControl **serverctrls,
1090 LDAPControl **clientctrls,
1091 char **retoidp,
1092 struct berval **retdatap ));
1093
1094LDAP_F( int )
1095ldap_parse_extended_result LDAP_P((
1096 LDAP *ld,
1097 LDAPMessage *res,
1098 char **retoidp,
1099 struct berval **retdatap,
1100 int freeit ));
1101
1102LDAP_F( int )
1103ldap_parse_intermediate LDAP_P((
1104 LDAP *ld,
1105 LDAPMessage *res,
1106 char **retoidp,
1107 struct berval **retdatap,
1108 LDAPControl ***serverctrls,
1109 int freeit ));
1110
1111
1112/*
1113 * in abandon.c:
1114 */
1115LDAP_F( int )
1116ldap_abandon_ext LDAP_P((
1117 LDAP *ld,
1118 int msgid,
1119 LDAPControl **serverctrls,
1120 LDAPControl **clientctrls ));
1121
1122#if LDAP_DEPRECATED
1123LDAP_F( int )
1124ldap_abandon LDAP_P(( /* deprecated, use ldap_abandon_ext */
1125 LDAP *ld,
1126 int msgid ));
1127#endif
1128
1129/*
1130 * in add.c:
1131 */
1132LDAP_F( int )
1133ldap_add_ext LDAP_P((
1134 LDAP *ld,
1135 LDAP_CONST char *dn,
1136 LDAPMod **attrs,
1137 LDAPControl **serverctrls,
1138 LDAPControl **clientctrls,
1139 int *msgidp ));
1140
1141LDAP_F( int )
1142ldap_add_ext_s LDAP_P((
1143 LDAP *ld,
1144 LDAP_CONST char *dn,
1145 LDAPMod **attrs,
1146 LDAPControl **serverctrls,
1147 LDAPControl **clientctrls ));
1148
1149#if LDAP_DEPRECATED
1150LDAP_F( int )
1151ldap_add LDAP_P(( /* deprecated, use ldap_add_ext */
1152 LDAP *ld,
1153 LDAP_CONST char *dn,
1154 LDAPMod **attrs ));
1155
1156LDAP_F( int )
1157ldap_add_s LDAP_P(( /* deprecated, use ldap_add_ext_s */
1158 LDAP *ld,
1159 LDAP_CONST char *dn,
1160 LDAPMod **attrs ));
1161#endif
1162
1163
1164/*
1165 * in sasl.c:
1166 */
1167LDAP_F( int )
1168ldap_sasl_bind LDAP_P((
1169 LDAP *ld,
1170 LDAP_CONST char *dn,
1171 LDAP_CONST char *mechanism,
1172 struct berval *cred,
1173 LDAPControl **serverctrls,
1174 LDAPControl **clientctrls,
1175 int *msgidp ));
1176
1177/* Interaction flags (should be passed about in a control)
1178 * Automatic (default): use defaults, prompt otherwise
1179 * Interactive: prompt always
1180 * Quiet: never prompt
1181 */
1182#define LDAP_SASL_AUTOMATIC 0U
1183#define LDAP_SASL_INTERACTIVE 1U
1184#define LDAP_SASL_QUIET 2U
1185
1186/*
1187 * V3 SASL Interaction Function Callback Prototype
1188 * when using Cyrus SASL, interact is pointer to sasl_interact_t
1189 * should likely passed in a control (and provided controls)
1190 */
1191typedef int (LDAP_SASL_INTERACT_PROC) LDAP_P((
1192 LDAP *ld, unsigned flags, void* defaults, void *interact ));
1193
1194LDAP_F( int )
1195ldap_sasl_interactive_bind LDAP_P((
1196 LDAP *ld,
1197 LDAP_CONST char *dn, /* usually NULL */
1198 LDAP_CONST char *saslMechanism,
1199 LDAPControl **serverControls,
1200 LDAPControl **clientControls,
1201
1202 /* should be client controls */
1203 unsigned flags,
1204 LDAP_SASL_INTERACT_PROC *proc,
1205 void *defaults,
1206
1207 /* as obtained from ldap_result() */
1208 LDAPMessage *result,
1209
1210 /* returned during bind processing */
1211 const char **rmech,
1212 int *msgid ));
1213
1214LDAP_F( int )
1215ldap_sasl_interactive_bind_s LDAP_P((
1216 LDAP *ld,
1217 LDAP_CONST char *dn, /* usually NULL */
1218 LDAP_CONST char *saslMechanism,
1219 LDAPControl **serverControls,
1220 LDAPControl **clientControls,
1221
1222 /* should be client controls */
1223 unsigned flags,
1224 LDAP_SASL_INTERACT_PROC *proc,
1225 void *defaults ));
1226
1227LDAP_F( int )
1228ldap_sasl_bind_s LDAP_P((
1229 LDAP *ld,
1230 LDAP_CONST char *dn,
1231 LDAP_CONST char *mechanism,
1232 struct berval *cred,
1233 LDAPControl **serverctrls,
1234 LDAPControl **clientctrls,
1235 struct berval **servercredp ));
1236
1237LDAP_F( int )
1238ldap_parse_sasl_bind_result LDAP_P((
1239 LDAP *ld,
1240 LDAPMessage *res,
1241 struct berval **servercredp,
1242 int freeit ));
1243
1244#if LDAP_DEPRECATED
1245/*
1246 * in bind.c:
1247 * (deprecated)
1248 */
1249LDAP_F( int )
1250ldap_bind LDAP_P(( /* deprecated, use ldap_sasl_bind */
1251 LDAP *ld,
1252 LDAP_CONST char *who,
1253 LDAP_CONST char *passwd,
1254 int authmethod ));
1255
1256LDAP_F( int )
1257ldap_bind_s LDAP_P(( /* deprecated, use ldap_sasl_bind_s */
1258 LDAP *ld,
1259 LDAP_CONST char *who,
1260 LDAP_CONST char *cred,
1261 int authmethod ));
1262
1263/*
1264 * in sbind.c:
1265 */
1266LDAP_F( int )
1267ldap_simple_bind LDAP_P(( /* deprecated, use ldap_sasl_bind */
1268 LDAP *ld,
1269 LDAP_CONST char *who,
1270 LDAP_CONST char *passwd ));
1271
1272LDAP_F( int )
1273ldap_simple_bind_s LDAP_P(( /* deprecated, use ldap_sasl_bind_s */
1274 LDAP *ld,
1275 LDAP_CONST char *who,
1276 LDAP_CONST char *passwd ));
1277
1278#endif
1279
1280
1281/*
1282 * in compare.c:
1283 */
1284LDAP_F( int )
1285ldap_compare_ext LDAP_P((
1286 LDAP *ld,
1287 LDAP_CONST char *dn,
1288 LDAP_CONST char *attr,
1289 struct berval *bvalue,
1290 LDAPControl **serverctrls,
1291 LDAPControl **clientctrls,
1292 int *msgidp ));
1293
1294LDAP_F( int )
1295ldap_compare_ext_s LDAP_P((
1296 LDAP *ld,
1297 LDAP_CONST char *dn,
1298 LDAP_CONST char *attr,
1299 struct berval *bvalue,
1300 LDAPControl **serverctrls,
1301 LDAPControl **clientctrls ));
1302
1303#if LDAP_DEPRECATED
1304LDAP_F( int )
1305ldap_compare LDAP_P(( /* deprecated, use ldap_compare_ext */
1306 LDAP *ld,
1307 LDAP_CONST char *dn,
1308 LDAP_CONST char *attr,
1309 LDAP_CONST char *value ));
1310
1311LDAP_F( int )
1312ldap_compare_s LDAP_P(( /* deprecated, use ldap_compare_ext_s */
1313 LDAP *ld,
1314 LDAP_CONST char *dn,
1315 LDAP_CONST char *attr,
1316 LDAP_CONST char *value ));
1317#endif
1318
1319
1320/*
1321 * in delete.c:
1322 */
1323LDAP_F( int )
1324ldap_delete_ext LDAP_P((
1325 LDAP *ld,
1326 LDAP_CONST char *dn,
1327 LDAPControl **serverctrls,
1328 LDAPControl **clientctrls,
1329 int *msgidp ));
1330
1331LDAP_F( int )
1332ldap_delete_ext_s LDAP_P((
1333 LDAP *ld,
1334 LDAP_CONST char *dn,
1335 LDAPControl **serverctrls,
1336 LDAPControl **clientctrls ));
1337
1338#if LDAP_DEPRECATED
1339LDAP_F( int )
1340ldap_delete LDAP_P(( /* deprecated, use ldap_delete_ext */
1341 LDAP *ld,
1342 LDAP_CONST char *dn ));
1343
1344LDAP_F( int )
1345ldap_delete_s LDAP_P(( /* deprecated, use ldap_delete_ext_s */
1346 LDAP *ld,
1347 LDAP_CONST char *dn ));
1348#endif
1349
1350
1351/*
1352 * in error.c:
1353 */
1354LDAP_F( int )
1355ldap_parse_result LDAP_P((
1356 LDAP *ld,
1357 LDAPMessage *res,
1358 int *errcodep,
1359 char **matcheddnp,
1360 char **errmsgp,
1361 char ***referralsp,
1362 LDAPControl ***serverctrls,
1363 int freeit ));
1364
1365LDAP_F( char * )
1366ldap_err2string LDAP_P((
1367 int err ));
1368
1369#if LDAP_DEPRECATED
1370LDAP_F( int )
1371ldap_result2error LDAP_P(( /* deprecated, use ldap_parse_result */
1372 LDAP *ld,
1373 LDAPMessage *r,
1374 int freeit ));
1375
1376LDAP_F( void )
1377ldap_perror LDAP_P(( /* deprecated, use ldap_err2string */
1378 LDAP *ld,
1379 LDAP_CONST char *s ));
1380#endif
1381
1382
1383/*
1384 * gssapi.c:
1385 */
1386LDAP_F( int )
1387ldap_gssapi_bind LDAP_P((
1388 LDAP *ld,
1389 LDAP_CONST char *dn,
1390 LDAP_CONST char *creds ));
1391
1392LDAP_F( int )
1393ldap_gssapi_bind_s LDAP_P((
1394 LDAP *ld,
1395 LDAP_CONST char *dn,
1396 LDAP_CONST char *creds ));
1397
1398
1399/*
1400 * in modify.c:
1401 */
1402LDAP_F( int )
1403ldap_modify_ext LDAP_P((
1404 LDAP *ld,
1405 LDAP_CONST char *dn,
1406 LDAPMod **mods,
1407 LDAPControl **serverctrls,
1408 LDAPControl **clientctrls,
1409 int *msgidp ));
1410
1411LDAP_F( int )
1412ldap_modify_ext_s LDAP_P((
1413 LDAP *ld,
1414 LDAP_CONST char *dn,
1415 LDAPMod **mods,
1416 LDAPControl **serverctrls,
1417 LDAPControl **clientctrls ));
1418
1419#if LDAP_DEPRECATED
1420LDAP_F( int )
1421ldap_modify LDAP_P(( /* deprecated, use ldap_modify_ext */
1422 LDAP *ld,
1423 LDAP_CONST char *dn,
1424 LDAPMod **mods ));
1425
1426LDAP_F( int )
1427ldap_modify_s LDAP_P(( /* deprecated, use ldap_modify_ext_s */
1428 LDAP *ld,
1429 LDAP_CONST char *dn,
1430 LDAPMod **mods ));
1431#endif
1432
1433
1434/*
1435 * in modrdn.c:
1436 */
1437LDAP_F( int )
1438ldap_rename LDAP_P((
1439 LDAP *ld,
1440 LDAP_CONST char *dn,
1441 LDAP_CONST char *newrdn,
1442 LDAP_CONST char *newSuperior,
1443 int deleteoldrdn,
1444 LDAPControl **sctrls,
1445 LDAPControl **cctrls,
1446 int *msgidp ));
1447
1448LDAP_F( int )
1449ldap_rename_s LDAP_P((
1450 LDAP *ld,
1451 LDAP_CONST char *dn,
1452 LDAP_CONST char *newrdn,
1453 LDAP_CONST char *newSuperior,
1454 int deleteoldrdn,
1455 LDAPControl **sctrls,
1456 LDAPControl **cctrls ));
1457
1458#if LDAP_DEPRECATED
1459LDAP_F( int )
1460ldap_rename2 LDAP_P(( /* deprecated, use ldap_rename */
1461 LDAP *ld,
1462 LDAP_CONST char *dn,
1463 LDAP_CONST char *newrdn,
1464 LDAP_CONST char *newSuperior,
1465 int deleteoldrdn ));
1466
1467LDAP_F( int )
1468ldap_rename2_s LDAP_P(( /* deprecated, use ldap_rename_s */
1469 LDAP *ld,
1470 LDAP_CONST char *dn,
1471 LDAP_CONST char *newrdn,
1472 LDAP_CONST char *newSuperior,
1473 int deleteoldrdn ));
1474
1475LDAP_F( int )
1476ldap_modrdn LDAP_P(( /* deprecated, use ldap_rename */
1477 LDAP *ld,
1478 LDAP_CONST char *dn,
1479 LDAP_CONST char *newrdn ));
1480
1481LDAP_F( int )
1482ldap_modrdn_s LDAP_P(( /* deprecated, use ldap_rename_s */
1483 LDAP *ld,
1484 LDAP_CONST char *dn,
1485 LDAP_CONST char *newrdn ));
1486
1487LDAP_F( int )
1488ldap_modrdn2 LDAP_P(( /* deprecated, use ldap_rename */
1489 LDAP *ld,
1490 LDAP_CONST char *dn,
1491 LDAP_CONST char *newrdn,
1492 int deleteoldrdn ));
1493
1494LDAP_F( int )
1495ldap_modrdn2_s LDAP_P(( /* deprecated, use ldap_rename_s */
1496 LDAP *ld,
1497 LDAP_CONST char *dn,
1498 LDAP_CONST char *newrdn,
1499 int deleteoldrdn));
1500#endif
1501
1502
1503/*
1504 * in open.c:
1505 */
1506#if LDAP_DEPRECATED
1507LDAP_F( LDAP * )
1508ldap_init LDAP_P(( /* deprecated, use ldap_create or ldap_initialize */
1509 LDAP_CONST char *host,
1510 int port ));
1511
1512LDAP_F( LDAP * )
1513ldap_open LDAP_P(( /* deprecated, use ldap_create or ldap_initialize */
1514 LDAP_CONST char *host,
1515 int port ));
1516#endif
1517
1518LDAP_F( int )
1519ldap_create LDAP_P((
1520 LDAP **ldp ));
1521
1522LDAP_F( int )
1523ldap_initialize LDAP_P((
1524 LDAP **ldp,
1525 LDAP_CONST char *url ));
1526
1527LDAP_F( LDAP * )
1528ldap_dup LDAP_P((
1529 LDAP *old ));
1530
1531/*
1532 * in tls.c
1533 */
1534
1535LDAP_F( int )
1536ldap_tls_inplace LDAP_P((
1537 LDAP *ld ));
1538
1539LDAP_F( int )
1540ldap_start_tls LDAP_P((
1541 LDAP *ld,
1542 LDAPControl **serverctrls,
1543 LDAPControl **clientctrls,
1544 int *msgidp ));
1545
1546LDAP_F( int )
1547ldap_install_tls LDAP_P((
1548 LDAP *ld ));
1549
1550LDAP_F( int )
1551ldap_start_tls_s LDAP_P((
1552 LDAP *ld,
1553 LDAPControl **serverctrls,
1554 LDAPControl **clientctrls ));
1555
1556/*
1557 * in messages.c:
1558 */
1559LDAP_F( LDAPMessage * )
1560ldap_first_message LDAP_P((
1561 LDAP *ld,
1562 LDAPMessage *chain ));
1563
1564LDAP_F( LDAPMessage * )
1565ldap_next_message LDAP_P((
1566 LDAP *ld,
1567 LDAPMessage *msg ));
1568
1569LDAP_F( int )
1570ldap_count_messages LDAP_P((
1571 LDAP *ld,
1572 LDAPMessage *chain ));
1573
1574/*
1575 * in references.c:
1576 */
1577LDAP_F( LDAPMessage * )
1578ldap_first_reference LDAP_P((
1579 LDAP *ld,
1580 LDAPMessage *chain ));
1581
1582LDAP_F( LDAPMessage * )
1583ldap_next_reference LDAP_P((
1584 LDAP *ld,
1585 LDAPMessage *ref ));
1586
1587LDAP_F( int )
1588ldap_count_references LDAP_P((
1589 LDAP *ld,
1590 LDAPMessage *chain ));
1591
1592LDAP_F( int )
1593ldap_parse_reference LDAP_P((
1594 LDAP *ld,
1595 LDAPMessage *ref,
1596 char ***referralsp,
1597 LDAPControl ***serverctrls,
1598 int freeit));
1599
1600
1601/*
1602 * in getentry.c:
1603 */
1604LDAP_F( LDAPMessage * )
1605ldap_first_entry LDAP_P((
1606 LDAP *ld,
1607 LDAPMessage *chain ));
1608
1609LDAP_F( LDAPMessage * )
1610ldap_next_entry LDAP_P((
1611 LDAP *ld,
1612 LDAPMessage *entry ));
1613
1614LDAP_F( int )
1615ldap_count_entries LDAP_P((
1616 LDAP *ld,
1617 LDAPMessage *chain ));
1618
1619LDAP_F( int )
1620ldap_get_entry_controls LDAP_P((
1621 LDAP *ld,
1622 LDAPMessage *entry,
1623 LDAPControl ***serverctrls));
1624
1625
1626/*
1627 * in addentry.c
1628 */
1629LDAP_F( LDAPMessage * )
1630ldap_delete_result_entry LDAP_P((
1631 LDAPMessage **list,
1632 LDAPMessage *e ));
1633
1634LDAP_F( void )
1635ldap_add_result_entry LDAP_P((
1636 LDAPMessage **list,
1637 LDAPMessage *e ));
1638
1639
1640/*
1641 * in getdn.c
1642 */
1643LDAP_F( char * )
1644ldap_get_dn LDAP_P((
1645 LDAP *ld,
1646 LDAPMessage *entry ));
1647
1648typedef struct ldap_ava {
1649 struct berval la_attr;
1650 struct berval la_value;
1651 unsigned la_flags;
1652#define LDAP_AVA_NULL 0x0000U
1653#define LDAP_AVA_STRING 0x0001U
1654#define LDAP_AVA_BINARY 0x0002U
1655#define LDAP_AVA_NONPRINTABLE 0x0004U
1656#define LDAP_AVA_FREE_ATTR 0x0010U
1657#define LDAP_AVA_FREE_VALUE 0x0020U
1658
1659 void *la_private;
1660} LDAPAVA;
1661
1662typedef LDAPAVA** LDAPRDN;
1663typedef LDAPRDN* LDAPDN;
1664
1665/* DN formats */
1666#define LDAP_DN_FORMAT_LDAP 0x0000U
1667#define LDAP_DN_FORMAT_LDAPV3 0x0010U
1668#define LDAP_DN_FORMAT_LDAPV2 0x0020U
1669#define LDAP_DN_FORMAT_DCE 0x0030U
1670#define LDAP_DN_FORMAT_UFN 0x0040U /* dn2str only */
1671#define LDAP_DN_FORMAT_AD_CANONICAL 0x0050U /* dn2str only */
1672#define LDAP_DN_FORMAT_LBER 0x00F0U /* for testing only */
1673#define LDAP_DN_FORMAT_MASK 0x00F0U
1674
1675/* DN flags */
1676#define LDAP_DN_PRETTY 0x0100U
1677#define LDAP_DN_SKIP 0x0200U
1678#define LDAP_DN_P_NOLEADTRAILSPACES 0x1000U
1679#define LDAP_DN_P_NOSPACEAFTERRDN 0x2000U
1680#define LDAP_DN_PEDANTIC 0xF000U
1681
1682LDAP_F( void ) ldap_rdnfree LDAP_P(( LDAPRDN rdn ));
1683LDAP_F( void ) ldap_dnfree LDAP_P(( LDAPDN dn ));
1684
1685LDAP_F( int )
1686ldap_bv2dn LDAP_P((
1687 struct berval *bv,
1688 LDAPDN *dn,
1689 unsigned flags ));
1690
1691LDAP_F( int )
1692ldap_str2dn LDAP_P((
1693 LDAP_CONST char *str,
1694 LDAPDN *dn,
1695 unsigned flags ));
1696
1697LDAP_F( int )
1698ldap_dn2bv LDAP_P((
1699 LDAPDN dn,
1700 struct berval *bv,
1701 unsigned flags ));
1702
1703LDAP_F( int )
1704ldap_dn2str LDAP_P((
1705 LDAPDN dn,
1706 char **str,
1707 unsigned flags ));
1708
1709LDAP_F( int )
1710ldap_bv2rdn LDAP_P((
1711 struct berval *bv,
1712 LDAPRDN *rdn,
1713 char **next,
1714 unsigned flags ));
1715
1716LDAP_F( int )
1717ldap_str2rdn LDAP_P((
1718 LDAP_CONST char *str,
1719 LDAPRDN *rdn,
1720 char **next,
1721 unsigned flags ));
1722
1723LDAP_F( int )
1724ldap_rdn2bv LDAP_P((
1725 LDAPRDN rdn,
1726 struct berval *bv,
1727 unsigned flags ));
1728
1729LDAP_F( int )
1730ldap_rdn2str LDAP_P((
1731 LDAPRDN rdn,
1732 char **str,
1733 unsigned flags ));
1734
1735LDAP_F( int )
1736ldap_dn_normalize LDAP_P((
1737 LDAP_CONST char *in, unsigned iflags,
1738 char **out, unsigned oflags ));
1739
1740LDAP_F( char * )
1741ldap_dn2ufn LDAP_P(( /* deprecated, use ldap_str2dn/dn2str */
1742 LDAP_CONST char *dn ));
1743
1744LDAP_F( char ** )
1745ldap_explode_dn LDAP_P(( /* deprecated, ldap_str2dn */
1746 LDAP_CONST char *dn,
1747 int notypes ));
1748
1749LDAP_F( char ** )
1750ldap_explode_rdn LDAP_P(( /* deprecated, ldap_str2rdn */
1751 LDAP_CONST char *rdn,
1752 int notypes ));
1753
1754typedef int LDAPDN_rewrite_func
1755 LDAP_P(( LDAPDN dn, unsigned flags, void *ctx ));
1756
1757LDAP_F( int )
1758ldap_X509dn2bv LDAP_P(( void *x509_name, struct berval *dn,
1759 LDAPDN_rewrite_func *func, unsigned flags ));
1760
1761LDAP_F( char * )
1762ldap_dn2dcedn LDAP_P(( /* deprecated, ldap_str2dn/dn2str */
1763 LDAP_CONST char *dn ));
1764
1765LDAP_F( char * )
1766ldap_dcedn2dn LDAP_P(( /* deprecated, ldap_str2dn/dn2str */
1767 LDAP_CONST char *dce ));
1768
1769LDAP_F( char * )
1770ldap_dn2ad_canonical LDAP_P(( /* deprecated, ldap_str2dn/dn2str */
1771 LDAP_CONST char *dn ));
1772
1773LDAP_F( int )
1774ldap_get_dn_ber LDAP_P((
1775 LDAP *ld, LDAPMessage *e, BerElement **berout, struct berval *dn ));
1776
1777LDAP_F( int )
1778ldap_get_attribute_ber LDAP_P((
1779 LDAP *ld, LDAPMessage *e, BerElement *ber, struct berval *attr,
1780 struct berval **vals ));
1781
1782/*
1783 * in getattr.c
1784 */
1785LDAP_F( char * )
1786ldap_first_attribute LDAP_P((
1787 LDAP *ld,
1788 LDAPMessage *entry,
1789 BerElement **ber ));
1790
1791LDAP_F( char * )
1792ldap_next_attribute LDAP_P((
1793 LDAP *ld,
1794 LDAPMessage *entry,
1795 BerElement *ber ));
1796
1797
1798/*
1799 * in getvalues.c
1800 */
1801LDAP_F( struct berval ** )
1802ldap_get_values_len LDAP_P((
1803 LDAP *ld,
1804 LDAPMessage *entry,
1805 LDAP_CONST char *target ));
1806
1807LDAP_F( int )
1808ldap_count_values_len LDAP_P((
1809 struct berval **vals ));
1810
1811LDAP_F( void )
1812ldap_value_free_len LDAP_P((
1813 struct berval **vals ));
1814
1815#if LDAP_DEPRECATED
1816LDAP_F( char ** )
1817ldap_get_values LDAP_P(( /* deprecated, use ldap_get_values_len */
1818 LDAP *ld,
1819 LDAPMessage *entry,
1820 LDAP_CONST char *target ));
1821
1822LDAP_F( int )
1823ldap_count_values LDAP_P(( /* deprecated, use ldap_count_values_len */
1824 char **vals ));
1825
1826LDAP_F( void )
1827ldap_value_free LDAP_P(( /* deprecated, use ldap_value_free_len */
1828 char **vals ));
1829#endif
1830
1831/*
1832 * in result.c:
1833 */
1834LDAP_F( int )
1835ldap_result LDAP_P((
1836 LDAP *ld,
1837 int msgid,
1838 int all,
1839 struct timeval *timeout,
1840 LDAPMessage **result ));
1841
1842LDAP_F( int )
1843ldap_msgtype LDAP_P((
1844 LDAPMessage *lm ));
1845
1846LDAP_F( int )
1847ldap_msgid LDAP_P((
1848 LDAPMessage *lm ));
1849
1850LDAP_F( int )
1851ldap_msgfree LDAP_P((
1852 LDAPMessage *lm ));
1853
1854LDAP_F( int )
1855ldap_msgdelete LDAP_P((
1856 LDAP *ld,
1857 int msgid ));
1858
1859
1860/*
1861 * in search.c:
1862 */
1863LDAP_F( int )
1864ldap_bv2escaped_filter_value LDAP_P((
1865 struct berval *in,
1866 struct berval *out ));
1867
1868LDAP_F( int )
1869ldap_search_ext LDAP_P((
1870 LDAP *ld,
1871 LDAP_CONST char *base,
1872 int scope,
1873 LDAP_CONST char *filter,
1874 char **attrs,
1875 int attrsonly,
1876 LDAPControl **serverctrls,
1877 LDAPControl **clientctrls,
1878 struct timeval *timeout,
1879 int sizelimit,
1880 int *msgidp ));
1881
1882LDAP_F( int )
1883ldap_search_ext_s LDAP_P((
1884 LDAP *ld,
1885 LDAP_CONST char *base,
1886 int scope,
1887 LDAP_CONST char *filter,
1888 char **attrs,
1889 int attrsonly,
1890 LDAPControl **serverctrls,
1891 LDAPControl **clientctrls,
1892 struct timeval *timeout,
1893 int sizelimit,
1894 LDAPMessage **res ));
1895
1896#if LDAP_DEPRECATED
1897LDAP_F( int )
1898ldap_search LDAP_P(( /* deprecated, use ldap_search_ext */
1899 LDAP *ld,
1900 LDAP_CONST char *base,
1901 int scope,
1902 LDAP_CONST char *filter,
1903 char **attrs,
1904 int attrsonly ));
1905
1906LDAP_F( int )
1907ldap_search_s LDAP_P(( /* deprecated, use ldap_search_ext_s */
1908 LDAP *ld,
1909 LDAP_CONST char *base,
1910 int scope,
1911 LDAP_CONST char *filter,
1912 char **attrs,
1913 int attrsonly,
1914 LDAPMessage **res ));
1915
1916LDAP_F( int )
1917ldap_search_st LDAP_P(( /* deprecated, use ldap_search_ext_s */
1918 LDAP *ld,
1919 LDAP_CONST char *base,
1920 int scope,
1921 LDAP_CONST char *filter,
1922 char **attrs,
1923 int attrsonly,
1924 struct timeval *timeout,
1925 LDAPMessage **res ));
1926#endif
1927
1928/*
1929 * in unbind.c
1930 */
1931LDAP_F( int )
1932ldap_unbind_ext LDAP_P((
1933 LDAP *ld,
1934 LDAPControl **serverctrls,
1935 LDAPControl **clientctrls));
1936
1937LDAP_F( int )
1938ldap_unbind_ext_s LDAP_P((
1939 LDAP *ld,
1940 LDAPControl **serverctrls,
1941 LDAPControl **clientctrls));
1942
1943LDAP_F( int )
1944ldap_destroy LDAP_P((
1945 LDAP *ld));
1946
1947#if LDAP_DEPRECATED
1948LDAP_F( int )
1949ldap_unbind LDAP_P(( /* deprecated, use ldap_unbind_ext */
1950 LDAP *ld ));
1951
1952LDAP_F( int )
1953ldap_unbind_s LDAP_P(( /* deprecated, use ldap_unbind_ext_s */
1954 LDAP *ld ));
1955#endif
1956
1957/*
1958 * in filter.c
1959 */
1960LDAP_F( int )
1961ldap_put_vrFilter LDAP_P((
1962 BerElement *ber,
1963 const char *vrf ));
1964
1965/*
1966 * in free.c
1967 */
1968
1969LDAP_F( void * )
1970ldap_memalloc LDAP_P((
1971 ber_len_t s ));
1972
1973LDAP_F( void * )
1974ldap_memrealloc LDAP_P((
1975 void* p,
1976 ber_len_t s ));
1977
1978LDAP_F( void * )
1979ldap_memcalloc LDAP_P((
1980 ber_len_t n,
1981 ber_len_t s ));
1982
1983LDAP_F( void )
1984ldap_memfree LDAP_P((
1985 void* p ));
1986
1987LDAP_F( void )
1988ldap_memvfree LDAP_P((
1989 void** v ));
1990
1991LDAP_F( char * )
1992ldap_strdup LDAP_P((
1993 LDAP_CONST char * ));
1994
1995LDAP_F( void )
1996ldap_mods_free LDAP_P((
1997 LDAPMod **mods,
1998 int freemods ));
1999
2000
2001#if LDAP_DEPRECATED
2002/*
2003 * in sort.c (deprecated, use custom code instead)
2004 */
2005typedef int (LDAP_SORT_AD_CMP_PROC) LDAP_P(( /* deprecated */
2006 LDAP_CONST char *left,
2007 LDAP_CONST char *right ));
2008
2009typedef int (LDAP_SORT_AV_CMP_PROC) LDAP_P(( /* deprecated */
2010 LDAP_CONST void *left,
2011 LDAP_CONST void *right ));
2012
2013LDAP_F( int ) /* deprecated */
2014ldap_sort_entries LDAP_P(( LDAP *ld,
2015 LDAPMessage **chain,
2016 LDAP_CONST char *attr,
2017 LDAP_SORT_AD_CMP_PROC *cmp ));
2018
2019LDAP_F( int ) /* deprecated */
2020ldap_sort_values LDAP_P((
2021 LDAP *ld,
2022 char **vals,
2023 LDAP_SORT_AV_CMP_PROC *cmp ));
2024
2025LDAP_F( int ) /* deprecated */
2026ldap_sort_strcasecmp LDAP_P((
2027 LDAP_CONST void *a,
2028 LDAP_CONST void *b ));
2029#endif
2030
2031/*
2032 * in url.c
2033 */
2034LDAP_F( int )
2035ldap_is_ldap_url LDAP_P((
2036 LDAP_CONST char *url ));
2037
2038LDAP_F( int )
2039ldap_is_ldaps_url LDAP_P((
2040 LDAP_CONST char *url ));
2041
2042LDAP_F( int )
2043ldap_is_ldapi_url LDAP_P((
2044 LDAP_CONST char *url ));
2045
2046LDAP_F( int )
2047ldap_url_parse LDAP_P((
2048 LDAP_CONST char *url,
2049 LDAPURLDesc **ludpp ));
2050
2051LDAP_F( char * )
2052ldap_url_desc2str LDAP_P((
2053 LDAPURLDesc *ludp ));
2054
2055LDAP_F( void )
2056ldap_free_urldesc LDAP_P((
2057 LDAPURLDesc *ludp ));
2058
2059
2060/*
2061 * LDAP Cancel Extended Operation <draft-zeilenga-ldap-cancel-xx.txt>
2062 * in cancel.c
2063 */
2064#define LDAP_API_FEATURE_CANCEL 1000
2065
2066LDAP_F( int )
2067ldap_cancel LDAP_P(( LDAP *ld,
2068 int cancelid,
2069 LDAPControl **sctrls,
2070 LDAPControl **cctrls,
2071 int *msgidp ));
2072
2073LDAP_F( int )
2074ldap_cancel_s LDAP_P(( LDAP *ld,
2075 int cancelid,
2076 LDAPControl **sctrl,
2077 LDAPControl **cctrl ));
2078
2079/*
2080 * LDAP Turn Extended Operation <draft-zeilenga-ldap-turn-xx.txt>
2081 * in turn.c
2082 */
2083#define LDAP_API_FEATURE_TURN 1000
2084
2085LDAP_F( int )
2086ldap_turn LDAP_P(( LDAP *ld,
2087 int mutual,
2088 LDAP_CONST char* identifier,
2089 LDAPControl **sctrls,
2090 LDAPControl **cctrls,
2091 int *msgidp ));
2092
2093LDAP_F( int )
2094ldap_turn_s LDAP_P(( LDAP *ld,
2095 int mutual,
2096 LDAP_CONST char* identifier,
2097 LDAPControl **sctrl,
2098 LDAPControl **cctrl ));
2099
2100/*
2101 * LDAP Paged Results
2102 * in pagectrl.c
2103 */
2104#define LDAP_API_FEATURE_PAGED_RESULTS 2000
2105
2106LDAP_F( int )
2107ldap_create_page_control_value LDAP_P((
2108 LDAP *ld,
2109 ber_int_t pagesize,
2110 struct berval *cookie,
2111 struct berval *value ));
2112
2113LDAP_F( int )
2114ldap_create_page_control LDAP_P((
2115 LDAP *ld,
2116 ber_int_t pagesize,
2117 struct berval *cookie,
2118 int iscritical,
2119 LDAPControl **ctrlp ));
2120
2121#if LDAP_DEPRECATED
2122LDAP_F( int )
2123ldap_parse_page_control LDAP_P((
2124 /* deprecated, use ldap_parse_pageresponse_control */
2125 LDAP *ld,
2126 LDAPControl **ctrls,
2127 ber_int_t *count,
2128 struct berval **cookie ));
2129#endif
2130
2131LDAP_F( int )
2132ldap_parse_pageresponse_control LDAP_P((
2133 LDAP *ld,
2134 LDAPControl *ctrl,
2135 ber_int_t *count,
2136 struct berval *cookie ));
2137
2138/*
2139 * LDAP Server Side Sort
2140 * in sortctrl.c
2141 */
2142#define LDAP_API_FEATURE_SERVER_SIDE_SORT 2000
2143
2144/* structure for a sort-key */
2145typedef struct ldapsortkey {
2146 char *attributeType;
2147 char *orderingRule;
2148 int reverseOrder;
2149} LDAPSortKey;
2150
2151LDAP_F( int )
2152ldap_create_sort_keylist LDAP_P((
2153 LDAPSortKey ***sortKeyList,
2154 char *keyString ));
2155
2156LDAP_F( void )
2157ldap_free_sort_keylist LDAP_P((
2158 LDAPSortKey **sortkeylist ));
2159
2160LDAP_F( int )
2161ldap_create_sort_control_value LDAP_P((
2162 LDAP *ld,
2163 LDAPSortKey **keyList,
2164 struct berval *value ));
2165
2166LDAP_F( int )
2167ldap_create_sort_control LDAP_P((
2168 LDAP *ld,
2169 LDAPSortKey **keyList,
2170 int iscritical,
2171 LDAPControl **ctrlp ));
2172
2173LDAP_F( int )
2174ldap_parse_sortresponse_control LDAP_P((
2175 LDAP *ld,
2176 LDAPControl *ctrl,
2177 ber_int_t *result,
2178 char **attribute ));
2179
2180/*
2181 * LDAP Virtual List View
2182 * in vlvctrl.c
2183 */
2184#define LDAP_API_FEATURE_VIRTUAL_LIST_VIEW 2000
2185
2186/* structure for virtual list */
2187typedef struct ldapvlvinfo {
2188 ber_int_t ldvlv_version;
2189 ber_int_t ldvlv_before_count;
2190 ber_int_t ldvlv_after_count;
2191 ber_int_t ldvlv_offset;
2192 ber_int_t ldvlv_count;
2193 struct berval * ldvlv_attrvalue;
2194 struct berval * ldvlv_context;
2195 void * ldvlv_extradata;
2196} LDAPVLVInfo;
2197
2198LDAP_F( int )
2199ldap_create_vlv_control_value LDAP_P((
2200 LDAP *ld,
2201 LDAPVLVInfo *ldvlistp,
2202 struct berval *value));
2203
2204LDAP_F( int )
2205ldap_create_vlv_control LDAP_P((
2206 LDAP *ld,
2207 LDAPVLVInfo *ldvlistp,
2208 LDAPControl **ctrlp ));
2209
2210LDAP_F( int )
2211ldap_parse_vlvresponse_control LDAP_P((
2212 LDAP *ld,
2213 LDAPControl *ctrls,
2214 ber_int_t *target_posp,
2215 ber_int_t *list_countp,
2216 struct berval **contextp,
2217 int *errcodep ));
2218
2219/*
2220 * LDAP Who Am I?
2221 * in whoami.c
2222 */
2223#define LDAP_API_FEATURE_WHOAMI 1000
2224
2225LDAP_F( int )
2226ldap_parse_whoami LDAP_P((
2227 LDAP *ld,
2228 LDAPMessage *res,
2229 struct berval **authzid ));
2230
2231LDAP_F( int )
2232ldap_whoami LDAP_P(( LDAP *ld,
2233 LDAPControl **sctrls,
2234 LDAPControl **cctrls,
2235 int *msgidp ));
2236
2237LDAP_F( int )
2238ldap_whoami_s LDAP_P((
2239 LDAP *ld,
2240 struct berval **authzid,
2241 LDAPControl **sctrls,
2242 LDAPControl **cctrls ));
2243
2244/*
2245 * LDAP Password Modify
2246 * in passwd.c
2247 */
2248#define LDAP_API_FEATURE_PASSWD_MODIFY 1000
2249
2250LDAP_F( int )
2251ldap_parse_passwd LDAP_P((
2252 LDAP *ld,
2253 LDAPMessage *res,
2254 struct berval *newpasswd ));
2255
2256LDAP_F( int )
2257ldap_passwd LDAP_P(( LDAP *ld,
2258 struct berval *user,
2259 struct berval *oldpw,
2260 struct berval *newpw,
2261 LDAPControl **sctrls,
2262 LDAPControl **cctrls,
2263 int *msgidp ));
2264
2265LDAP_F( int )
2266ldap_passwd_s LDAP_P((
2267 LDAP *ld,
2268 struct berval *user,
2269 struct berval *oldpw,
2270 struct berval *newpw,
2271 struct berval *newpasswd,
2272 LDAPControl **sctrls,
2273 LDAPControl **cctrls ));
2274
2275#ifdef LDAP_CONTROL_PASSWORDPOLICYREQUEST
2276/*
2277 * LDAP Password Policy controls
2278 * in ppolicy.c
2279 */
2280#define LDAP_API_FEATURE_PASSWORD_POLICY 1000
2281
2282typedef enum passpolicyerror_enum {
2283 PP_passwordExpired = 0,
2284 PP_accountLocked = 1,
2285 PP_changeAfterReset = 2,
2286 PP_passwordModNotAllowed = 3,
2287 PP_mustSupplyOldPassword = 4,
2288 PP_insufficientPasswordQuality = 5,
2289 PP_passwordTooShort = 6,
2290 PP_passwordTooYoung = 7,
2291 PP_passwordInHistory = 8,
2292 PP_noError = 65535
2293} LDAPPasswordPolicyError;
2294
2295LDAP_F( int )
2296ldap_create_passwordpolicy_control LDAP_P((
2297 LDAP *ld,
2298 LDAPControl **ctrlp ));
2299
2300LDAP_F( int )
2301ldap_parse_passwordpolicy_control LDAP_P((
2302 LDAP *ld,
2303 LDAPControl *ctrl,
2304 ber_int_t *expirep,
2305 ber_int_t *gracep,
2306 LDAPPasswordPolicyError *errorp ));
2307
2308LDAP_F( const char * )
2309ldap_passwordpolicy_err2txt LDAP_P(( LDAPPasswordPolicyError ));
2310#endif /* LDAP_CONTROL_PASSWORDPOLICYREQUEST */
2311
2312/*
2313 * LDAP Dynamic Directory Services Refresh -- RFC 2589
2314 * in dds.c
2315 */
2316#define LDAP_API_FEATURE_REFRESH 1000
2317
2318LDAP_F( int )
2319ldap_parse_refresh LDAP_P((
2320 LDAP *ld,
2321 LDAPMessage *res,
2322 ber_int_t *newttl ));
2323
2324LDAP_F( int )
2325ldap_refresh LDAP_P(( LDAP *ld,
2326 struct berval *dn,
2327 ber_int_t ttl,
2328 LDAPControl **sctrls,
2329 LDAPControl **cctrls,
2330 int *msgidp ));
2331
2332LDAP_F( int )
2333ldap_refresh_s LDAP_P((
2334 LDAP *ld,
2335 struct berval *dn,
2336 ber_int_t ttl,
2337 ber_int_t *newttl,
2338 LDAPControl **sctrls,
2339 LDAPControl **cctrls ));
2340
2341/*
2342 * LDAP Transactions
2343 */
2344#ifdef LDAP_X_TXN
2345LDAP_F( int )
2346ldap_txn_start LDAP_P(( LDAP *ld,
2347 LDAPControl **sctrls,
2348 LDAPControl **cctrls,
2349 int *msgidp ));
2350
2351LDAP_F( int )
2352ldap_txn_start_s LDAP_P(( LDAP *ld,
2353 LDAPControl **sctrl,
2354 LDAPControl **cctrl,
2355 struct berval **rettxnid ));
2356
2357LDAP_F( int )
2358ldap_txn_end LDAP_P(( LDAP *ld,
2359 int commit,
2360 struct berval *txnid,
2361 LDAPControl **sctrls,
2362 LDAPControl **cctrls,
2363 int *msgidp ));
2364
2365LDAP_F( int )
2366ldap_txn_end_s LDAP_P(( LDAP *ld,
2367 int commit,
2368 struct berval *txnid,
2369 LDAPControl **sctrl,
2370 LDAPControl **cctrl,
2371 int *retidp ));
2372#endif
2373
2374/*
2375 * in ldap_sync.c
2376 */
2377
2378/*
2379 * initialize the persistent search structure
2380 */
2381LDAP_F( ldap_sync_t * )
2382ldap_sync_initialize LDAP_P((
2383 ldap_sync_t *ls ));
2384
2385/*
2386 * destroy the persistent search structure
2387 */
2388LDAP_F( void )
2389ldap_sync_destroy LDAP_P((
2390 ldap_sync_t *ls,
2391 int freeit ));
2392
2393/*
2394 * initialize a refreshOnly sync
2395 */
2396LDAP_F( int )
2397ldap_sync_init LDAP_P((
2398 ldap_sync_t *ls,
2399 int mode ));
2400
2401/*
2402 * initialize a refreshOnly sync
2403 */
2404LDAP_F( int )
2405ldap_sync_init_refresh_only LDAP_P((
2406 ldap_sync_t *ls ));
2407
2408/*
2409 * initialize a refreshAndPersist sync
2410 */
2411LDAP_F( int )
2412ldap_sync_init_refresh_and_persist LDAP_P((
2413 ldap_sync_t *ls ));
2414
2415/*
2416 * poll for new responses
2417 */
2418LDAP_F( int )
2419ldap_sync_poll LDAP_P((
2420 ldap_sync_t *ls ));
2421
2422#ifdef LDAP_CONTROL_X_SESSION_TRACKING
2423
2424/*
2425 * in stctrl.c
2426 */
2427LDAP_F( int )
2428ldap_create_session_tracking_value LDAP_P((
2429 LDAP *ld,
2430 char *sessionSourceIp,
2431 char *sessionSourceName,
2432 char *formatOID,
2433 struct berval *sessionTrackingIdentifier,
2434 struct berval *value ));
2435
2436LDAP_F( int )
2437ldap_create_session_tracking_control LDAP_P((
2438 LDAP *ld,
2439 char *sessionSourceIp,
2440 char *sessionSourceName,
2441 char *formatOID,
2442 struct berval *sessionTrackingIdentifier,
2443 LDAPControl **ctrlp ));
2444
2445LDAP_F( int )
2446ldap_parse_session_tracking_control LDAP_P((
2447 LDAP *ld,
2448 LDAPControl *ctrl,
2449 struct berval *ip,
2450 struct berval *name,
2451 struct berval *oid,
2452 struct berval *id ));
2453
2454#endif /* LDAP_CONTROL_X_SESSION_TRACKING */
2455
2456/*
2457 * in assertion.c
2458 */
2459LDAP_F (int)
2460ldap_create_assertion_control_value LDAP_P((
2461 LDAP *ld,
2462 char *assertion,
2463 struct berval *value ));
2464
2465LDAP_F( int )
2466ldap_create_assertion_control LDAP_P((
2467 LDAP *ld,
2468 char *filter,
2469 int iscritical,
2470 LDAPControl **ctrlp ));
2471
2472/*
2473 * in deref.c
2474 */
2475
2476typedef struct LDAPDerefSpec {
2477 char *derefAttr;
2478 char **attributes;
2479} LDAPDerefSpec;
2480
2481typedef struct LDAPDerefVal {
2482 char *type;
2483 BerVarray vals;
2484 struct LDAPDerefVal *next;
2485} LDAPDerefVal;
2486
2487typedef struct LDAPDerefRes {
2488 char *derefAttr;
2489 struct berval derefVal;
2490 LDAPDerefVal *attrVals;
2491 struct LDAPDerefRes *next;
2492} LDAPDerefRes;
2493
2494LDAP_F( int )
2495ldap_create_deref_control_value LDAP_P((
2496 LDAP *ld,
2497 LDAPDerefSpec *ds,
2498 struct berval *value ));
2499
2500LDAP_F( int )
2501ldap_create_deref_control LDAP_P((
2502 LDAP *ld,
2503 LDAPDerefSpec *ds,
2504 int iscritical,
2505 LDAPControl **ctrlp ));
2506
2507LDAP_F( void )
2508ldap_derefresponse_free LDAP_P((
2509 LDAPDerefRes *dr ));
2510
2511LDAP_F( int )
2512ldap_parse_derefresponse_control LDAP_P((
2513 LDAP *ld,
2514 LDAPControl *ctrl,
2515 LDAPDerefRes **drp ));
2516
2517LDAP_F( int )
2518ldap_parse_deref_control LDAP_P((
2519 LDAP *ld,
2520 LDAPControl **ctrls,
2521 LDAPDerefRes **drp ));
2522
2523LDAP_END_DECL
2524#endif /* _LDAP_H */
2525