ReactOS  0.4.15-dev-499-g1f31905
rename.c
Go to the documentation of this file.
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #include "config.h"
22 #include "wine/port.h"
23 
24 #include <stdarg.h>
25 #ifdef HAVE_LDAP_H
26 #include <ldap.h>
27 #endif
28 
29 #include "windef.h"
30 #include "winbase.h"
31 #include "winnls.h"
32 
33 #include "winldap_private.h"
34 #include "wldap32.h"
35 #include "wine/debug.h"
36 
38 
39 /***********************************************************************
40  * ldap_rename_extA (WLDAP32.@)
41  *
42  * See ldap_rename_extW.
43  */
45  PCHAR newparent, INT delete, PLDAPControlA *serverctrls,
46  PLDAPControlA *clientctrls, ULONG *message )
47 {
49 #ifdef HAVE_LDAP
50  WCHAR *dnW = NULL, *newrdnW = NULL, *newparentW = NULL;
51  LDAPControlW **serverctrlsW = NULL, **clientctrlsW = NULL;
52 
54 
55  TRACE( "(%p, %s, %s, %s, 0x%02x, %p, %p, %p)\n", ld, debugstr_a(dn),
56  debugstr_a(newrdn), debugstr_a(newparent), delete,
57  serverctrls, clientctrls, message );
58 
59  if (!ld || !message) return WLDAP32_LDAP_PARAM_ERROR;
60 
61  if (dn) {
62  dnW = strAtoW( dn );
63  if (!dnW) goto exit;
64  }
65  if (newrdn) {
66  newrdnW = strAtoW( newrdn );
67  if (!newrdnW) goto exit;
68  }
69  if (newparent) {
70  newparentW = strAtoW( newparent );
71  if (!newparentW) goto exit;
72  }
73  if (serverctrls) {
74  serverctrlsW = controlarrayAtoW( serverctrls );
75  if (!serverctrlsW) goto exit;
76  }
77  if (clientctrls) {
78  clientctrlsW = controlarrayAtoW( clientctrls );
79  if (!clientctrlsW) goto exit;
80  }
81 
82  ret = ldap_rename_extW( ld, dnW, newrdnW, newparentW, delete,
83  serverctrlsW, clientctrlsW, message );
84 
85 exit:
86  strfreeW( dnW );
87  strfreeW( newrdnW );
88  strfreeW( newparentW );
89  controlarrayfreeW( serverctrlsW );
90  controlarrayfreeW( clientctrlsW );
91 
92 #endif
93  return ret;
94 }
95 
96 /***********************************************************************
97  * ldap_rename_extW (WLDAP32.@)
98  *
99  * Change the DN of a directory entry (asynchronous operation).
100  *
101  * PARAMS
102  * ld [I] Pointer to an LDAP context.
103  * dn [I] DN of the entry to change.
104  * newrdn [I] New RDN for the entry.
105  * newparent [I] New parent for the entry.
106  * delete [I] Delete old RDN?
107  * serverctrls [I] Array of LDAP server controls.
108  * clientctrls [I] Array of LDAP client controls.
109  * message [O] Message ID of the operation.
110  *
111  * RETURNS
112  * Success: LDAP_SUCCESS
113  * Failure: An LDAP error code.
114  *
115  * NOTES
116  * Call ldap_result with the message ID to get the result of
117  * the operation. Cancel the operation by calling ldap_abandon
118  * with the message ID.
119  */
121  PWCHAR newparent, INT delete, PLDAPControlW *serverctrls,
122  PLDAPControlW *clientctrls, ULONG *message )
123 {
125 #ifdef HAVE_LDAP
126  char *dnU = NULL, *newrdnU = NULL, *newparentU = NULL;
127  LDAPControl **serverctrlsU = NULL, **clientctrlsU = NULL;
128 
130 
131  TRACE( "(%p, %s, %s, %s, 0x%02x, %p, %p, %p)\n", ld, debugstr_w(dn),
132  debugstr_w(newrdn), debugstr_w(newparent), delete,
133  serverctrls, clientctrls, message );
134 
135  if (!ld || !message) return WLDAP32_LDAP_PARAM_ERROR;
136 
137  if (dn) {
138  dnU = strWtoU( dn );
139  if (!dnU) goto exit;
140  }
141  if (newrdn) {
142  newrdnU = strWtoU( newrdn );
143  if (!newrdnU) goto exit;
144  }
145  if (newparent) {
146  newparentU = strWtoU( newparent );
147  if (!newparentU) goto exit;
148  }
149  if (serverctrls) {
150  serverctrlsU = controlarrayWtoU( serverctrls );
151  if (!serverctrlsU) goto exit;
152  }
153  if (clientctrls) {
154  clientctrlsU = controlarrayWtoU( clientctrls );
155  if (!clientctrlsU) goto exit;
156  }
157 
158  ret = map_error( ldap_rename( ld, dn ? dnU : "", newrdn ? newrdnU : "", newparentU,
159  delete, serverctrlsU, clientctrlsU, (int *)message ));
160 
161 exit:
162  strfreeU( dnU );
163  strfreeU( newrdnU );
164  strfreeU( newparentU );
165  controlarrayfreeU( serverctrlsU );
166  controlarrayfreeU( clientctrlsU );
167 
168 #endif
169  return ret;
170 }
171 
172 /***********************************************************************
173  * ldap_rename_ext_sA (WLDAP32.@)
174  *
175  * See ldap_rename_ext_sW.
176  */
178  PCHAR newparent, INT delete, PLDAPControlA *serverctrls,
179  PLDAPControlA *clientctrls )
180 {
182 #ifdef HAVE_LDAP
183  WCHAR *dnW = NULL, *newrdnW = NULL, *newparentW = NULL;
184  LDAPControlW **serverctrlsW = NULL, **clientctrlsW = NULL;
185 
187 
188  TRACE( "(%p, %s, %s, %s, 0x%02x, %p, %p)\n", ld, debugstr_a(dn),
189  debugstr_a(newrdn), debugstr_a(newparent), delete,
190  serverctrls, clientctrls );
191 
192  if (!ld) return WLDAP32_LDAP_PARAM_ERROR;
193 
194  if (dn) {
195  dnW = strAtoW( dn );
196  if (!dnW) goto exit;
197  }
198  if (newrdn) {
199  newrdnW = strAtoW( newrdn );
200  if (!newrdnW) goto exit;
201  }
202  if (newparent) {
203  newparentW = strAtoW( newparent );
204  if (!newparentW) goto exit;
205  }
206  if (serverctrls) {
207  serverctrlsW = controlarrayAtoW( serverctrls );
208  if (!serverctrlsW) goto exit;
209  }
210  if (clientctrls) {
211  clientctrlsW = controlarrayAtoW( clientctrls );
212  if (!clientctrlsW) goto exit;
213  }
214 
215  ret = ldap_rename_ext_sW( ld, dnW, newrdnW, newparentW, delete,
216  serverctrlsW, clientctrlsW );
217 
218 exit:
219  strfreeW( dnW );
220  strfreeW( newrdnW );
221  strfreeW( newparentW );
222  controlarrayfreeW( serverctrlsW );
223  controlarrayfreeW( clientctrlsW );
224 
225 #endif
226  return ret;
227 }
228 /***********************************************************************
229  * ldap_rename_ext_sW (WLDAP32.@)
230  *
231  * Change the DN of a directory entry (synchronous operation).
232  *
233  * PARAMS
234  * ld [I] Pointer to an LDAP context.
235  * dn [I] DN of the entry to change.
236  * newrdn [I] New RDN for the entry.
237  * newparent [I] New parent for the entry.
238  * delete [I] Delete old RDN?
239  * serverctrls [I] Array of LDAP server controls.
240  * clientctrls [I] Array of LDAP client controls.
241  *
242  * RETURNS
243  * Success: LDAP_SUCCESS
244  * Failure: An LDAP error code.
245  */
247  PWCHAR newparent, INT delete, PLDAPControlW *serverctrls,
248  PLDAPControlW *clientctrls )
249 {
251 #ifdef HAVE_LDAP
252  char *dnU = NULL, *newrdnU = NULL, *newparentU = NULL;
253  LDAPControl **serverctrlsU = NULL, **clientctrlsU = NULL;
254 
256 
257  TRACE( "(%p, %s, %s, %s, 0x%02x, %p, %p)\n", ld, debugstr_w(dn),
258  debugstr_w(newrdn), debugstr_w(newparent), delete,
259  serverctrls, clientctrls );
260 
261  if (!ld) return WLDAP32_LDAP_PARAM_ERROR;
262 
263  if (dn) {
264  dnU = strWtoU( dn );
265  if (!dnU) goto exit;
266  }
267  if (newrdn) {
268  newrdnU = strWtoU( newrdn );
269  if (!newrdnU) goto exit;
270  }
271  if (newparent) {
272  newparentU = strWtoU( newparent );
273  if (!newparentU) goto exit;
274  }
275  if (serverctrls) {
276  serverctrlsU = controlarrayWtoU( serverctrls );
277  if (!serverctrlsU) goto exit;
278  }
279  if (clientctrls) {
280  clientctrlsU = controlarrayWtoU( clientctrls );
281  if (!clientctrlsU) goto exit;
282  }
283 
284  ret = map_error( ldap_rename_s( ld, dn ? dnU : "", newrdn ? newrdnU : "", newparentU,
285  delete, serverctrlsU, clientctrlsU ));
286 
287 exit:
288  strfreeU( dnU );
289  strfreeU( newrdnU );
290  strfreeU( newparentU );
291  controlarrayfreeU( serverctrlsU );
292  controlarrayfreeU( clientctrlsU );
293 
294 #endif
295  return ret;
296 }
signed char * PCHAR
Definition: retypes.h:7
Definition: tftpd.h:59
static char * strWtoU(LPCWSTR str)
Definition: wldap32.h:74
WINE_DEFAULT_DEBUG_CHANNEL(wldap32)
ULONG CDECL ldap_rename_extW(WLDAP32_LDAP *ld, PWCHAR dn, PWCHAR newrdn, PWCHAR newparent, INT delete, PLDAPControlW *serverctrls, PLDAPControlW *clientctrls, ULONG *message)
Definition: rename.c:120
#define ldap_rename_s
Definition: winldap.h:699
static void strfreeU(char *str)
Definition: wldap32.h:108
ULONG CDECL ldap_rename_ext_sW(WLDAP32_LDAP *ld, PWCHAR dn, PWCHAR newrdn, PWCHAR newparent, INT delete, PLDAPControlW *serverctrls, PLDAPControlW *clientctrls)
Definition: rename.c:246
static void strfreeW(LPWSTR str)
Definition: wldap32.h:103
#define LDAPControl
Definition: winldap.h:620
uint16_t * PWCHAR
Definition: typedefs.h:55
int32_t INT
Definition: typedefs.h:57
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
ULONG CDECL ldap_rename_extA(WLDAP32_LDAP *ld, PCHAR dn, PCHAR newrdn, PCHAR newparent, INT delete, PLDAPControlA *serverctrls, PLDAPControlA *clientctrls, ULONG *message)
Definition: rename.c:44
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
int ret
static LPWSTR strAtoW(const char *str)
#define CDECL
Definition: compat.h:21
ULONG CDECL ldap_rename_ext_sA(WLDAP32_LDAP *ld, PCHAR dn, PCHAR newrdn, PCHAR newparent, INT delete, PLDAPControlA *serverctrls, PLDAPControlA *clientctrls)
Definition: rename.c:177
#define ldap_rename
Definition: winldap.h:698
unsigned int ULONG
Definition: retypes.h:1
static UINT map_error(DWORD error)
Definition: service.c:35
void exit(int exitcode)
Definition: _exit.c:33