/** * Windows API header module * * Translated from MinGW Windows headers * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) * Source: $(DRUNTIMESRC core/sys/windows/_winldap.d) */ module core.sys.windows.winldap; version (Windows): @system: version (ANSI) {} else version = Unicode; /* Comment from MinGW winldap.h - Header file for the Windows LDAP API Written by Filip Navara References: The C LDAP Application Program Interface http://www.watersprings.org/pub/id/draft-ietf-ldapext-ldap-c-api-05.txt Lightweight Directory Access Protocol Reference http://msdn.microsoft.com/library/en-us/netdir/ldap/ldap_reference.asp This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ import core.sys.windows.schannel, core.sys.windows.winber; import core.sys.windows.wincrypt, core.sys.windows.windef; //align(4): enum { LDAP_VERSION1 = 1, LDAP_VERSION2 = 2, LDAP_VERSION3 = 3, LDAP_VERSION = LDAP_VERSION2, LDAP_VERSION_MIN = LDAP_VERSION2, LDAP_VERSION_MAX = LDAP_VERSION3 } /* MinGW defines ANSI and Unicode versions as LDAP_VENDOR_NAME and * LDAP_VENDOR_NAME_W respectively; similarly with other string constants * defined in this module. */ const TCHAR[] LDAP_VENDOR_NAME = "Microsoft Corporation."; enum LDAP_API_VERSION = 2004; enum LDAP_VENDOR_VERSION = 510; enum LDAP_API_INFO_VERSION = 1; enum LDAP_FEATURE_INFO_VERSION = 1; enum { LDAP_SUCCESS = 0x00, LDAP_OPT_SUCCESS = LDAP_SUCCESS, LDAP_OPERATIONS_ERROR, LDAP_PROTOCOL_ERROR, LDAP_TIMELIMIT_EXCEEDED, LDAP_SIZELIMIT_EXCEEDED, LDAP_COMPARE_FALSE, LDAP_COMPARE_TRUE, LDAP_STRONG_AUTH_NOT_SUPPORTED, LDAP_AUTH_METHOD_NOT_SUPPORTED = LDAP_STRONG_AUTH_NOT_SUPPORTED, LDAP_STRONG_AUTH_REQUIRED, LDAP_REFERRAL_V2, LDAP_PARTIAL_RESULTS = LDAP_REFERRAL_V2, LDAP_REFERRAL, LDAP_ADMIN_LIMIT_EXCEEDED, LDAP_UNAVAILABLE_CRIT_EXTENSION, LDAP_CONFIDENTIALITY_REQUIRED, LDAP_SASL_BIND_IN_PROGRESS, // = 0x0e LDAP_NO_SUCH_ATTRIBUTE = 0x10, LDAP_UNDEFINED_TYPE, LDAP_INAPPROPRIATE_MATCHING, LDAP_CONSTRAINT_VIOLATION, LDAP_TYPE_OR_VALUE_EXISTS, LDAP_ATTRIBUTE_OR_VALUE_EXISTS = LDAP_TYPE_OR_VALUE_EXISTS, LDAP_INVALID_SYNTAX, // = 0x15 LDAP_NO_SUCH_OBJECT = 0x20, LDAP_ALIAS_PROBLEM, LDAP_INVALID_DN_SYNTAX, LDAP_IS_LEAF, LDAP_ALIAS_DEREF_PROBLEM, // = 0x24 LDAP_INAPPROPRIATE_AUTH = 0x30, LDAP_INVALID_CREDENTIALS, LDAP_INSUFFICIENT_ACCESS, LDAP_INSUFFICIENT_RIGHTS = LDAP_INSUFFICIENT_ACCESS, LDAP_BUSY, LDAP_UNAVAILABLE, LDAP_UNWILLING_TO_PERFORM, LDAP_LOOP_DETECT, // = 0x36 LDAP_NAMING_VIOLATION = 0x40, LDAP_OBJECT_CLASS_VIOLATION, LDAP_NOT_ALLOWED_ON_NONLEAF, LDAP_NOT_ALLOWED_ON_RDN, LDAP_ALREADY_EXISTS, LDAP_NO_OBJECT_CLASS_MODS, LDAP_RESULTS_TOO_LARGE, LDAP_AFFECTS_MULTIPLE_DSAS, // = 0x47 LDAP_OTHER = 0x50, LDAP_SERVER_DOWN, LDAP_LOCAL_ERROR, LDAP_ENCODING_ERROR, LDAP_DECODING_ERROR, LDAP_TIMEOUT, LDAP_AUTH_UNKNOWN, LDAP_FILTER_ERROR, LDAP_USER_CANCELLED, LDAP_PARAM_ERROR, LDAP_NO_MEMORY, LDAP_CONNECT_ERROR, LDAP_NOT_SUPPORTED, LDAP_CONTROL_NOT_FOUND, LDAP_NO_RESULTS_RETURNED, LDAP_MORE_RESULTS_TO_RETURN, LDAP_CLIENT_LOOP, LDAP_REFERRAL_LIMIT_EXCEEDED // = 0x61 } enum { LDAP_PORT = 389, LDAP_SSL_PORT = 636, LDAP_GC_PORT = 3268, LDAP_SSL_GC_PORT = 3269 } enum void* LDAP_OPT_OFF = null, LDAP_OPT_ON = cast(void*) 1; enum { LDAP_OPT_API_INFO = 0x00, LDAP_OPT_DESC, LDAP_OPT_DEREF, LDAP_OPT_SIZELIMIT, LDAP_OPT_TIMELIMIT, LDAP_OPT_THREAD_FN_PTRS, LDAP_OPT_REBIND_FN, LDAP_OPT_REBIND_ARG, LDAP_OPT_REFERRALS, LDAP_OPT_RESTART, LDAP_OPT_SSL, LDAP_OPT_TLS = LDAP_OPT_SSL, LDAP_OPT_IO_FN_PTRS, // = 0x0b LDAP_OPT_CACHE_FN_PTRS = 0x0d, LDAP_OPT_CACHE_STRATEGY, LDAP_OPT_CACHE_ENABLE, LDAP_OPT_REFERRAL_HOP_LIMIT, LDAP_OPT_PROTOCOL_VERSION, LDAP_OPT_VERSION = LDAP_OPT_PROTOCOL_VERSION, LDAP_OPT_SERVER_CONTROLS, LDAP_OPT_CLIENT_CONTROLS, // = 0x13 LDAP_OPT_API_FEATURE_INFO = 0x15, LDAP_OPT_HOST_NAME = 0x30, LDAP_OPT_ERROR_NUMBER, LDAP_OPT_ERROR_STRING, LDAP_OPT_SERVER_ERROR, LDAP_OPT_SERVER_EXT_ERROR, // = 0x34 LDAP_OPT_PING_KEEP_ALIVE = 0x36, LDAP_OPT_PING_WAIT_TIME, LDAP_OPT_PING_LIMIT, // = 0x38 LDAP_OPT_DNSDOMAIN_NAME = 0x3b, LDAP_OPT_GETDSNAME_FLAGS = 0x3d, LDAP_OPT_HOST_REACHABLE, LDAP_OPT_PROMPT_CREDENTIALS, LDAP_OPT_TCP_KEEPALIVE, // = 0x40 LDAP_OPT_REFERRAL_CALLBACK = 0x70, LDAP_OPT_CLIENT_CERTIFICATE = 0x80, LDAP_OPT_SERVER_CERTIFICATE, // = 0x81 LDAP_OPT_AUTO_RECONNECT = 0x91, LDAP_OPT_SSPI_FLAGS, LDAP_OPT_SSL_INFO, LDAP_OPT_TLS_INFO = LDAP_OPT_SSL_INFO, LDAP_OPT_REF_DEREF_CONN_PER_MSG, LDAP_OPT_SIGN, LDAP_OPT_ENCRYPT, LDAP_OPT_SASL_METHOD, LDAP_OPT_AREC_EXCLUSIVE, LDAP_OPT_SECURITY_CONTEXT, LDAP_OPT_ROOTDSE_CACHE // = 0x9a } enum { LDAP_DEREF_NEVER, LDAP_DEREF_SEARCHING, LDAP_DEREF_FINDING, LDAP_DEREF_ALWAYS } enum LDAP_NO_LIMIT = 0; const TCHAR[] LDAP_CONTROL_REFERRALS = "1.2.840.113556.1.4.616"; // FIXME: check type (declared with U suffix in MinGW) enum : uint { LDAP_CHASE_SUBORDINATE_REFERRALS = 0x20, LDAP_CHASE_EXTERNAL_REFERRALS = 0x40 } enum { LDAP_SCOPE_DEFAULT = -1, LDAP_SCOPE_BASE, LDAP_SCOPE_ONELEVEL, LDAP_SCOPE_SUBTREE } enum { LDAP_MOD_ADD, LDAP_MOD_DELETE, LDAP_MOD_REPLACE, LDAP_MOD_BVALUES = 0x80 } enum : int { LDAP_RES_BIND = 0x61, LDAP_RES_SEARCH_ENTRY = 0x64, LDAP_RES_SEARCH_RESULT = 0x65, LDAP_RES_MODIFY = 0x67, LDAP_RES_ADD = 0x69, LDAP_RES_DELETE = 0x6b, LDAP_RES_MODRDN = 0x6d, LDAP_RES_COMPARE = 0x6f, LDAP_RES_SEARCH_REFERENCE = 0x73, LDAP_RES_EXTENDED = 0x78, LDAP_RES_ANY = -1 } enum { LDAP_MSG_ONE, LDAP_MSG_ALL, LDAP_MSG_RECEIVED } const TCHAR[] LDAP_SERVER_SORT_OID = "1.2.840.113556.1.4.473", LDAP_SERVER_RESP_SORT_OID = "1.2.840.113556.1.4.474", LDAP_PAGED_RESULT_OID_STRING = "1.2.840.113556.1.4.319", LDAP_CONTROL_VLVREQUEST = "2.16.840.1.113730.3.4.9", LDAP_CONTROL_VLVRESPONSE = "2.16.840.1.113730.3.4.10", LDAP_START_TLS_OID = "1.3.6.1.4.1.1466.20037", LDAP_TTL_EXTENDED_OP_OID = "1.3.6.1.4.1.1466.101.119.1"; enum { LDAP_AUTH_NONE = 0x00U, LDAP_AUTH_SIMPLE = 0x80U, LDAP_AUTH_SASL = 0x83U, LDAP_AUTH_OTHERKIND = 0x86U, LDAP_AUTH_EXTERNAL = LDAP_AUTH_OTHERKIND | 0x0020U, LDAP_AUTH_SICILY = LDAP_AUTH_OTHERKIND | 0x0200U, LDAP_AUTH_NEGOTIATE = LDAP_AUTH_OTHERKIND | 0x0400U, LDAP_AUTH_MSN = LDAP_AUTH_OTHERKIND | 0x0800U, LDAP_AUTH_NTLM = LDAP_AUTH_OTHERKIND | 0x1000U, LDAP_AUTH_DIGEST = LDAP_AUTH_OTHERKIND | 0x4000U, LDAP_AUTH_DPA = LDAP_AUTH_OTHERKIND | 0x2000U, LDAP_AUTH_SSPI = LDAP_AUTH_NEGOTIATE } enum { LDAP_FILTER_AND = 0xa0, LDAP_FILTER_OR, LDAP_FILTER_NOT, LDAP_FILTER_EQUALITY, LDAP_FILTER_SUBSTRINGS, LDAP_FILTER_GE, LDAP_FILTER_LE, // = 0xa6 LDAP_FILTER_APPROX = 0xa8, LDAP_FILTER_EXTENSIBLE, LDAP_FILTER_PRESENT = 0x87 } enum { LDAP_SUBSTRING_INITIAL = 0x80, LDAP_SUBSTRING_ANY, LDAP_SUBSTRING_FINAL } // should be opaque structure struct LDAP { struct _ld_sp { UINT_PTR sb_sd; UCHAR[(10*ULONG.sizeof)+1] Reserved1; ULONG_PTR sb_naddr; UCHAR[(6*ULONG.sizeof)] Reserved2; } _ld_sp ld_sp; PCHAR ld_host; ULONG ld_version; UCHAR ld_lberoptions; int ld_deref; int ld_timelimit; int ld_sizelimit; int ld_errno; PCHAR ld_matched; PCHAR ld_error; } alias LDAP* PLDAP; // should be opaque structure struct LDAPMessage { ULONG lm_msgid; ULONG lm_msgtype; BerElement* lm_ber; LDAPMessage* lm_chain; LDAPMessage* lm_next; ULONG lm_time; } alias LDAPMessage* PLDAPMessage; struct LDAP_TIMEVAL { LONG tv_sec; LONG tv_usec; } alias LDAP_TIMEVAL* PLDAP_TIMEVAL; struct LDAPAPIInfoA { int ldapai_info_version; int ldapai_api_version; int ldapai_protocol_version; char** ldapai_extensions; char* ldapai_vendor_name; int ldapai_vendor_version; } alias LDAPAPIInfoA* PLDAPAPIInfoA; struct LDAPAPIInfoW { int ldapai_info_version; int ldapai_api_version; int ldapai_protocol_version; PWCHAR* ldapai_extensions; PWCHAR ldapai_vendor_name; int ldapai_vendor_version; } alias LDAPAPIInfoW* PLDAPAPIInfoW; struct LDAPAPIFeatureInfoA { int ldapaif_info_version; char* ldapaif_name; int ldapaif_version; } alias LDAPAPIFeatureInfoA* PLDAPAPIFeatureInfoA; struct LDAPAPIFeatureInfoW { int ldapaif_info_version; PWCHAR ldapaif_name; int ldapaif_version; } alias LDAPAPIFeatureInfoW* PLDAPAPIFeatureInfoW; struct LDAPControlA { PCHAR ldctl_oid; BerValue ldctl_value; BOOLEAN ldctl_iscritical; } alias LDAPControlA* PLDAPControlA; struct LDAPControlW { PWCHAR ldctl_oid; BerValue ldctl_value; BOOLEAN ldctl_iscritical; } alias LDAPControlW* PLDAPControlW; /* Do we really need these? In MinGW, LDAPModA/W have only mod_op, mod_type * and mod_vals, and macros are used to simulate anonymous unions in those * structures. */ union mod_vals_u_tA { PCHAR* modv_strvals; BerValue** modv_bvals; } union mod_vals_u_tW { PWCHAR* modv_strvals; BerValue** modv_bvals; } struct LDAPModA { ULONG mod_op; PCHAR mod_type; union { mod_vals_u_tA mod_vals; // The following members are defined as macros in MinGW. PCHAR* mod_values; BerValue** mod_bvalues; } } alias LDAPModA* PLDAPModA; struct LDAPModW { ULONG mod_op; PWCHAR mod_type; union { mod_vals_u_tW mod_vals; // The following members are defined as macros in MinGW. PWCHAR* mod_values; BerValue** mod_bvalues; } } alias LDAPModW* PLDAPModW; /* Opaque structure * http://msdn.microsoft.com/library/en-us/ldap/ldap/ldapsearch.asp */ struct LDAPSearch; alias LDAPSearch* PLDAPSearch; struct LDAPSortKeyA { PCHAR sk_attrtype; PCHAR sk_matchruleoid; BOOLEAN sk_reverseorder; } alias LDAPSortKeyA* PLDAPSortKeyA; struct LDAPSortKeyW { PWCHAR sk_attrtype; PWCHAR sk_matchruleoid; BOOLEAN sk_reverseorder; } alias LDAPSortKeyW* PLDAPSortKeyW; /* MinGW defines these as immediate function typedefs, which don't translate * well into D. */ extern (C) { alias ULONG function(PLDAP, PLDAP, PWCHAR, PCHAR, ULONG, PVOID, PVOID, PLDAP*) QUERYFORCONNECTION; alias BOOLEAN function(PLDAP, PLDAP, PWCHAR, PCHAR, PLDAP, ULONG, PVOID, PVOID, ULONG) NOTIFYOFNEWCONNECTION; alias ULONG function(PLDAP, PLDAP) DEREFERENCECONNECTION; alias BOOLEAN function(PLDAP, PSecPkgContext_IssuerListInfoEx, PCCERT_CONTEXT*) QUERYCLIENTCERT; } struct LDAP_REFERRAL_CALLBACK { ULONG SizeOfCallbacks; QUERYFORCONNECTION* QueryForConnection; NOTIFYOFNEWCONNECTION* NotifyRoutine; DEREFERENCECONNECTION* DereferenceRoutine; } alias LDAP_REFERRAL_CALLBACK* PLDAP_REFERRAL_CALLBACK; struct LDAPVLVInfo { int ldvlv_version; uint ldvlv_before_count; uint ldvlv_after_count; uint ldvlv_offset; uint ldvlv_count; BerValue* ldvlv_attrvalue; BerValue* ldvlv_context; void* ldvlv_extradata; } /* * Under Microsoft WinLDAP the function ldap_error is only stub. * This macro uses LDAP structure to get error string and pass it to the user. */ private extern (C) int printf(const scope char* format, ...); int ldap_perror(LDAP* handle, char* message) { return printf("%s: %s\n", message, handle.ld_error); } /* FIXME: In MinGW, these are WINLDAPAPI == DECLSPEC_IMPORT. Linkage * attribute? */ extern (C) { PLDAP ldap_initA(PCHAR, ULONG); PLDAP ldap_initW(PWCHAR, ULONG); PLDAP ldap_openA(PCHAR, ULONG); PLDAP ldap_openW(PWCHAR, ULONG); PLDAP cldap_openA(PCHAR, ULONG); PLDAP cldap_openW(PWCHAR, ULONG); ULONG ldap_connect(LDAP*, LDAP_TIMEVAL*); PLDAP ldap_sslinitA(PCHAR, ULONG, int); PLDAP ldap_sslinitW(PWCHAR, ULONG, int); ULONG ldap_start_tls_sA(LDAP*, PLDAPControlA*, PLDAPControlA*); ULONG ldap_start_tls_sW(LDAP*, PLDAPControlW*, PLDAPControlW*); BOOLEAN ldap_stop_tls_s(LDAP*); ULONG ldap_get_optionA(LDAP*, int, void*); ULONG ldap_get_optionW(LDAP*, int, void*); ULONG ldap_set_optionA(LDAP*, int, void*); ULONG ldap_set_optionW(LDAP*, int, void*); ULONG ldap_control_freeA(LDAPControlA*); ULONG ldap_control_freeW(LDAPControlW*); ULONG ldap_controls_freeA(LDAPControlA**); ULONG ldap_controls_freeW(LDAPControlW**); ULONG ldap_free_controlsA(LDAPControlA**); ULONG ldap_free_controlsW(LDAPControlW**); ULONG ldap_sasl_bindA(LDAP*, PCSTR, PCSTR, BERVAL*, PLDAPControlA*, PLDAPControlA*, int*); ULONG ldap_sasl_bindW(LDAP*, PCWSTR, PCWSTR, BERVAL*, PLDAPControlW*, PLDAPControlW*, int*); ULONG ldap_sasl_bind_sA(LDAP*, PCSTR, PCSTR, BERVAL*, PLDAPControlA*, PLDAPControlA*, PBERVAL*); ULONG ldap_sasl_bind_sW(LDAP*, PCWSTR, PCWSTR, BERVAL*, PLDAPControlW*, PLDAPControlW*, PBERVAL*); ULONG ldap_simple_bindA(LDAP*, PSTR, PSTR); ULONG ldap_simple_bindW(LDAP*, PWSTR, PWSTR); ULONG ldap_simple_bind_sA(LDAP*, PSTR, PSTR); ULONG ldap_simple_bind_sW(LDAP*, PWSTR, PWSTR); ULONG ldap_unbind(LDAP*); ULONG ldap_unbind_s(LDAP*); ULONG ldap_search_extA(LDAP*, PCSTR, ULONG, PCSTR, PZPSTR, ULONG, PLDAPControlA*, PLDAPControlA*, ULONG, ULONG, ULONG*); ULONG ldap_search_extW(LDAP*, PCWSTR, ULONG, PCWSTR, PZPWSTR, ULONG, PLDAPControlW*, PLDAPControlW*, ULONG, ULONG, ULONG*); ULONG ldap_search_ext_sA(LDAP*, PCSTR, ULONG, PCSTR, PZPSTR, ULONG, PLDAPControlA*, PLDAPControlA*, LDAP_TIMEVAL*, ULONG, PLDAPMessage*); ULONG ldap_search_ext_sW(LDAP*, PCWSTR, ULONG, PCWSTR, PZPWSTR, ULONG, PLDAPControlW*, PLDAPControlW*, LDAP_TIMEVAL*, ULONG, PLDAPMessage*); ULONG ldap_searchA(LDAP*, PCSTR, ULONG, PCSTR, PZPSTR, ULONG); ULONG ldap_searchW(LDAP*, PCWSTR, ULONG, PCWSTR, PZPWSTR, ULONG); ULONG ldap_search_sA(LDAP*, PCSTR, ULONG, PCSTR, PZPSTR, ULONG, PLDAPMessage*); ULONG ldap_search_sW(LDAP*, PCWSTR, ULONG, PCWSTR, PZPWSTR, ULONG, PLDAPMessage*); ULONG ldap_search_stA(LDAP*, PCSTR, ULONG, PCSTR, PZPSTR, ULONG, LDAP_TIMEVAL*, PLDAPMessage*); ULONG ldap_search_stW(LDAP*, PCWSTR, ULONG, PCWSTR, PZPWSTR, ULONG, LDAP_TIMEVAL*, PLDAPMessage*); ULONG ldap_compare_extA(LDAP*, PCSTR, PCSTR, PCSTR, BerValue*, PLDAPControlA*, PLDAPControlA*, ULONG*); ULONG ldap_compare_extW(LDAP*, PCWSTR, PCWSTR, PCWSTR, BerValue*, PLDAPControlW*, PLDAPControlW*, ULONG*); ULONG ldap_compare_ext_sA(LDAP*, PCSTR, PCSTR, PCSTR, BerValue*, PLDAPControlA*, PLDAPControlA*); ULONG ldap_compare_ext_sW(LDAP*, PCWSTR, PCWSTR, PCWSTR, BerValue*, PLDAPControlW*, PLDAPControlW*); ULONG ldap_compareA(LDAP*, PCSTR, PCSTR, PCSTR); ULONG ldap_compareW(LDAP*, PCWSTR, PCWSTR, PCWSTR); ULONG ldap_compare_sA(LDAP*, PCSTR, PCSTR, PCSTR); ULONG ldap_compare_sW(LDAP*, PCWSTR, PCWSTR, PCWSTR); ULONG ldap_modify_extA(LDAP*, PCSTR, LDAPModA**, PLDAPControlA*, PLDAPControlA*, ULONG*); ULONG ldap_modify_extW(LDAP*, PCWSTR, LDAPModW**, PLDAPControlW*, PLDAPControlW*, ULONG*); ULONG ldap_modify_ext_sA(LDAP*, PCSTR, LDAPModA**, PLDAPControlA*, PLDAPControlA*); ULONG ldap_modify_ext_sW(LDAP*, PCWSTR, LDAPModW**, PLDAPControlW*, PLDAPControlW*); ULONG ldap_modifyA(LDAP*, PSTR, LDAPModA**); ULONG ldap_modifyW(LDAP*, PWSTR, LDAPModW**); ULONG ldap_modify_sA(LDAP*, PSTR, LDAPModA**); ULONG ldap_modify_sW(LDAP*, PWSTR, LDAPModW**); ULONG ldap_rename_extA(LDAP*, PCSTR, PCSTR, PCSTR, INT, PLDAPControlA*, PLDAPControlA*, ULONG*); ULONG ldap_rename_extW(LDAP*, PCWSTR, PCWSTR, PCWSTR, INT, PLDAPControlW*, PLDAPControlW*, ULONG*); ULONG ldap_rename_ext_sA(LDAP*, PCSTR, PCSTR, PCSTR, INT, PLDAPControlA*, PLDAPControlA*); ULONG ldap_rename_ext_sW(LDAP*, PCWSTR, PCWSTR, PCWSTR, INT, PLDAPControlW*, PLDAPControlW*); ULONG ldap_add_extA(LDAP*, PCSTR, LDAPModA**, PLDAPControlA*, PLDAPControlA*, ULONG*); ULONG ldap_add_extW(LDAP*, PCWSTR, LDAPModW**, PLDAPControlW*, PLDAPControlW*, ULONG*); ULONG ldap_add_ext_sA(LDAP*, PCSTR, LDAPModA**, PLDAPControlA*, PLDAPControlA*); ULONG ldap_add_ext_sW(LDAP*, PCWSTR, LDAPModW**, PLDAPControlW*, PLDAPControlW*); ULONG ldap_addA(LDAP*, PSTR, LDAPModA**); ULONG ldap_addW(LDAP*, PWSTR, LDAPModW**); ULONG ldap_add_sA(LDAP*, PSTR, LDAPModA**); ULONG ldap_add_sW(LDAP*, PWSTR, LDAPModW**); ULONG ldap_delete_extA(LDAP*, PCSTR, PLDAPControlA*, PLDAPControlA*, ULONG*); ULONG ldap_delete_extW(LDAP*, PCWSTR, PLDAPControlW*, PLDAPControlW*, ULONG*); ULONG ldap_delete_ext_sA(LDAP*, PCSTR, PLDAPControlA*, PLDAPControlA*); ULONG ldap_delete_ext_sW(LDAP*, PCWSTR, PLDAPControlW*, PLDAPControlW*); ULONG ldap_deleteA(LDAP*, PCSTR); ULONG ldap_deleteW(LDAP*, PCWSTR); ULONG ldap_delete_sA(LDAP*, PCSTR); ULONG ldap_delete_sW(LDAP*, PCWSTR); ULONG ldap_extended_operationA(LDAP*, PCSTR, BerValue*, PLDAPControlA*, PLDAPControlA*, ULONG*); ULONG ldap_extended_operationW(LDAP*, PCWSTR, BerValue*, PLDAPControlW*, PLDAPControlW*, ULONG*); ULONG ldap_extended_operation_sA(LDAP*, PSTR, BerValue*, PLDAPControlA*, PLDAPControlA*, PCHAR*, BerValue**); ULONG ldap_extended_operation_sW(LDAP*, PWSTR, BerValue*, PLDAPControlW*, PLDAPControlW*, PWCHAR*, BerValue**); ULONG ldap_close_extended_op(LDAP*, ULONG); ULONG ldap_abandon(LDAP*, ULONG); ULONG ldap_result(LDAP*, ULONG, ULONG, LDAP_TIMEVAL*, LDAPMessage**); ULONG ldap_msgfree(LDAPMessage*); ULONG ldap_parse_resultA(LDAP*, LDAPMessage*, ULONG*, PSTR*, PSTR*, PZPSTR*, PLDAPControlA**, BOOLEAN); ULONG ldap_parse_resultW(LDAP*, LDAPMessage*, ULONG*, PWSTR*, PWSTR*, PZPWSTR*, PLDAPControlW**, BOOLEAN); ULONG ldap_parse_extended_resultA(LDAP, LDAPMessage*, PSTR*, BerValue**, BOOLEAN); ULONG ldap_parse_extended_resultW(LDAP, LDAPMessage*, PWSTR*, BerValue**, BOOLEAN); PCHAR ldap_err2stringA(ULONG); PWCHAR ldap_err2stringW(ULONG); ULONG LdapGetLastError(); ULONG LdapMapErrorToWin32(ULONG); ULONG ldap_result2error(LDAP*, LDAPMessage*, ULONG); PLDAPMessage ldap_first_entry(LDAP*, LDAPMessage*); PLDAPMessage ldap_next_entry(LDAP*, LDAPMessage*); PLDAPMessage ldap_first_reference(LDAP*, LDAPMessage*); PLDAPMessage ldap_next_reference(LDAP*, LDAPMessage*); ULONG ldap_count_entries(LDAP*, LDAPMessage*); ULONG ldap_count_references(LDAP*, LDAPMessage*); PCHAR ldap_first_attributeA(LDAP*, LDAPMessage*, BerElement**); PWCHAR ldap_first_attributeW(LDAP*, LDAPMessage*, BerElement**); PCHAR ldap_next_attributeA(LDAP*, LDAPMessage*, BerElement*); PWCHAR ldap_next_attributeW(LDAP*, LDAPMessage*, BerElement*); VOID ldap_memfreeA(PCHAR); VOID ldap_memfreeW(PWCHAR); PCHAR* ldap_get_valuesA(LDAP*, LDAPMessage*, PCSTR); PWCHAR* ldap_get_valuesW(LDAP*, LDAPMessage*, PCWSTR); BerValue** ldap_get_values_lenA(LDAP*, LDAPMessage*, PCSTR); BerValue** ldap_get_values_lenW(LDAP*, LDAPMessage*, PCWSTR); ULONG ldap_count_valuesA(PCHAR*); ULONG ldap_count_valuesW(PWCHAR*); ULONG ldap_count_values_len(BerValue**); ULONG ldap_value_freeA(PCHAR*); ULONG ldap_value_freeW(PWCHAR*); ULONG ldap_value_free_len(BerValue**); PCHAR ldap_get_dnA(LDAP*, LDAPMessage*); PWCHAR ldap_get_dnW(LDAP*, LDAPMessage*); PCHAR ldap_explode_dnA(PCSTR, ULONG); PWCHAR ldap_explode_dnW(PCWSTR, ULONG); PCHAR ldap_dn2ufnA(PCSTR); PWCHAR ldap_dn2ufnW(PCWSTR); ULONG ldap_ufn2dnA(PCSTR, PSTR*); ULONG ldap_ufn2dnW(PCWSTR, PWSTR*); ULONG ldap_parse_referenceA(LDAP*, LDAPMessage*, PCHAR**); ULONG ldap_parse_referenceW(LDAP*, LDAPMessage*, PWCHAR**); ULONG ldap_check_filterA(LDAP*, PSTR); ULONG ldap_check_filterW(LDAP*, PWSTR); ULONG ldap_create_page_controlA(PLDAP, ULONG, BerValue*, UCHAR, PLDAPControlA*); ULONG ldap_create_page_controlW(PLDAP, ULONG, BerValue*, UCHAR, PLDAPControlW*); ULONG ldap_create_sort_controlA(PLDAP, PLDAPSortKeyA*, UCHAR, PLDAPControlA*); ULONG ldap_create_sort_controlW(PLDAP, PLDAPSortKeyW*, UCHAR, PLDAPControlW*); INT ldap_create_vlv_controlA(LDAP*, LDAPVLVInfo*, UCHAR, PLDAPControlA*); INT ldap_create_vlv_controlW(LDAP*, LDAPVLVInfo*, UCHAR, PLDAPControlW*); ULONG ldap_encode_sort_controlA(PLDAP, PLDAPSortKeyA*, PLDAPControlA, BOOLEAN); ULONG ldap_encode_sort_controlW(PLDAP, PLDAPSortKeyW*, PLDAPControlW, BOOLEAN); ULONG ldap_escape_filter_elementA(PCHAR, ULONG, PCHAR, ULONG); ULONG ldap_escape_filter_elementW(PWCHAR, ULONG, PWCHAR, ULONG); ULONG ldap_get_next_page(PLDAP, PLDAPSearch, ULONG, ULONG*); ULONG ldap_get_next_page_s(PLDAP, PLDAPSearch, LDAP_TIMEVAL*, ULONG, ULONG*, LDAPMessage**); ULONG ldap_get_paged_count(PLDAP, PLDAPSearch, ULONG*, PLDAPMessage); ULONG ldap_parse_page_controlA(PLDAP, PLDAPControlA*, ULONG*, BerValue**); ULONG ldap_parse_page_controlW(PLDAP, PLDAPControlW*, ULONG*, BerValue**); ULONG ldap_parse_sort_controlA(PLDAP, PLDAPControlA*, ULONG*, PCHAR*); ULONG ldap_parse_sort_controlW(PLDAP, PLDAPControlW*, ULONG*, PWCHAR*); INT ldap_parse_vlv_controlA(PLDAP, PLDAPControlA*, PULONG, PULONG, BerValue**, PINT); INT ldap_parse_vlv_controlW(PLDAP, PLDAPControlW*, PULONG, PULONG, BerValue**, PINT); PLDAPSearch ldap_search_init_pageA(PLDAP, PCSTR, ULONG, PCSTR, PZPSTR, ULONG, PLDAPControlA*, PLDAPControlA*, ULONG, ULONG, PLDAPSortKeyA*); PLDAPSearch ldap_search_init_pageW(PLDAP, PCWSTR, ULONG, PCWSTR, PZPWSTR, ULONG, PLDAPControlW*, PLDAPControlW*, ULONG, ULONG, PLDAPSortKeyW*); ULONG ldap_search_abandon_page(PLDAP, PLDAPSearch); LDAP ldap_conn_from_msg(LDAP*, LDAPMessage*); INT LdapUnicodeToUTF8(LPCWSTR, int, LPSTR, int); INT LdapUTF8ToUnicode(LPCSTR, int, LPWSTR, int); ULONG ldap_bindA(LDAP*, PSTR, PCHAR, ULONG); ULONG ldap_bindW(LDAP*, PWSTR, PWCHAR, ULONG); ULONG ldap_bind_sA(LDAP*, PSTR, PCHAR, ULONG); ULONG ldap_bind_sW(LDAP*, PWSTR, PWCHAR, ULONG); deprecated ("For LDAP 3 or later, use the ldap_rename_ext or ldap_rename_ext_s functions") { ULONG ldap_modrdnA(LDAP*, PCSTR, PCSTR); ULONG ldap_modrdnW(LDAP*, PCWSTR, PCWSTR); ULONG ldap_modrdn_sA(LDAP*, PCSTR, PCSTR); ULONG ldap_modrdn_sW(LDAP*, PCWSTR, PCWSTR); ULONG ldap_modrdn2A(LDAP*, PCSTR, PCSTR, INT); ULONG ldap_modrdn2W(LDAP*, PCWSTR, PCWSTR, INT); ULONG ldap_modrdn2_sA(LDAP*, PCSTR, PCSTR, INT); ULONG ldap_modrdn2_sW(LDAP*, PCWSTR, PCWSTR, INT); } } version (Unicode) { alias LDAPControlW LDAPControl; alias PLDAPControlW PLDAPControl; alias LDAPModW LDAPMod; alias LDAPModW PLDAPMod; alias LDAPSortKeyW LDAPSortKey; alias PLDAPSortKeyW PLDAPSortKey; alias LDAPAPIInfoW LDAPAPIInfo; alias PLDAPAPIInfoW PLDAPAPIInfo; alias LDAPAPIFeatureInfoW LDAPAPIFeatureInfo; alias PLDAPAPIFeatureInfoW PLDAPAPIFeatureInfo; alias cldap_openW cldap_open; alias ldap_openW ldap_open; alias ldap_simple_bindW ldap_simple_bind; alias ldap_simple_bind_sW ldap_simple_bind_s; alias ldap_sasl_bindW ldap_sasl_bind; alias ldap_sasl_bind_sW ldap_sasl_bind_s; alias ldap_initW ldap_init; alias ldap_sslinitW ldap_sslinit; alias ldap_get_optionW ldap_get_option; alias ldap_set_optionW ldap_set_option; alias ldap_start_tls_sW ldap_start_tls_s; alias ldap_addW ldap_add; alias ldap_add_extW ldap_add_ext; alias ldap_add_sW ldap_add_s; alias ldap_add_ext_sW ldap_add_ext_s; alias ldap_compareW ldap_compare; alias ldap_compare_extW ldap_compare_ext; alias ldap_compare_sW ldap_compare_s; alias ldap_compare_ext_sW ldap_compare_ext_s; alias ldap_deleteW ldap_delete; alias ldap_delete_extW ldap_delete_ext; alias ldap_delete_sW ldap_delete_s; alias ldap_delete_ext_sW ldap_delete_ext_s; alias ldap_extended_operation_sW ldap_extended_operation_s; alias ldap_extended_operationW ldap_extended_operation; alias ldap_modifyW ldap_modify; alias ldap_modify_extW ldap_modify_ext; alias ldap_modify_sW ldap_modify_s; alias ldap_modify_ext_sW ldap_modify_ext_s; alias ldap_check_filterW ldap_check_filter; alias ldap_count_valuesW ldap_count_values; alias ldap_create_page_controlW ldap_create_page_control; alias ldap_create_sort_controlW ldap_create_sort_control; alias ldap_create_vlv_controlW ldap_create_vlv_control; alias ldap_encode_sort_controlW ldap_encode_sort_control; alias ldap_escape_filter_elementW ldap_escape_filter_element; alias ldap_first_attributeW ldap_first_attribute; alias ldap_next_attributeW ldap_next_attribute; alias ldap_get_valuesW ldap_get_values; alias ldap_get_values_lenW ldap_get_values_len; alias ldap_parse_extended_resultW ldap_parse_extended_result; alias ldap_parse_page_controlW ldap_parse_page_control; alias ldap_parse_referenceW ldap_parse_reference; alias ldap_parse_resultW ldap_parse_result; alias ldap_parse_sort_controlW ldap_parse_sort_control; alias ldap_parse_vlv_controlW ldap_parse_vlv_control; alias ldap_searchW ldap_search; alias ldap_search_sW ldap_search_s; alias ldap_search_stW ldap_search_st; alias ldap_search_extW ldap_search_ext; alias ldap_search_ext_sW ldap_search_ext_s; alias ldap_search_init_pageW ldap_search_init_page; alias ldap_err2stringW ldap_err2string; alias ldap_control_freeW ldap_control_free; alias ldap_controls_freeW ldap_controls_free; alias ldap_free_controlsW ldap_free_controls; alias ldap_memfreeW ldap_memfree; alias ldap_value_freeW ldap_value_free; alias ldap_dn2ufnW ldap_dn2ufn; alias ldap_ufn2dnW ldap_ufn2dn; alias ldap_explode_dnW ldap_explode_dn; alias ldap_get_dnW ldap_get_dn; alias ldap_rename_extW ldap_rename; alias ldap_rename_ext_sW ldap_rename_s; alias ldap_rename_extW ldap_rename_ext; alias ldap_rename_ext_sW ldap_rename_ext_s; deprecated { alias ldap_bindW ldap_bind; alias ldap_bind_sW ldap_bind_s; alias ldap_modrdnW ldap_modrdn; alias ldap_modrdn_sW ldap_modrdn_s; alias ldap_modrdn2W ldap_modrdn2; alias ldap_modrdn2_sW ldap_modrdn2_s; } } else { alias LDAPControlA LDAPControl; alias PLDAPControlA PLDAPControl; alias LDAPModA LDAPMod; alias LDAPModA PLDAPMod; alias LDAPSortKeyA LDAPSortKey; alias PLDAPSortKeyA PLDAPSortKey; alias LDAPAPIInfoA LDAPAPIInfo; alias PLDAPAPIInfoA PLDAPAPIInfo; alias LDAPAPIFeatureInfoA LDAPAPIFeatureInfo; alias PLDAPAPIFeatureInfoA PLDAPAPIFeatureInfo; alias cldap_openA cldap_open; alias ldap_openA ldap_open; alias ldap_simple_bindA ldap_simple_bind; alias ldap_simple_bind_sA ldap_simple_bind_s; alias ldap_sasl_bindA ldap_sasl_bind; alias ldap_sasl_bind_sA ldap_sasl_bind_s; alias ldap_initA ldap_init; alias ldap_sslinitA ldap_sslinit; alias ldap_get_optionA ldap_get_option; alias ldap_set_optionA ldap_set_option; alias ldap_start_tls_sA ldap_start_tls_s; alias ldap_addA ldap_add; alias ldap_add_extA ldap_add_ext; alias ldap_add_sA ldap_add_s; alias ldap_add_ext_sA ldap_add_ext_s; alias ldap_compareA ldap_compare; alias ldap_compare_extA ldap_compare_ext; alias ldap_compare_sA ldap_compare_s; alias ldap_compare_ext_sA ldap_compare_ext_s; alias ldap_deleteA ldap_delete; alias ldap_delete_extA ldap_delete_ext; alias ldap_delete_sA ldap_delete_s; alias ldap_delete_ext_sA ldap_delete_ext_s; alias ldap_extended_operation_sA ldap_extended_operation_s; alias ldap_extended_operationA ldap_extended_operation; alias ldap_modifyA ldap_modify; alias ldap_modify_extA ldap_modify_ext; alias ldap_modify_sA ldap_modify_s; alias ldap_modify_ext_sA ldap_modify_ext_s; alias ldap_check_filterA ldap_check_filter; alias ldap_count_valuesA ldap_count_values; alias ldap_create_page_controlA ldap_create_page_control; alias ldap_create_sort_controlA ldap_create_sort_control; alias ldap_create_vlv_controlA ldap_create_vlv_control; alias ldap_encode_sort_controlA ldap_encode_sort_control; alias ldap_escape_filter_elementA ldap_escape_filter_element; alias ldap_first_attributeA ldap_first_attribute; alias ldap_next_attributeA ldap_next_attribute; alias ldap_get_valuesA ldap_get_values; alias ldap_get_values_lenA ldap_get_values_len; alias ldap_parse_extended_resultA ldap_parse_extended_result; alias ldap_parse_page_controlA ldap_parse_page_control; alias ldap_parse_referenceA ldap_parse_reference; alias ldap_parse_resultA ldap_parse_result; alias ldap_parse_sort_controlA ldap_parse_sort_control; alias ldap_parse_vlv_controlA ldap_parse_vlv_control; alias ldap_searchA ldap_search; alias ldap_search_sA ldap_search_s; alias ldap_search_stA ldap_search_st; alias ldap_search_extA ldap_search_ext; alias ldap_search_ext_sA ldap_search_ext_s; alias ldap_search_init_pageA ldap_search_init_page; alias ldap_err2stringA ldap_err2string; alias ldap_control_freeA ldap_control_free; alias ldap_controls_freeA ldap_controls_free; alias ldap_free_controlsA ldap_free_controls; alias ldap_memfreeA ldap_memfree; alias ldap_value_freeA ldap_value_free; alias ldap_dn2ufnA ldap_dn2ufn; alias ldap_ufn2dnA ldap_ufn2dn; alias ldap_explode_dnA ldap_explode_dn; alias ldap_get_dnA ldap_get_dn; alias ldap_rename_extA ldap_rename; alias ldap_rename_ext_sA ldap_rename_s; alias ldap_rename_extA ldap_rename_ext; alias ldap_rename_ext_sA ldap_rename_ext_s; deprecated { alias ldap_bindA ldap_bind; alias ldap_bind_sA ldap_bind_s; alias ldap_modrdnA ldap_modrdn; alias ldap_modrdn_sA ldap_modrdn_s; alias ldap_modrdn2A ldap_modrdn2; alias ldap_modrdn2_sA ldap_modrdn2_s; } }