Implement ldap_bind* functions.
[wine] / dlls / wldap32 / bind.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
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 WINE_DEFAULT_DEBUG_CHANNEL(wldap32);
43
44 ULONG ldap_bindA( WLDAP32_LDAP *ld, PCHAR dn, PCHAR cred, ULONG method )
45 {
46     ULONG ret = LDAP_NOT_SUPPORTED;
47 #ifdef HAVE_LDAP
48     WCHAR *dnW, *credW;
49
50     TRACE( "(%p, %s, %p, 0x%08lx)\n", ld, debugstr_a(dn), cred, method );
51
52     dnW = strAtoW( dn );
53     if (!dnW) return LDAP_NO_MEMORY;
54
55     credW = strAtoW( cred );
56     if (!credW) return LDAP_NO_MEMORY;
57
58     ret = ldap_bindW( ld, dnW, credW, method );
59
60     strfreeW( dnW );
61     strfreeW( credW );
62
63 #endif
64     return ret;
65 }
66
67 ULONG ldap_bindW( WLDAP32_LDAP *ld, PWCHAR dn, PWCHAR cred, ULONG method )
68 {
69     ULONG ret = LDAP_NOT_SUPPORTED;
70 #ifdef HAVE_LDAP
71     char *dnU, *credU;
72
73     TRACE( "(%p, %s, %p, 0x%08lx)\n", ld, debugstr_w(dn), cred, method );
74
75     dnU = strWtoU( dn );
76     if (!dnU) return LDAP_NO_MEMORY;
77
78     credU = strWtoU( cred );
79     if (!credU) return LDAP_NO_MEMORY;
80
81     ret = ldap_bind( ld, dnU, credU, method );
82
83     strfreeU( dnU );
84     strfreeU( credU );
85
86 #endif
87     return ret;
88 }
89
90 ULONG ldap_bind_sA( WLDAP32_LDAP *ld, PCHAR dn, PCHAR cred, ULONG method )
91 {
92     ULONG ret = LDAP_NOT_SUPPORTED;
93 #ifdef HAVE_LDAP
94     WCHAR *dnW, *credW;
95
96     TRACE( "(%p, %s, %p, 0x%08lx)\n", ld, debugstr_a(dn), cred, method );
97
98     dnW = strAtoW( dn );
99     if (!dnW) return LDAP_NO_MEMORY;
100
101     credW = strAtoW( cred );
102     if (!credW) return LDAP_NO_MEMORY;
103
104     ret = ldap_bind_sW( ld, dnW, credW, method );
105
106     strfreeW( dnW );
107     strfreeW( credW );
108
109 #endif
110     return ret;
111 }
112
113 ULONG ldap_bind_sW( WLDAP32_LDAP *ld, PWCHAR dn, PWCHAR cred, ULONG method )
114 {
115     ULONG ret = LDAP_NOT_SUPPORTED;
116 #ifdef HAVE_LDAP
117     char *dnU, *credU;
118
119     TRACE( "(%p, %s, %p, 0x%08lx)\n", ld, debugstr_w(dn), cred, method );
120
121     dnU = strWtoU( dn );
122     if (!dnU) return LDAP_NO_MEMORY;
123
124     credU = strWtoU( cred );
125     if (!credU) return LDAP_NO_MEMORY;
126
127     ret = ldap_bind_s( ld, dnU, credU, method );
128
129     strfreeU( dnU );
130     strfreeU( credU );
131
132 #endif
133     return ret;
134 }