Replace "Registry Explorer" by "Registry Editor" in about dialog.
[wine] / dlls / wldap32 / init.c
1 /*
2  * WLDAP32 - LDAP support for Wine
3  *
4  * Copyright 2005 Hans Leidekker
5  *
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.
10  *
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.
15  *
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
19  */
20
21 #include "config.h"
22
23 #include "wine/port.h"
24 #include "wine/debug.h"
25
26 #include <stdarg.h>
27
28 #include "windef.h"
29 #include "winbase.h"
30 #include "winnls.h"
31
32 #ifdef HAVE_LDAP_H
33 #include <ldap.h>
34 #else
35 #define LDAP_SUCCESS        0x00
36 #define LDAP_NOT_SUPPORTED  0x5c
37 #endif
38
39 #include "winldap_private.h"
40 #include "wldap32.h"
41
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 };
44
45 WINE_DEFAULT_DEBUG_CHANNEL(wldap32);
46
47 WLDAP32_LDAP *ldap_initA( PCHAR hostname, ULONG portnumber )
48 {
49 #ifdef HAVE_LDAP
50     WLDAP32_LDAP *ld = NULL;
51     WCHAR *hostnameW = NULL;
52
53     TRACE( "(%s, %ld)\n", debugstr_a(hostname), portnumber );
54
55     if (hostname) {
56         hostnameW = strAtoW( hostname );
57         if (!hostnameW) goto exit;
58     }
59
60     ld = ldap_initW( hostnameW, portnumber );
61
62 exit:
63     strfreeW( hostnameW );
64     return ld;
65
66 #endif
67     return NULL;
68 }
69
70 WLDAP32_LDAP *ldap_initW( PWCHAR hostname, ULONG portnumber )
71 {
72 #ifdef HAVE_LDAP
73     LDAP *ld = NULL;
74     char *hostnameU = NULL;
75
76     TRACE( "(%s, %ld)\n", debugstr_w(hostname), portnumber );
77
78     if (hostname) {
79         hostnameU = strWtoU( hostname );
80         if (!hostnameU) goto exit;
81     }
82     else {
83         hostnameU = strWtoU( defaulthost );
84         if (!hostnameU) goto exit;
85     }
86
87     ld = ldap_init( hostnameU, portnumber );
88
89 exit:
90     strfreeU( hostnameU );
91     return ld;
92
93 #endif
94     return NULL;
95 }
96
97 WLDAP32_LDAP *ldap_openA( PCHAR hostname, ULONG portnumber )
98 {
99 #ifdef HAVE_LDAP
100     WLDAP32_LDAP *ld = NULL;
101     WCHAR *hostnameW = NULL;
102
103     TRACE( "(%s, %ld)\n", debugstr_a(hostname), portnumber );
104
105     if (hostname) {
106         hostnameW = strAtoW( hostname );
107         if (!hostnameW) goto exit;
108     }
109
110     ld = ldap_openW( hostnameW, portnumber );
111
112 exit:
113     strfreeW( hostnameW );
114     return ld;
115
116 #endif
117     return NULL;
118 }
119
120 WLDAP32_LDAP *ldap_openW( PWCHAR hostname, ULONG portnumber )
121 {
122 #ifdef HAVE_LDAP
123     LDAP *ld = NULL;
124     char *hostnameU = NULL;
125
126     TRACE( "(%s, %ld)\n", debugstr_w(hostname), portnumber );
127
128     if (hostname) {
129         hostnameU = strWtoU( hostname );
130         if (!hostnameU) goto exit;
131     }
132     else {
133         hostnameU = strWtoU( defaulthost );
134         if (!hostnameU) goto exit;
135     }
136
137     ld = ldap_open( hostnameU, portnumber );
138
139 exit:
140     strfreeU( hostnameU );
141     return ld;
142
143 #endif
144     return NULL;
145 }
146
147 ULONG ldap_start_tls_sA( WLDAP32_LDAP *ld, PULONG retval, WLDAP32_LDAPMessage **result,
148     PLDAPControlA *serverctrls, PLDAPControlA *clientctrls )
149 {
150     ULONG ret = LDAP_NOT_SUPPORTED;
151 #ifdef HAVE_LDAP
152     LDAPControlW **serverctrlsW = NULL, **clientctrlsW = NULL;
153
154     ret = WLDAP32_LDAP_NO_MEMORY;
155
156     TRACE( "(%p, %p, %p, %p, %p)\n", ld, retval, result, serverctrls, clientctrls );
157
158     if (!ld) return ~0UL;
159
160     if (serverctrls) {
161         serverctrlsW = controlarrayAtoW( serverctrls );
162         if (!serverctrlsW) goto exit;
163     }
164     if (clientctrls) {
165         clientctrlsW = controlarrayAtoW( clientctrls );
166         if (!clientctrlsW) goto exit;
167     }
168
169     ret = ldap_start_tls_sW( ld, retval, result, serverctrlsW, clientctrlsW );
170
171 exit:
172     controlarrayfreeW( serverctrlsW );
173     controlarrayfreeW( clientctrlsW );
174
175 #endif
176     return ret;
177 }
178
179 ULONG ldap_start_tls_sW( WLDAP32_LDAP *ld, PULONG retval, WLDAP32_LDAPMessage **result,
180     PLDAPControlW *serverctrls, PLDAPControlW *clientctrls )
181 {
182     ULONG ret = LDAP_NOT_SUPPORTED;
183 #ifdef HAVE_LDAP
184     LDAPControl **serverctrlsU = NULL, **clientctrlsU = NULL;
185
186     ret = WLDAP32_LDAP_NO_MEMORY;
187
188     TRACE( "(%p, %p, %p, %p, %p)\n", ld, retval, result, serverctrls, clientctrls );
189
190     if (!ld) return ~0UL;
191
192     if (serverctrls) {
193         serverctrlsU = controlarrayWtoU( serverctrls );
194         if (!serverctrlsU) goto exit;
195     }
196     if (clientctrls) {
197         clientctrlsU = controlarrayWtoU( clientctrls );
198         if (!clientctrlsU) goto exit;
199     }
200
201     ret = ldap_start_tls_s( ld, serverctrlsU, clientctrlsU );
202
203 exit:
204     controlarrayfreeU( serverctrlsU );
205     controlarrayfreeU( clientctrlsU );
206
207 #endif
208     return ret;
209 }