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 /* Should eventually be determined by the algorithm documented on MSDN. */
43 static const WCHAR defaulthost[] = { 'l','o','c','a','l','h','o','s','t',0 };
45 WINE_DEFAULT_DEBUG_CHANNEL(wldap32);
47 WLDAP32_LDAP *ldap_initA( PCHAR hostname, ULONG portnumber )
50 WLDAP32_LDAP *ld = NULL;
51 WCHAR *hostnameW = NULL;
53 TRACE( "(%s, %ld)\n", debugstr_a(hostname), portnumber );
56 hostnameW = strAtoW( hostname );
57 if (!hostnameW) goto exit;
60 ld = ldap_initW( hostnameW, portnumber );
63 strfreeW( hostnameW );
70 WLDAP32_LDAP *ldap_initW( PWCHAR hostname, ULONG portnumber )
74 char *hostnameU = NULL;
76 TRACE( "(%s, %ld)\n", debugstr_w(hostname), portnumber );
79 hostnameU = strWtoU( hostname );
80 if (!hostnameU) goto exit;
83 hostnameU = strWtoU( defaulthost );
84 if (!hostnameU) goto exit;
87 ld = ldap_init( hostnameU, portnumber );
90 strfreeU( hostnameU );
97 WLDAP32_LDAP *ldap_openA( PCHAR hostname, ULONG portnumber )
100 WLDAP32_LDAP *ld = NULL;
101 WCHAR *hostnameW = NULL;
103 TRACE( "(%s, %ld)\n", debugstr_a(hostname), portnumber );
106 hostnameW = strAtoW( hostname );
107 if (!hostnameW) goto exit;
110 ld = ldap_openW( hostnameW, portnumber );
113 strfreeW( hostnameW );
120 WLDAP32_LDAP *ldap_openW( PWCHAR hostname, ULONG portnumber )
124 char *hostnameU = NULL;
126 TRACE( "(%s, %ld)\n", debugstr_w(hostname), portnumber );
129 hostnameU = strWtoU( hostname );
130 if (!hostnameU) goto exit;
133 hostnameU = strWtoU( defaulthost );
134 if (!hostnameU) goto exit;
137 ld = ldap_open( hostnameU, portnumber );
140 strfreeU( hostnameU );
147 ULONG ldap_start_tls_sA( WLDAP32_LDAP *ld, PULONG retval, WLDAP32_LDAPMessage **result,
148 PLDAPControlA *serverctrls, PLDAPControlA *clientctrls )
150 ULONG ret = LDAP_NOT_SUPPORTED;
152 LDAPControlW **serverctrlsW = NULL, **clientctrlsW = NULL;
154 ret = WLDAP32_LDAP_NO_MEMORY;
156 TRACE( "(%p, %p, %p, %p, %p)\n", ld, retval, result, serverctrls, clientctrls );
158 if (!ld) return ~0UL;
161 serverctrlsW = controlarrayAtoW( serverctrls );
162 if (!serverctrlsW) goto exit;
165 clientctrlsW = controlarrayAtoW( clientctrls );
166 if (!clientctrlsW) goto exit;
169 ret = ldap_start_tls_sW( ld, retval, result, serverctrlsW, clientctrlsW );
172 controlarrayfreeW( serverctrlsW );
173 controlarrayfreeW( clientctrlsW );
179 ULONG ldap_start_tls_sW( WLDAP32_LDAP *ld, PULONG retval, WLDAP32_LDAPMessage **result,
180 PLDAPControlW *serverctrls, PLDAPControlW *clientctrls )
182 ULONG ret = LDAP_NOT_SUPPORTED;
184 LDAPControl **serverctrlsU = NULL, **clientctrlsU = NULL;
186 ret = WLDAP32_LDAP_NO_MEMORY;
188 TRACE( "(%p, %p, %p, %p, %p)\n", ld, retval, result, serverctrls, clientctrls );
190 if (!ld) return ~0UL;
193 serverctrlsU = controlarrayWtoU( serverctrls );
194 if (!serverctrlsU) goto exit;
197 clientctrlsU = controlarrayWtoU( clientctrls );
198 if (!clientctrlsU) goto exit;
201 ret = ldap_start_tls_s( ld, serverctrlsU, clientctrlsU );
204 controlarrayfreeU( serverctrlsU );
205 controlarrayfreeU( clientctrlsU );