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