2 * WLDAP32 - LDAP support for Wine
4 * Copyright 2005 Hans Leidekker
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include "wine/port.h"
24 #include "wine/debug.h"
35 #define LDAP_SUCCESS 0x00
36 #define LDAP_NOT_SUPPORTED 0x5c
39 #include "winldap_private.h"
42 WINE_DEFAULT_DEBUG_CHANNEL(wldap32);
44 ULONG ldap_searchA( WLDAP32_LDAP *ld, PCHAR base, ULONG scope, PCHAR filter,
45 PCHAR attrs[], ULONG attrsonly )
47 ULONG ret = LDAP_NOT_SUPPORTED;
49 WCHAR *baseW, *filterW, **attrsW;
51 TRACE( "(%p, %s, 0x%08lx, %s, %p, 0x%08lx)\n", ld, debugstr_a(base),
52 scope, debugstr_a(filter), attrs, attrsonly );
54 baseW = strAtoW( base );
55 if (!baseW) return LDAP_NO_MEMORY;
57 filterW = strAtoW( filter );
58 if (!filterW) return LDAP_NO_MEMORY;
60 attrsW = strarrayAtoW( attrs );
61 if (!attrsW) return LDAP_NO_MEMORY;
63 ret = ldap_searchW( ld, baseW, scope, filterW, attrsW, attrsonly );
67 strarrayfreeW( attrsW );
73 ULONG ldap_searchW( WLDAP32_LDAP *ld, PWCHAR base, ULONG scope, PWCHAR filter,
74 PWCHAR attrs[], ULONG attrsonly )
76 ULONG ret = LDAP_NOT_SUPPORTED;
78 char *baseU, *filterU, **attrsU;
80 TRACE( "(%p, %s, 0x%08lx, %s, %p, 0x%08lx)\n", ld, debugstr_w(base),
81 scope, debugstr_w(filter), attrs, attrsonly );
83 baseU = strWtoU( base );
84 if (!baseU) return LDAP_NO_MEMORY;
86 filterU = strWtoU( filter );
87 if (!filterU) return LDAP_NO_MEMORY;
89 attrsU = strarrayWtoU( attrs );
90 if (!attrsU) return LDAP_NO_MEMORY;
92 ret = ldap_search( ld, baseU, scope, filterU, attrsU, attrsonly );
96 strarrayfreeU( attrsU );
102 ULONG ldap_search_extA( WLDAP32_LDAP *ld, PCHAR base, ULONG scope,
103 PCHAR filter, PCHAR attrs[], ULONG attrsonly, PLDAPControlA *serverctrls,
104 PLDAPControlA *clientctrls, ULONG timelimit, ULONG sizelimit, ULONG *message )
106 ULONG ret = LDAP_NOT_SUPPORTED;
108 WCHAR *baseW, *filterW, **attrsW;
109 LDAPControlW **serverctrlsW, **clientctrlsW;
111 TRACE( "(%p, %s, 0x%08lx, %s, %p, 0x%08lx, %p, %p, 0x%08lx, 0x%08lx, %p)\n",
112 ld, debugstr_a(base), scope, debugstr_a(filter), attrs, attrsonly,
113 serverctrls, clientctrls, timelimit, sizelimit, message );
115 if (!ld) return ~0UL;
117 baseW = strAtoW( base );
118 if (!baseW) return LDAP_NO_MEMORY;
120 filterW = strAtoW( filter );
121 if (!filterW) return LDAP_NO_MEMORY;
123 attrsW = strarrayAtoW( attrs );
124 if (!attrsW) return LDAP_NO_MEMORY;
126 serverctrlsW = controlarrayAtoW( serverctrls );
127 if (!serverctrlsW) return LDAP_NO_MEMORY;
129 clientctrlsW = controlarrayAtoW( clientctrls );
130 if (!clientctrlsW) return LDAP_NO_MEMORY;
132 ret = ldap_search_extW( ld, baseW, scope, filterW, attrsW, attrsonly,
133 serverctrlsW, clientctrlsW, timelimit, sizelimit, message );
137 strarrayfreeW( attrsW );
138 controlarrayfreeW( serverctrlsW );
139 controlarrayfreeW( clientctrlsW );
145 ULONG ldap_search_extW( WLDAP32_LDAP *ld, PWCHAR base, ULONG scope,
146 PWCHAR filter, PWCHAR attrs[], ULONG attrsonly, PLDAPControlW *serverctrls,
147 PLDAPControlW *clientctrls, ULONG timelimit, ULONG sizelimit, ULONG *message )
149 ULONG ret = LDAP_NOT_SUPPORTED;
151 char *baseU, *filterU, **attrsU;
152 LDAPControl **serverctrlsU, **clientctrlsU;
155 TRACE( "(%p, %s, 0x%08lx, %s, %p, 0x%08lx, %p, %p, 0x%08lx, 0x%08lx, %p)\n",
156 ld, debugstr_w(base), scope, debugstr_w(filter), attrs, attrsonly,
157 serverctrls, clientctrls, timelimit, sizelimit, message );
159 if (!ld) return ~0UL;
161 baseU = strWtoU( base );
162 if (!baseU) return LDAP_NO_MEMORY;
164 filterU = strWtoU( filter );
165 if (!filterU) return LDAP_NO_MEMORY;
167 attrsU = strarrayWtoU( attrs );
168 if (!attrsU) return LDAP_NO_MEMORY;
170 serverctrlsU = controlarrayWtoU( serverctrls );
171 if (!serverctrlsU) return LDAP_NO_MEMORY;
173 clientctrlsU = controlarrayWtoU( clientctrls );
174 if (!clientctrlsU) return LDAP_NO_MEMORY;
176 tv.tv_sec = timelimit;
179 ret = ldap_search_ext( ld, baseU, scope, filterU, attrsU, attrsonly,
180 serverctrlsU, clientctrlsU, &tv, sizelimit, (int *)message );
184 strarrayfreeU( attrsU );
185 controlarrayfreeU( serverctrlsU );
186 controlarrayfreeU( clientctrlsU );
192 ULONG ldap_search_ext_sA( WLDAP32_LDAP *ld, PCHAR base, ULONG scope,
193 PCHAR filter, PCHAR attrs[], ULONG attrsonly, PLDAPControlA *serverctrls,
194 PLDAPControlA *clientctrls, ULONG timelimit, ULONG sizelimit, WLDAP32_LDAPMessage **res )
196 ULONG ret = LDAP_NOT_SUPPORTED;
198 WCHAR *baseW, *filterW, **attrsW;
199 LDAPControlW **serverctrlsW, **clientctrlsW;
201 TRACE( "(%p, %s, 0x%08lx, %s, %p, 0x%08lx, %p, %p, 0x%08lx, 0x%08lx, %p)\n",
202 ld, debugstr_a(base), scope, debugstr_a(filter), attrs, attrsonly,
203 serverctrls, clientctrls, timelimit, sizelimit, res );
205 if (!ld) return ~0UL;
207 baseW = strAtoW( base );
208 if (!baseW) return LDAP_NO_MEMORY;
210 filterW = strAtoW( filter );
211 if (!filterW) return LDAP_NO_MEMORY;
213 attrsW = strarrayAtoW( attrs );
214 if (!attrsW) return LDAP_NO_MEMORY;
216 serverctrlsW = controlarrayAtoW( serverctrls );
217 if (!serverctrlsW) return LDAP_NO_MEMORY;
219 clientctrlsW = controlarrayAtoW( clientctrls );
220 if (!clientctrlsW) return LDAP_NO_MEMORY;
222 ret = ldap_search_ext_sW( ld, baseW, scope, filterW, attrsW, attrsonly,
223 serverctrlsW, clientctrlsW, timelimit, sizelimit, res );
227 strarrayfreeW( attrsW );
228 controlarrayfreeW( serverctrlsW );
229 controlarrayfreeW( clientctrlsW );
235 ULONG ldap_search_ext_sW( WLDAP32_LDAP *ld, PWCHAR base, ULONG scope,
236 PWCHAR filter, PWCHAR attrs[], ULONG attrsonly, PLDAPControlW *serverctrls,
237 PLDAPControlW *clientctrls, ULONG timelimit, ULONG sizelimit, WLDAP32_LDAPMessage **res )
239 ULONG ret = LDAP_NOT_SUPPORTED;
241 char *baseU, *filterU, **attrsU;
242 LDAPControl **serverctrlsU, **clientctrlsU;
245 TRACE( "(%p, %s, 0x%08lx, %s, %p, 0x%08lx, %p, %p, 0x%08lx, 0x%08lx, %p)\n",
246 ld, debugstr_w(base), scope, debugstr_w(filter), attrs, attrsonly,
247 serverctrls, clientctrls, timelimit, sizelimit, res );
249 if (!ld) return ~0UL;
251 baseU = strWtoU( base );
252 if (!baseU) return LDAP_NO_MEMORY;
254 filterU = strWtoU( filter );
255 if (!filterU) return LDAP_NO_MEMORY;
257 attrsU = strarrayWtoU( attrs );
258 if (!attrsU) return LDAP_NO_MEMORY;
260 serverctrlsU = controlarrayWtoU( serverctrls );
261 if (!serverctrlsU) return LDAP_NO_MEMORY;
263 clientctrlsU = controlarrayWtoU( clientctrls );
264 if (!clientctrlsU) return LDAP_NO_MEMORY;
266 tv.tv_sec = timelimit;
269 ret = ldap_search_ext_s( ld, baseU, scope, filterU, attrsU, attrsonly,
270 serverctrlsU, clientctrlsU, &tv, sizelimit, res );
274 strarrayfreeU( attrsU );
275 controlarrayfreeU( serverctrlsU );
276 controlarrayfreeU( clientctrlsU );
282 ULONG ldap_search_sA( WLDAP32_LDAP *ld, PCHAR base, ULONG scope, PCHAR filter,
283 PCHAR attrs[], ULONG attrsonly, WLDAP32_LDAPMessage **res )
285 ULONG ret = LDAP_NOT_SUPPORTED;
287 WCHAR *baseW, *filterW, **attrsW;
289 TRACE( "(%p, %s, 0x%08lx, %s, %p, 0x%08lx, %p)\n", ld, debugstr_a(base),
290 scope, debugstr_a(filter), attrs, attrsonly, res );
292 baseW = strAtoW( base );
293 if (!baseW) return LDAP_NO_MEMORY;
295 filterW = strAtoW( filter );
296 if (!filterW) return LDAP_NO_MEMORY;
298 attrsW = strarrayAtoW( attrs );
299 if (!attrsW) return LDAP_NO_MEMORY;
301 ret = ldap_search_sW( ld, baseW, scope, filterW, attrsW, attrsonly, res );
305 strarrayfreeW( attrsW );
311 ULONG ldap_search_sW( WLDAP32_LDAP *ld, PWCHAR base, ULONG scope, PWCHAR filter,
312 PWCHAR attrs[], ULONG attrsonly, WLDAP32_LDAPMessage **res )
314 ULONG ret = LDAP_NOT_SUPPORTED;
316 char *baseU, *filterU, **attrsU;
318 TRACE( "(%p, %s, 0x%08lx, %s, %p, 0x%08lx, %p)\n", ld, debugstr_w(base),
319 scope, debugstr_w(filter), attrs, attrsonly, res );
321 baseU = strWtoU( base );
322 if (!baseU) return LDAP_NO_MEMORY;
324 filterU = strWtoU( filter );
325 if (!filterU) return LDAP_NO_MEMORY;
327 attrsU = strarrayWtoU( attrs );
328 if (!attrsU) return LDAP_NO_MEMORY;
330 ret = ldap_search_s( ld, baseU, scope, filterU, attrsU, attrsonly, res );
334 strarrayfreeU( attrsU );
340 ULONG ldap_search_stA( WLDAP32_LDAP *ld, const PCHAR base, ULONG scope,
341 const PCHAR filter, PCHAR attrs[], ULONG attrsonly,
342 struct l_timeval *timeout, WLDAP32_LDAPMessage **res )
344 ULONG ret = LDAP_NOT_SUPPORTED;
346 WCHAR *baseW, *filterW, **attrsW;
348 TRACE( "(%p, %s, 0x%08lx, %s, %p, 0x%08lx, %p, %p)\n", ld,
349 debugstr_a(base), scope, debugstr_a(filter), attrs,
350 attrsonly, timeout, res );
352 baseW = strAtoW( base );
353 if (!baseW) return LDAP_NO_MEMORY;
355 filterW = strAtoW( filter );
356 if (!filterW) return LDAP_NO_MEMORY;
358 attrsW = strarrayAtoW( attrs );
359 if (!attrsW) return LDAP_NO_MEMORY;
361 ret = ldap_search_stW( ld, baseW, scope, filterW, attrsW, attrsonly,
366 strarrayfreeW( attrsW );
372 ULONG ldap_search_stW( WLDAP32_LDAP *ld, const PWCHAR base, ULONG scope,
373 const PWCHAR filter, PWCHAR attrs[], ULONG attrsonly,
374 struct l_timeval *timeout, WLDAP32_LDAPMessage **res )
376 ULONG ret = LDAP_NOT_SUPPORTED;
378 char *baseU, *filterU, **attrsU;
380 TRACE( "(%p, %s, 0x%08lx, %s, %p, 0x%08lx, %p, %p)\n", ld,
381 debugstr_w(base), scope, debugstr_w(filter), attrs,
382 attrsonly, timeout, res );
384 baseU = strWtoU( base );
385 if (!baseU) return LDAP_NO_MEMORY;
387 filterU = strWtoU( filter );
388 if (!filterU) return LDAP_NO_MEMORY;
390 attrsU = strarrayWtoU( attrs );
391 if (!attrsU) return LDAP_NO_MEMORY;
393 ret = ldap_search_st( ld, baseU, scope, filterU, attrsU, attrsonly,
394 (struct timeval *)timeout, res );
398 strarrayfreeU( attrsU );