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