1 /**
2 * Windows API header module
3 *
4 * Translated from MinGW Windows headers
5 *
6 * Authors: Stewart Gordon
7 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8 * Source: $(DRUNTIMESRC src/core/sys/windows/_winldap.d)
9 */
10 module core.sys.windows.winldap;
version(Windows)11 version (Windows):
12
13 version (ANSI) {} else version = Unicode;
14
15 /* Comment from MinGW
16 winldap.h - Header file for the Windows LDAP API
17
18 Written by Filip Navara <xnavara@volny.cz>
19
20 References:
21 The C LDAP Application Program Interface
22 http://www.watersprings.org/pub/id/draft-ietf-ldapext-ldap-c-api-05.txt
23
24 Lightweight Directory Access Protocol Reference
25 http://msdn.microsoft.com/library/en-us/netdir/ldap/ldap_reference.asp
26
27 This library is distributed in the hope that it will be useful,
28 but WITHOUT ANY WARRANTY; without even the implied warranty of
29 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
30 */
31
32 import core.sys.windows.schannel, core.sys.windows.winber;
33 private import core.sys.windows.wincrypt, core.sys.windows.windef;
34
35 //align(4):
36
37 enum {
38 LDAP_VERSION1 = 1,
39 LDAP_VERSION2 = 2,
40 LDAP_VERSION3 = 3,
41 LDAP_VERSION = LDAP_VERSION2,
42 LDAP_VERSION_MIN = LDAP_VERSION2,
43 LDAP_VERSION_MAX = LDAP_VERSION3
44 }
45
46 /* MinGW defines ANSI and Unicode versions as LDAP_VENDOR_NAME and
47 * LDAP_VENDOR_NAME_W respectively; similarly with other string constants
48 * defined in this module.
49 */
50 const TCHAR[] LDAP_VENDOR_NAME = "Microsoft Corporation.";
51
52 enum LDAP_API_VERSION = 2004;
53 enum LDAP_VENDOR_VERSION = 510;
54 enum LDAP_API_INFO_VERSION = 1;
55 enum LDAP_FEATURE_INFO_VERSION = 1;
56
57 enum {
58 LDAP_SUCCESS = 0x00,
59 LDAP_OPT_SUCCESS = LDAP_SUCCESS,
60 LDAP_OPERATIONS_ERROR,
61 LDAP_PROTOCOL_ERROR,
62 LDAP_TIMELIMIT_EXCEEDED,
63 LDAP_SIZELIMIT_EXCEEDED,
64 LDAP_COMPARE_FALSE,
65 LDAP_COMPARE_TRUE,
66 LDAP_STRONG_AUTH_NOT_SUPPORTED,
67 LDAP_AUTH_METHOD_NOT_SUPPORTED = LDAP_STRONG_AUTH_NOT_SUPPORTED,
68 LDAP_STRONG_AUTH_REQUIRED,
69 LDAP_REFERRAL_V2,
70 LDAP_PARTIAL_RESULTS = LDAP_REFERRAL_V2,
71 LDAP_REFERRAL,
72 LDAP_ADMIN_LIMIT_EXCEEDED,
73 LDAP_UNAVAILABLE_CRIT_EXTENSION,
74 LDAP_CONFIDENTIALITY_REQUIRED,
75 LDAP_SASL_BIND_IN_PROGRESS, // = 0x0e
76 LDAP_NO_SUCH_ATTRIBUTE = 0x10,
77 LDAP_UNDEFINED_TYPE,
78 LDAP_INAPPROPRIATE_MATCHING,
79 LDAP_CONSTRAINT_VIOLATION,
80 LDAP_TYPE_OR_VALUE_EXISTS,
81 LDAP_ATTRIBUTE_OR_VALUE_EXISTS = LDAP_TYPE_OR_VALUE_EXISTS,
82 LDAP_INVALID_SYNTAX, // = 0x15
83 LDAP_NO_SUCH_OBJECT = 0x20,
84 LDAP_ALIAS_PROBLEM,
85 LDAP_INVALID_DN_SYNTAX,
86 LDAP_IS_LEAF,
87 LDAP_ALIAS_DEREF_PROBLEM, // = 0x24
88 LDAP_INAPPROPRIATE_AUTH = 0x30,
89 LDAP_INVALID_CREDENTIALS,
90 LDAP_INSUFFICIENT_ACCESS,
91 LDAP_INSUFFICIENT_RIGHTS = LDAP_INSUFFICIENT_ACCESS,
92 LDAP_BUSY,
93 LDAP_UNAVAILABLE,
94 LDAP_UNWILLING_TO_PERFORM,
95 LDAP_LOOP_DETECT, // = 0x36
96 LDAP_NAMING_VIOLATION = 0x40,
97 LDAP_OBJECT_CLASS_VIOLATION,
98 LDAP_NOT_ALLOWED_ON_NONLEAF,
99 LDAP_NOT_ALLOWED_ON_RDN,
100 LDAP_ALREADY_EXISTS,
101 LDAP_NO_OBJECT_CLASS_MODS,
102 LDAP_RESULTS_TOO_LARGE,
103 LDAP_AFFECTS_MULTIPLE_DSAS, // = 0x47
104 LDAP_OTHER = 0x50,
105 LDAP_SERVER_DOWN,
106 LDAP_LOCAL_ERROR,
107 LDAP_ENCODING_ERROR,
108 LDAP_DECODING_ERROR,
109 LDAP_TIMEOUT,
110 LDAP_AUTH_UNKNOWN,
111 LDAP_FILTER_ERROR,
112 LDAP_USER_CANCELLED,
113 LDAP_PARAM_ERROR,
114 LDAP_NO_MEMORY,
115 LDAP_CONNECT_ERROR,
116 LDAP_NOT_SUPPORTED,
117 LDAP_CONTROL_NOT_FOUND,
118 LDAP_NO_RESULTS_RETURNED,
119 LDAP_MORE_RESULTS_TO_RETURN,
120 LDAP_CLIENT_LOOP,
121 LDAP_REFERRAL_LIMIT_EXCEEDED // = 0x61
122 }
123
124 enum {
125 LDAP_PORT = 389,
126 LDAP_SSL_PORT = 636,
127 LDAP_GC_PORT = 3268,
128 LDAP_SSL_GC_PORT = 3269
129 }
130
131 enum void*
132 LDAP_OPT_OFF = null,
133 LDAP_OPT_ON = cast(void*) 1;
134
135 enum {
136 LDAP_OPT_API_INFO = 0x00,
137 LDAP_OPT_DESC,
138 LDAP_OPT_DEREF,
139 LDAP_OPT_SIZELIMIT,
140 LDAP_OPT_TIMELIMIT,
141 LDAP_OPT_THREAD_FN_PTRS,
142 LDAP_OPT_REBIND_FN,
143 LDAP_OPT_REBIND_ARG,
144 LDAP_OPT_REFERRALS,
145 LDAP_OPT_RESTART,
146 LDAP_OPT_SSL,
147 LDAP_OPT_TLS = LDAP_OPT_SSL,
148 LDAP_OPT_IO_FN_PTRS, // = 0x0b
149 LDAP_OPT_CACHE_FN_PTRS = 0x0d,
150 LDAP_OPT_CACHE_STRATEGY,
151 LDAP_OPT_CACHE_ENABLE,
152 LDAP_OPT_REFERRAL_HOP_LIMIT,
153 LDAP_OPT_PROTOCOL_VERSION,
154 LDAP_OPT_VERSION = LDAP_OPT_PROTOCOL_VERSION,
155 LDAP_OPT_SERVER_CONTROLS,
156 LDAP_OPT_CLIENT_CONTROLS, // = 0x13
157 LDAP_OPT_API_FEATURE_INFO = 0x15,
158 LDAP_OPT_HOST_NAME = 0x30,
159 LDAP_OPT_ERROR_NUMBER,
160 LDAP_OPT_ERROR_STRING,
161 LDAP_OPT_SERVER_ERROR,
162 LDAP_OPT_SERVER_EXT_ERROR, // = 0x34
163 LDAP_OPT_PING_KEEP_ALIVE = 0x36,
164 LDAP_OPT_PING_WAIT_TIME,
165 LDAP_OPT_PING_LIMIT, // = 0x38
166 LDAP_OPT_DNSDOMAIN_NAME = 0x3b,
167 LDAP_OPT_GETDSNAME_FLAGS = 0x3d,
168 LDAP_OPT_HOST_REACHABLE,
169 LDAP_OPT_PROMPT_CREDENTIALS,
170 LDAP_OPT_TCP_KEEPALIVE, // = 0x40
171 LDAP_OPT_REFERRAL_CALLBACK = 0x70,
172 LDAP_OPT_CLIENT_CERTIFICATE = 0x80,
173 LDAP_OPT_SERVER_CERTIFICATE, // = 0x81
174 LDAP_OPT_AUTO_RECONNECT = 0x91,
175 LDAP_OPT_SSPI_FLAGS,
176 LDAP_OPT_SSL_INFO,
177 LDAP_OPT_TLS_INFO = LDAP_OPT_SSL_INFO,
178 LDAP_OPT_REF_DEREF_CONN_PER_MSG,
179 LDAP_OPT_SIGN,
180 LDAP_OPT_ENCRYPT,
181 LDAP_OPT_SASL_METHOD,
182 LDAP_OPT_AREC_EXCLUSIVE,
183 LDAP_OPT_SECURITY_CONTEXT,
184 LDAP_OPT_ROOTDSE_CACHE // = 0x9a
185 }
186
187 enum {
188 LDAP_DEREF_NEVER,
189 LDAP_DEREF_SEARCHING,
190 LDAP_DEREF_FINDING,
191 LDAP_DEREF_ALWAYS
192 }
193
194 enum LDAP_NO_LIMIT = 0;
195
196 const TCHAR[] LDAP_CONTROL_REFERRALS = "1.2.840.113556.1.4.616";
197
198 // FIXME: check type (declared with U suffix in MinGW)
199 enum : uint {
200 LDAP_CHASE_SUBORDINATE_REFERRALS = 0x20,
201 LDAP_CHASE_EXTERNAL_REFERRALS = 0x40
202 }
203
204 enum {
205 LDAP_SCOPE_DEFAULT = -1,
206 LDAP_SCOPE_BASE,
207 LDAP_SCOPE_ONELEVEL,
208 LDAP_SCOPE_SUBTREE
209 }
210
211 enum {
212 LDAP_MOD_ADD,
213 LDAP_MOD_DELETE,
214 LDAP_MOD_REPLACE,
215 LDAP_MOD_BVALUES = 0x80
216 }
217
218 enum : int {
219 LDAP_RES_BIND = 0x61,
220 LDAP_RES_SEARCH_ENTRY = 0x64,
221 LDAP_RES_SEARCH_RESULT = 0x65,
222 LDAP_RES_MODIFY = 0x67,
223 LDAP_RES_ADD = 0x69,
224 LDAP_RES_DELETE = 0x6b,
225 LDAP_RES_MODRDN = 0x6d,
226 LDAP_RES_COMPARE = 0x6f,
227 LDAP_RES_SEARCH_REFERENCE = 0x73,
228 LDAP_RES_EXTENDED = 0x78,
229 LDAP_RES_ANY = -1
230 }
231
232 enum {
233 LDAP_MSG_ONE,
234 LDAP_MSG_ALL,
235 LDAP_MSG_RECEIVED
236 }
237
238 const TCHAR[]
239 LDAP_SERVER_SORT_OID = "1.2.840.113556.1.4.473",
240 LDAP_SERVER_RESP_SORT_OID = "1.2.840.113556.1.4.474",
241 LDAP_PAGED_RESULT_OID_STRING = "1.2.840.113556.1.4.319",
242 LDAP_CONTROL_VLVREQUEST = "2.16.840.1.113730.3.4.9",
243 LDAP_CONTROL_VLVRESPONSE = "2.16.840.1.113730.3.4.10",
244 LDAP_START_TLS_OID = "1.3.6.1.4.1.1466.20037",
245 LDAP_TTL_EXTENDED_OP_OID = "1.3.6.1.4.1.1466.101.119.1";
246
247 enum {
248 LDAP_AUTH_NONE = 0x00U,
249 LDAP_AUTH_SIMPLE = 0x80U,
250 LDAP_AUTH_SASL = 0x83U,
251 LDAP_AUTH_OTHERKIND = 0x86U,
252 LDAP_AUTH_EXTERNAL = LDAP_AUTH_OTHERKIND | 0x0020U,
253 LDAP_AUTH_SICILY = LDAP_AUTH_OTHERKIND | 0x0200U,
254 LDAP_AUTH_NEGOTIATE = LDAP_AUTH_OTHERKIND | 0x0400U,
255 LDAP_AUTH_MSN = LDAP_AUTH_OTHERKIND | 0x0800U,
256 LDAP_AUTH_NTLM = LDAP_AUTH_OTHERKIND | 0x1000U,
257 LDAP_AUTH_DIGEST = LDAP_AUTH_OTHERKIND | 0x4000U,
258 LDAP_AUTH_DPA = LDAP_AUTH_OTHERKIND | 0x2000U,
259 LDAP_AUTH_SSPI = LDAP_AUTH_NEGOTIATE
260 }
261
262 enum {
263 LDAP_FILTER_AND = 0xa0,
264 LDAP_FILTER_OR,
265 LDAP_FILTER_NOT,
266 LDAP_FILTER_EQUALITY,
267 LDAP_FILTER_SUBSTRINGS,
268 LDAP_FILTER_GE,
269 LDAP_FILTER_LE, // = 0xa6
270 LDAP_FILTER_APPROX = 0xa8,
271 LDAP_FILTER_EXTENSIBLE,
272 LDAP_FILTER_PRESENT = 0x87
273 }
274
275 enum {
276 LDAP_SUBSTRING_INITIAL = 0x80,
277 LDAP_SUBSTRING_ANY,
278 LDAP_SUBSTRING_FINAL
279 }
280
281 // should be opaque structure
282 struct LDAP {
283 struct _ld_sp {
284 UINT_PTR sb_sd;
285 UCHAR[(10*ULONG.sizeof)+1] Reserved1;
286 ULONG_PTR sb_naddr;
287 UCHAR[(6*ULONG.sizeof)] Reserved2;
288 }
289 _ld_sp ld_sp;
290 PCHAR ld_host;
291 ULONG ld_version;
292 UCHAR ld_lberoptions;
293 int ld_deref;
294 int ld_timelimit;
295 int ld_sizelimit;
296 int ld_errno;
297 PCHAR ld_matched;
298 PCHAR ld_error;
299 }
300 alias LDAP* PLDAP;
301
302 // should be opaque structure
303 struct LDAPMessage {
304 ULONG lm_msgid;
305 ULONG lm_msgtype;
306 BerElement* lm_ber;
307 LDAPMessage* lm_chain;
308 LDAPMessage* lm_next;
309 ULONG lm_time;
310 }
311 alias LDAPMessage* PLDAPMessage;
312
313 struct LDAP_TIMEVAL {
314 LONG tv_sec;
315 LONG tv_usec;
316 }
317 alias LDAP_TIMEVAL* PLDAP_TIMEVAL;
318
319 struct LDAPAPIInfoA {
320 int ldapai_info_version;
321 int ldapai_api_version;
322 int ldapai_protocol_version;
323 char** ldapai_extensions;
324 char* ldapai_vendor_name;
325 int ldapai_vendor_version;
326 }
327 alias LDAPAPIInfoA* PLDAPAPIInfoA;
328
329 struct LDAPAPIInfoW {
330 int ldapai_info_version;
331 int ldapai_api_version;
332 int ldapai_protocol_version;
333 PWCHAR* ldapai_extensions;
334 PWCHAR ldapai_vendor_name;
335 int ldapai_vendor_version;
336 }
337 alias LDAPAPIInfoW* PLDAPAPIInfoW;
338
339 struct LDAPAPIFeatureInfoA {
340 int ldapaif_info_version;
341 char* ldapaif_name;
342 int ldapaif_version;
343 }
344 alias LDAPAPIFeatureInfoA* PLDAPAPIFeatureInfoA;
345
346 struct LDAPAPIFeatureInfoW {
347 int ldapaif_info_version;
348 PWCHAR ldapaif_name;
349 int ldapaif_version;
350 }
351 alias LDAPAPIFeatureInfoW* PLDAPAPIFeatureInfoW;
352
353 struct LDAPControlA {
354 PCHAR ldctl_oid;
355 BerValue ldctl_value;
356 BOOLEAN ldctl_iscritical;
357 }
358 alias LDAPControlA* PLDAPControlA;
359
360 struct LDAPControlW {
361 PWCHAR ldctl_oid;
362 BerValue ldctl_value;
363 BOOLEAN ldctl_iscritical;
364 }
365 alias LDAPControlW* PLDAPControlW;
366
367 /* Do we really need these? In MinGW, LDAPModA/W have only mod_op, mod_type
368 * and mod_vals, and macros are used to simulate anonymous unions in those
369 * structures.
370 */
371 union mod_vals_u_tA {
372 PCHAR* modv_strvals;
373 BerValue** modv_bvals;
374 }
375
376 union mod_vals_u_tW {
377 PWCHAR* modv_strvals;
378 BerValue** modv_bvals;
379 }
380
381 struct LDAPModA {
382 ULONG mod_op;
383 PCHAR mod_type;
384
385 union {
386 mod_vals_u_tA mod_vals;
387 // The following members are defined as macros in MinGW.
388 PCHAR* mod_values;
389 BerValue** mod_bvalues;
390 }
391 }
392 alias LDAPModA* PLDAPModA;
393
394 struct LDAPModW {
395 ULONG mod_op;
396 PWCHAR mod_type;
397
398 union {
399 mod_vals_u_tW mod_vals;
400 // The following members are defined as macros in MinGW.
401 PWCHAR* mod_values;
402 BerValue** mod_bvalues;
403 }
404 }
405 alias LDAPModW* PLDAPModW;
406
407 /* Opaque structure
408 * http://msdn.microsoft.com/library/en-us/ldap/ldap/ldapsearch.asp
409 */
410 struct LDAPSearch;
411 alias LDAPSearch* PLDAPSearch;
412
413 struct LDAPSortKeyA {
414 PCHAR sk_attrtype;
415 PCHAR sk_matchruleoid;
416 BOOLEAN sk_reverseorder;
417 }
418 alias LDAPSortKeyA* PLDAPSortKeyA;
419
420 struct LDAPSortKeyW {
421 PWCHAR sk_attrtype;
422 PWCHAR sk_matchruleoid;
423 BOOLEAN sk_reverseorder;
424 }
425 alias LDAPSortKeyW* PLDAPSortKeyW;
426
427 /* MinGW defines these as immediate function typedefs, which don't translate
428 * well into D.
429 */
430 extern (C) {
431 alias ULONG function(PLDAP, PLDAP, PWCHAR, PCHAR, ULONG, PVOID, PVOID,
432 PLDAP*) QUERYFORCONNECTION;
433 alias BOOLEAN function(PLDAP, PLDAP, PWCHAR, PCHAR, PLDAP, ULONG, PVOID,
434 PVOID, ULONG) NOTIFYOFNEWCONNECTION;
435 alias ULONG function(PLDAP, PLDAP) DEREFERENCECONNECTION;
436 alias BOOLEAN function(PLDAP, PSecPkgContext_IssuerListInfoEx,
437 PCCERT_CONTEXT*) QUERYCLIENTCERT;
438 }
439
440 struct LDAP_REFERRAL_CALLBACK {
441 ULONG SizeOfCallbacks;
442 QUERYFORCONNECTION* QueryForConnection;
443 NOTIFYOFNEWCONNECTION* NotifyRoutine;
444 DEREFERENCECONNECTION* DereferenceRoutine;
445 }
446 alias LDAP_REFERRAL_CALLBACK* PLDAP_REFERRAL_CALLBACK;
447
448 struct LDAPVLVInfo {
449 int ldvlv_version;
450 uint ldvlv_before_count;
451 uint ldvlv_after_count;
452 uint ldvlv_offset;
453 uint ldvlv_count;
454 BerValue* ldvlv_attrvalue;
455 BerValue* ldvlv_context;
456 void* ldvlv_extradata;
457 }
458
459 /*
460 * Under Microsoft WinLDAP the function ldap_error is only stub.
461 * This macro uses LDAP structure to get error string and pass it to the user.
462 */
463 private extern (C) int printf(in char* format, ...);
464 int ldap_perror(LDAP* handle, char* message) {
465 return printf("%s: %s\n", message, handle.ld_error);
466 }
467
468 /* FIXME: In MinGW, these are WINLDAPAPI == DECLSPEC_IMPORT. Linkage
469 * attribute?
470 */
471 extern (C) {
472 PLDAP ldap_initA(PCHAR, ULONG);
473 PLDAP ldap_initW(PWCHAR, ULONG);
474 PLDAP ldap_openA(PCHAR, ULONG);
475 PLDAP ldap_openW(PWCHAR, ULONG);
476 PLDAP cldap_openA(PCHAR, ULONG);
477 PLDAP cldap_openW(PWCHAR, ULONG);
478 ULONG ldap_connect(LDAP*, LDAP_TIMEVAL*);
479 PLDAP ldap_sslinitA(PCHAR, ULONG, int);
480 PLDAP ldap_sslinitW(PWCHAR, ULONG, int);
481 ULONG ldap_start_tls_sA(LDAP*, PLDAPControlA*, PLDAPControlA*);
482 ULONG ldap_start_tls_sW(LDAP*, PLDAPControlW*, PLDAPControlW*);
483 BOOLEAN ldap_stop_tls_s(LDAP*);
484 ULONG ldap_get_optionA(LDAP*, int, void*);
485 ULONG ldap_get_optionW(LDAP*, int, void*);
486 ULONG ldap_set_optionA(LDAP*, int, void*);
487 ULONG ldap_set_optionW(LDAP*, int, void*);
488 ULONG ldap_control_freeA(LDAPControlA*);
489 ULONG ldap_control_freeW(LDAPControlW*);
490 ULONG ldap_controls_freeA(LDAPControlA**);
491 ULONG ldap_controls_freeW(LDAPControlW**);
492 ULONG ldap_free_controlsA(LDAPControlA**);
493 ULONG ldap_free_controlsW(LDAPControlW**);
494 ULONG ldap_sasl_bindA(LDAP*, PCHAR, PCHAR, BERVAL*, PLDAPControlA*,
495 PLDAPControlA*, int*);
496 ULONG ldap_sasl_bindW(LDAP*, PWCHAR, PWCHAR, BERVAL*, PLDAPControlW*,
497 PLDAPControlW*, int*);
498 ULONG ldap_sasl_bind_sA(LDAP*, PCHAR, PCHAR, BERVAL*, PLDAPControlA*,
499 PLDAPControlA*, PBERVAL*);
500 ULONG ldap_sasl_bind_sW(LDAP*, PWCHAR, PWCHAR, BERVAL*, PLDAPControlW*,
501 PLDAPControlW*, PBERVAL*);
502 ULONG ldap_simple_bindA(LDAP*, PCHAR, PCHAR);
503 ULONG ldap_simple_bindW(LDAP*, PWCHAR, PWCHAR);
504 ULONG ldap_simple_bind_sA(LDAP*, PCHAR, PCHAR);
505 ULONG ldap_simple_bind_sW(LDAP*, PWCHAR, PWCHAR);
506 ULONG ldap_unbind(LDAP*);
507 ULONG ldap_unbind_s(LDAP*);
508 ULONG ldap_search_extA(LDAP*, PCHAR, ULONG, PCHAR, PCHAR[], ULONG,
509 PLDAPControlW*, PLDAPControlW*, ULONG, ULONG, ULONG*);
510 ULONG ldap_search_extW(LDAP*, PWCHAR, ULONG, PWCHAR, PWCHAR[], ULONG,
511 PLDAPControlW*, PLDAPControlW*, ULONG, ULONG, ULONG*);
512 ULONG ldap_search_ext_sA(LDAP*, PCHAR, ULONG, PCHAR, PCHAR[], ULONG,
513 PLDAPControlA*, PLDAPControlA*, LDAP_TIMEVAL*, ULONG, LDAPMessage**);
514 ULONG ldap_search_ext_sW(LDAP*, PWCHAR, ULONG, PWCHAR, PWCHAR[], ULONG,
515 PLDAPControlW*, PLDAPControlW*, LDAP_TIMEVAL*, ULONG, LDAPMessage**);
516 ULONG ldap_searchA(LDAP*, PCHAR, ULONG, PCHAR, PCHAR[], ULONG);
517 ULONG ldap_searchW(LDAP*, PWCHAR, ULONG, PWCHAR, PWCHAR[], ULONG);
518 ULONG ldap_search_sA(LDAP*, PCHAR, ULONG, PCHAR, PCHAR[], ULONG,
519 LDAPMessage**);
520 ULONG ldap_search_sW(LDAP*, PWCHAR, ULONG, PWCHAR, PWCHAR[], ULONG,
521 LDAPMessage**);
522 ULONG ldap_search_stA(LDAP*, PCHAR, ULONG, PCHAR, PCHAR[], ULONG,
523 LDAP_TIMEVAL*, LDAPMessage**);
524 ULONG ldap_search_stW(LDAP*, PWCHAR, ULONG, PWCHAR, PWCHAR[], ULONG,
525 LDAP_TIMEVAL*, LDAPMessage**);
526 ULONG ldap_compare_extA(LDAP*, PCHAR, PCHAR, PCHAR, BerValue*,
527 PLDAPControlA*, PLDAPControlA*, ULONG*);
528 ULONG ldap_compare_extW(LDAP*, PWCHAR, PWCHAR, PWCHAR, BerValue*,
529 PLDAPControlW*, PLDAPControlW*, ULONG*);
530 ULONG ldap_compare_ext_sA(LDAP*, PCHAR, PCHAR, PCHAR, BerValue*,
531 PLDAPControlA*, PLDAPControlA*);
532 ULONG ldap_compare_ext_sW(LDAP*, PWCHAR, PWCHAR, PWCHAR, BerValue*,
533 PLDAPControlW*, PLDAPControlW*);
534 ULONG ldap_compareA(LDAP*, PCHAR, PCHAR, PCHAR);
535 ULONG ldap_compareW(LDAP*, PWCHAR, PWCHAR, PWCHAR);
536 ULONG ldap_compare_sA(LDAP*, PCHAR, PCHAR, PCHAR);
537 ULONG ldap_compare_sW(LDAP*, PWCHAR, PWCHAR, PWCHAR);
538 ULONG ldap_modify_extA(LDAP*, PCHAR, LDAPModA*[], PLDAPControlA*,
539 PLDAPControlA*, ULONG*);
540 ULONG ldap_modify_extW(LDAP*, PWCHAR, LDAPModW*[], PLDAPControlW*,
541 PLDAPControlW*, ULONG*);
542 ULONG ldap_modify_ext_sA(LDAP*, PCHAR, LDAPModA*[], PLDAPControlA*,
543 PLDAPControlA*);
544 ULONG ldap_modify_ext_sW(LDAP*, PWCHAR, LDAPModW*[], PLDAPControlW*,
545 PLDAPControlW*);
546 ULONG ldap_modifyA(LDAP*, PCHAR, LDAPModA*[]);
547 ULONG ldap_modifyW(LDAP*, PWCHAR, LDAPModW*[]);
548 ULONG ldap_modify_sA(LDAP*, PCHAR, LDAPModA*[]);
549 ULONG ldap_modify_sW(LDAP*, PWCHAR, LDAPModW*[]);
550 ULONG ldap_rename_extA(LDAP*, PCHAR, PCHAR, PCHAR, INT, PLDAPControlA*,
551 PLDAPControlA*, ULONG*);
552 ULONG ldap_rename_extW(LDAP*, PWCHAR, PWCHAR, PWCHAR, INT, PLDAPControlW*,
553 PLDAPControlW*, ULONG*);
554 ULONG ldap_rename_ext_sA(LDAP*, PCHAR, PCHAR, PCHAR, INT,
555 PLDAPControlA*, PLDAPControlA*);
556 ULONG ldap_rename_ext_sW(LDAP*, PWCHAR, PWCHAR, PWCHAR, INT,
557 PLDAPControlW*, PLDAPControlW*);
558 ULONG ldap_add_extA(LDAP*, PCHAR, LDAPModA*[], PLDAPControlA*,
559 PLDAPControlA*, ULONG*);
560 ULONG ldap_add_extW(LDAP*, PWCHAR, LDAPModW*[], PLDAPControlW*,
561 PLDAPControlW*, ULONG*);
562 ULONG ldap_add_ext_sA(LDAP*, PCHAR, LDAPModA*[], PLDAPControlA*,
563 PLDAPControlA*);
564 ULONG ldap_add_ext_sW(LDAP*, PWCHAR, LDAPModW*[], PLDAPControlW*,
565 PLDAPControlW*);
566 ULONG ldap_addA(LDAP*, PCHAR, LDAPModA*[]);
567 ULONG ldap_addW(LDAP*, PWCHAR, LDAPModW*[]);
568 ULONG ldap_add_sA(LDAP*, PCHAR, LDAPModA*[]);
569 ULONG ldap_add_sW(LDAP*, PWCHAR, LDAPModW*[]);
570 ULONG ldap_delete_extA(LDAP*, PCHAR, PLDAPControlA*, PLDAPControlA*,
571 ULONG*);
572 ULONG ldap_delete_extW(LDAP*, PWCHAR, PLDAPControlW*, PLDAPControlW*,
573 ULONG*);
574 ULONG ldap_delete_ext_sA(LDAP*, PCHAR, PLDAPControlA*, PLDAPControlA*);
575 ULONG ldap_delete_ext_sW(LDAP*, PWCHAR, PLDAPControlW*, PLDAPControlW*);
576 ULONG ldap_deleteA(LDAP*, PCHAR);
577 ULONG ldap_deleteW(LDAP*, PWCHAR);
578 ULONG ldap_delete_sA(LDAP*, PCHAR);
579 ULONG ldap_delete_sW(LDAP*, PWCHAR);
580 ULONG ldap_extended_operationA(LDAP*, PCHAR, BerValue*, PLDAPControlA*,
581 PLDAPControlA*, ULONG*);
582 ULONG ldap_extended_operationW(LDAP*, PWCHAR, BerValue*, PLDAPControlW*,
583 PLDAPControlW*, ULONG*);
584 ULONG ldap_extended_operation_sA(LDAP*, PCHAR, BerValue*, PLDAPControlA*,
585 PLDAPControlA*, PCHAR*, BerValue**);
586 ULONG ldap_extended_operation_sW(LDAP*, PWCHAR, BerValue*, PLDAPControlW*,
587 PLDAPControlW*, PWCHAR*, BerValue**);
588 ULONG ldap_close_extended_op(LDAP*, ULONG);
589 ULONG ldap_abandon(LDAP*, ULONG);
590 ULONG ldap_result(LDAP*, ULONG, ULONG, LDAP_TIMEVAL*, LDAPMessage**);
591 ULONG ldap_msgfree(LDAPMessage*);
592 ULONG ldap_parse_resultA(LDAP*, LDAPMessage*, ULONG*, PCHAR*, PCHAR*,
593 PCHAR**, PLDAPControlA**, BOOLEAN);
594 ULONG ldap_parse_resultW(LDAP*, LDAPMessage*, ULONG*, PWCHAR*, PWCHAR*,
595 PWCHAR**, PLDAPControlW**, BOOLEAN);
596 ULONG ldap_parse_extended_resultA(LDAP, LDAPMessage*, PCHAR*, BerValue**,
597 BOOLEAN);
598 ULONG ldap_parse_extended_resultW(LDAP, LDAPMessage*, PWCHAR*, BerValue**,
599 BOOLEAN);
600 PCHAR ldap_err2stringA(ULONG);
601 PWCHAR ldap_err2stringW(ULONG);
602 ULONG LdapGetLastError();
603 ULONG LdapMapErrorToWin32(ULONG);
604 ULONG ldap_result2error(LDAP*, LDAPMessage*, ULONG);
605 PLDAPMessage ldap_first_entry(LDAP*, LDAPMessage*);
606 PLDAPMessage ldap_next_entry(LDAP*, LDAPMessage*);
607 PLDAPMessage ldap_first_reference(LDAP*, LDAPMessage*);
608 PLDAPMessage ldap_next_reference(LDAP*, LDAPMessage*);
609 ULONG ldap_count_entries(LDAP*, LDAPMessage*);
610 ULONG ldap_count_references(LDAP*, LDAPMessage*);
611 PCHAR ldap_first_attributeA(LDAP*, LDAPMessage*, BerElement**);
612 PWCHAR ldap_first_attributeW(LDAP*, LDAPMessage*, BerElement**);
613 PCHAR ldap_next_attributeA(LDAP*, LDAPMessage*, BerElement*);
614 PWCHAR ldap_next_attributeW(LDAP*, LDAPMessage*, BerElement*);
615 VOID ldap_memfreeA(PCHAR);
616 VOID ldap_memfreeW(PWCHAR);
617 PCHAR* ldap_get_valuesA(LDAP*, LDAPMessage*, PCHAR);
618 PWCHAR* ldap_get_valuesW(LDAP*, LDAPMessage*, PWCHAR);
619 BerValue** ldap_get_values_lenA(LDAP*, LDAPMessage*, PCHAR);
620 BerValue** ldap_get_values_lenW(LDAP*, LDAPMessage*, PWCHAR);
621 ULONG ldap_count_valuesA(PCHAR*);
622 ULONG ldap_count_valuesW(PWCHAR*);
623 ULONG ldap_count_values_len(BerValue**);
624 ULONG ldap_value_freeA(PCHAR*);
625 ULONG ldap_value_freeW(PWCHAR*);
626 ULONG ldap_value_free_len(BerValue**);
627 PCHAR ldap_get_dnA(LDAP*, LDAPMessage*);
628 PWCHAR ldap_get_dnW(LDAP*, LDAPMessage*);
629 PCHAR ldap_explode_dnA(PCHAR, ULONG);
630 PWCHAR ldap_explode_dnW(PWCHAR, ULONG);
631 PCHAR ldap_dn2ufnA(PCHAR);
632 PWCHAR ldap_dn2ufnW(PWCHAR);
633 ULONG ldap_ufn2dnA(PCHAR, PCHAR*);
634 ULONG ldap_ufn2dnW(PWCHAR, PWCHAR*);
635 ULONG ldap_parse_referenceA(LDAP*, LDAPMessage*, PCHAR**);
636 ULONG ldap_parse_referenceW(LDAP*, LDAPMessage*, PWCHAR**);
637 ULONG ldap_check_filterA(LDAP*, PCHAR);
638 ULONG ldap_check_filterW(LDAP*, PWCHAR);
639 ULONG ldap_create_page_controlA(PLDAP, ULONG, BerValue*, UCHAR,
640 PLDAPControlA*);
641 ULONG ldap_create_page_controlW(PLDAP, ULONG, BerValue*, UCHAR,
642 PLDAPControlW*);
643 ULONG ldap_create_sort_controlA(PLDAP, PLDAPSortKeyA*, UCHAR,
644 PLDAPControlA*);
645 ULONG ldap_create_sort_controlW(PLDAP, PLDAPSortKeyW*, UCHAR,
646 PLDAPControlW*);
647 INT ldap_create_vlv_controlA(LDAP*, LDAPVLVInfo*, UCHAR, LDAPControlA**);
648 INT ldap_create_vlv_controlW(LDAP*, LDAPVLVInfo*, UCHAR, LDAPControlW**);
649 ULONG ldap_encode_sort_controlA(PLDAP, PLDAPSortKeyA*, PLDAPControlA,
650 BOOLEAN);
651 ULONG ldap_encode_sort_controlW(PLDAP, PLDAPSortKeyW*, PLDAPControlW,
652 BOOLEAN);
653 ULONG ldap_escape_filter_elementA(PCHAR, ULONG, PCHAR, ULONG);
654 ULONG ldap_escape_filter_elementW(PWCHAR, ULONG, PWCHAR, ULONG);
655 ULONG ldap_get_next_page(PLDAP, PLDAPSearch, ULONG, ULONG*);
656 ULONG ldap_get_next_page_s(PLDAP, PLDAPSearch, LDAP_TIMEVAL*, ULONG,
657 ULONG*, LDAPMessage**);
658 ULONG ldap_get_paged_count(PLDAP, PLDAPSearch, ULONG*, PLDAPMessage);
659 ULONG ldap_parse_page_controlA(PLDAP, PLDAPControlA*, ULONG*, BerValue**);
660 ULONG ldap_parse_page_controlW(PLDAP, PLDAPControlW*, ULONG*, BerValue**);
661 ULONG ldap_parse_sort_controlA(PLDAP, PLDAPControlA*, ULONG*, PCHAR*);
662 ULONG ldap_parse_sort_controlW(PLDAP, PLDAPControlW*, ULONG*, PWCHAR*);
663 INT ldap_parse_vlv_controlA(LDAP*, LDAPControlA**, uint*, uint*,
664 BerValue**, int*);
665 INT ldap_parse_vlv_controlW(LDAP*, LDAPControlW**, uint*, uint*,
666 BerValue**, int*);
667 PLDAPSearch ldap_search_init_pageA(PLDAP, PCHAR, ULONG, PCHAR, PCHAR[],
668 ULONG, PLDAPControlA*, PLDAPControlA*, ULONG, ULONG, PLDAPSortKeyA*);
669 PLDAPSearch ldap_search_init_pageW(PLDAP, PWCHAR, ULONG, PWCHAR, PWCHAR[],
670 ULONG, PLDAPControlW*, PLDAPControlW*, ULONG, ULONG, PLDAPSortKeyW*);
671 ULONG ldap_search_abandon_page(PLDAP, PLDAPSearch);
672 LDAP ldap_conn_from_msg(LDAP*, LDAPMessage*);
673 INT LdapUnicodeToUTF8(LPCWSTR, int, LPSTR, int);
674 INT LdapUTF8ToUnicode(LPCSTR, int, LPWSTR, int);
675 deprecated {
676 ULONG ldap_bindA(LDAP*, PCHAR, PCHAR, ULONG);
677 ULONG ldap_bindW(LDAP*, PWCHAR, PWCHAR, ULONG);
678 ULONG ldap_bind_sA(LDAP*, PCHAR, PCHAR, ULONG);
679 ULONG ldap_bind_sW(LDAP*, PWCHAR, PWCHAR, ULONG);
680 ULONG ldap_modrdnA(LDAP*, PCHAR, PCHAR);
681 ULONG ldap_modrdnW(LDAP*, PWCHAR, PWCHAR);
682 ULONG ldap_modrdn_sA(LDAP*, PCHAR, PCHAR);
683 ULONG ldap_modrdn_sW(LDAP*, PWCHAR, PWCHAR);
684 ULONG ldap_modrdn2A(LDAP*, PCHAR, PCHAR, INT);
685 ULONG ldap_modrdn2W(LDAP*, PWCHAR, PWCHAR, INT);
686 ULONG ldap_modrdn2_sA(LDAP*, PCHAR, PCHAR, INT);
687 ULONG ldap_modrdn2_sW(LDAP*, PWCHAR, PWCHAR, INT);
688 }
689 }
690
691 version (Unicode) {
692 alias LDAPControlW LDAPControl;
693 alias PLDAPControlW PLDAPControl;
694 alias LDAPModW LDAPMod;
695 alias LDAPModW PLDAPMod;
696 alias LDAPSortKeyW LDAPSortKey;
697 alias PLDAPSortKeyW PLDAPSortKey;
698 alias LDAPAPIInfoW LDAPAPIInfo;
699 alias PLDAPAPIInfoW PLDAPAPIInfo;
700 alias LDAPAPIFeatureInfoW LDAPAPIFeatureInfo;
701 alias PLDAPAPIFeatureInfoW PLDAPAPIFeatureInfo;
702 alias cldap_openW cldap_open;
703 alias ldap_openW ldap_open;
704 alias ldap_simple_bindW ldap_simple_bind;
705 alias ldap_simple_bind_sW ldap_simple_bind_s;
706 alias ldap_sasl_bindW ldap_sasl_bind;
707 alias ldap_sasl_bind_sW ldap_sasl_bind_s;
708 alias ldap_initW ldap_init;
709 alias ldap_sslinitW ldap_sslinit;
710 alias ldap_get_optionW ldap_get_option;
711 alias ldap_set_optionW ldap_set_option;
712 alias ldap_start_tls_sW ldap_start_tls_s;
713 alias ldap_addW ldap_add;
714 alias ldap_add_extW ldap_add_ext;
715 alias ldap_add_sW ldap_add_s;
716 alias ldap_add_ext_sW ldap_add_ext_s;
717 alias ldap_compareW ldap_compare;
718 alias ldap_compare_extW ldap_compare_ext;
719 alias ldap_compare_sW ldap_compare_s;
720 alias ldap_compare_ext_sW ldap_compare_ext_s;
721 alias ldap_deleteW ldap_delete;
722 alias ldap_delete_extW ldap_delete_ext;
723 alias ldap_delete_sW ldap_delete_s;
724 alias ldap_delete_ext_sW ldap_delete_ext_s;
725 alias ldap_extended_operation_sW ldap_extended_operation_s;
726 alias ldap_extended_operationW ldap_extended_operation;
727 alias ldap_modifyW ldap_modify;
728 alias ldap_modify_extW ldap_modify_ext;
729 alias ldap_modify_sW ldap_modify_s;
730 alias ldap_modify_ext_sW ldap_modify_ext_s;
731 alias ldap_check_filterW ldap_check_filter;
732 alias ldap_count_valuesW ldap_count_values;
733 alias ldap_create_page_controlW ldap_create_page_control;
734 alias ldap_create_sort_controlW ldap_create_sort_control;
735 alias ldap_create_vlv_controlW ldap_create_vlv_control;
736 alias ldap_encode_sort_controlW ldap_encode_sort_control;
737 alias ldap_escape_filter_elementW ldap_escape_filter_element;
738 alias ldap_first_attributeW ldap_first_attribute;
739 alias ldap_next_attributeW ldap_next_attribute;
740 alias ldap_get_valuesW ldap_get_values;
741 alias ldap_get_values_lenW ldap_get_values_len;
742 alias ldap_parse_extended_resultW ldap_parse_extended_result;
743 alias ldap_parse_page_controlW ldap_parse_page_control;
744 alias ldap_parse_referenceW ldap_parse_reference;
745 alias ldap_parse_resultW ldap_parse_result;
746 alias ldap_parse_sort_controlW ldap_parse_sort_control;
747 alias ldap_parse_vlv_controlW ldap_parse_vlv_control;
748 alias ldap_searchW ldap_search;
749 alias ldap_search_sW ldap_search_s;
750 alias ldap_search_stW ldap_search_st;
751 alias ldap_search_extW ldap_search_ext;
752 alias ldap_search_ext_sW ldap_search_ext_s;
753 alias ldap_search_init_pageW ldap_search_init_page;
754 alias ldap_err2stringW ldap_err2string;
755 alias ldap_control_freeW ldap_control_free;
756 alias ldap_controls_freeW ldap_controls_free;
757 alias ldap_free_controlsW ldap_free_controls;
758 alias ldap_memfreeW ldap_memfree;
759 alias ldap_value_freeW ldap_value_free;
760 alias ldap_dn2ufnW ldap_dn2ufn;
761 alias ldap_ufn2dnW ldap_ufn2dn;
762 alias ldap_explode_dnW ldap_explode_dn;
763 alias ldap_get_dnW ldap_get_dn;
764 alias ldap_rename_extW ldap_rename;
765 alias ldap_rename_ext_sW ldap_rename_s;
766 alias ldap_rename_extW ldap_rename_ext;
767 alias ldap_rename_ext_sW ldap_rename_ext_s;
768 deprecated {
769 alias ldap_bindW ldap_bind;
770 alias ldap_bind_sW ldap_bind_s;
771 alias ldap_modrdnW ldap_modrdn;
772 alias ldap_modrdn_sW ldap_modrdn_s;
773 alias ldap_modrdn2W ldap_modrdn2;
774 alias ldap_modrdn2_sW ldap_modrdn2_s;
775 }
776 } else {
777 alias LDAPControlA LDAPControl;
778 alias PLDAPControlA PLDAPControl;
779 alias LDAPModA LDAPMod;
780 alias LDAPModA PLDAPMod;
781 alias LDAPSortKeyA LDAPSortKey;
782 alias PLDAPSortKeyA PLDAPSortKey;
783 alias LDAPAPIInfoA LDAPAPIInfo;
784 alias PLDAPAPIInfoA PLDAPAPIInfo;
785 alias LDAPAPIFeatureInfoA LDAPAPIFeatureInfo;
786 alias PLDAPAPIFeatureInfoA PLDAPAPIFeatureInfo;
787 alias cldap_openA cldap_open;
788 alias ldap_openA ldap_open;
789 alias ldap_simple_bindA ldap_simple_bind;
790 alias ldap_simple_bind_sA ldap_simple_bind_s;
791 alias ldap_sasl_bindA ldap_sasl_bind;
792 alias ldap_sasl_bind_sA ldap_sasl_bind_s;
793 alias ldap_initA ldap_init;
794 alias ldap_sslinitA ldap_sslinit;
795 alias ldap_get_optionA ldap_get_option;
796 alias ldap_set_optionA ldap_set_option;
797 alias ldap_start_tls_sA ldap_start_tls_s;
798 alias ldap_addA ldap_add;
799 alias ldap_add_extA ldap_add_ext;
800 alias ldap_add_sA ldap_add_s;
801 alias ldap_add_ext_sA ldap_add_ext_s;
802 alias ldap_compareA ldap_compare;
803 alias ldap_compare_extA ldap_compare_ext;
804 alias ldap_compare_sA ldap_compare_s;
805 alias ldap_compare_ext_sA ldap_compare_ext_s;
806 alias ldap_deleteA ldap_delete;
807 alias ldap_delete_extA ldap_delete_ext;
808 alias ldap_delete_sA ldap_delete_s;
809 alias ldap_delete_ext_sA ldap_delete_ext_s;
810 alias ldap_extended_operation_sA ldap_extended_operation_s;
811 alias ldap_extended_operationA ldap_extended_operation;
812 alias ldap_modifyA ldap_modify;
813 alias ldap_modify_extA ldap_modify_ext;
814 alias ldap_modify_sA ldap_modify_s;
815 alias ldap_modify_ext_sA ldap_modify_ext_s;
816 alias ldap_check_filterA ldap_check_filter;
817 alias ldap_count_valuesA ldap_count_values;
818 alias ldap_create_page_controlA ldap_create_page_control;
819 alias ldap_create_sort_controlA ldap_create_sort_control;
820 alias ldap_create_vlv_controlA ldap_create_vlv_control;
821 alias ldap_encode_sort_controlA ldap_encode_sort_control;
822 alias ldap_escape_filter_elementA ldap_escape_filter_element;
823 alias ldap_first_attributeA ldap_first_attribute;
824 alias ldap_next_attributeA ldap_next_attribute;
825 alias ldap_get_valuesA ldap_get_values;
826 alias ldap_get_values_lenA ldap_get_values_len;
827 alias ldap_parse_extended_resultA ldap_parse_extended_result;
828 alias ldap_parse_page_controlA ldap_parse_page_control;
829 alias ldap_parse_referenceA ldap_parse_reference;
830 alias ldap_parse_resultA ldap_parse_result;
831 alias ldap_parse_sort_controlA ldap_parse_sort_control;
832 alias ldap_parse_vlv_controlA ldap_parse_vlv_control;
833 alias ldap_searchA ldap_search;
834 alias ldap_search_sA ldap_search_s;
835 alias ldap_search_stA ldap_search_st;
836 alias ldap_search_extA ldap_search_ext;
837 alias ldap_search_ext_sA ldap_search_ext_s;
838 alias ldap_search_init_pageA ldap_search_init_page;
839 alias ldap_err2stringA ldap_err2string;
840 alias ldap_control_freeA ldap_control_free;
841 alias ldap_controls_freeA ldap_controls_free;
842 alias ldap_free_controlsA ldap_free_controls;
843 alias ldap_memfreeA ldap_memfree;
844 alias ldap_value_freeA ldap_value_free;
845 alias ldap_dn2ufnA ldap_dn2ufn;
846 alias ldap_ufn2dnA ldap_ufn2dn;
847 alias ldap_explode_dnA ldap_explode_dn;
848 alias ldap_get_dnA ldap_get_dn;
849 alias ldap_rename_extA ldap_rename;
850 alias ldap_rename_ext_sA ldap_rename_s;
851 alias ldap_rename_extA ldap_rename_ext;
852 alias ldap_rename_ext_sA ldap_rename_ext_s;
853 deprecated {
854 alias ldap_bindA ldap_bind;
855 alias ldap_bind_sA ldap_bind_s;
856 alias ldap_modrdnA ldap_modrdn;
857 alias ldap_modrdn_sA ldap_modrdn_s;
858 alias ldap_modrdn2A ldap_modrdn2;
859 alias ldap_modrdn2_sA ldap_modrdn2_s;
860 }
861 }
862