diff --git a/dlls/wldap32/Makefile.in b/dlls/wldap32/Makefile.in index 1413fb0540f..76b3f47283d 100644 --- a/dlls/wldap32/Makefile.in +++ b/dlls/wldap32/Makefile.in @@ -21,6 +21,7 @@ C_SRCS = \ modify.c \ modrdn.c \ option.c \ + rename.c \ search.c RC_SRCS = wldap32.rc diff --git a/dlls/wldap32/rename.c b/dlls/wldap32/rename.c new file mode 100644 index 00000000000..8675f72545d --- /dev/null +++ b/dlls/wldap32/rename.c @@ -0,0 +1,249 @@ +/* + * WLDAP32 - LDAP support for Wine + * + * Copyright 2005 Hans Leidekker + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" + +#include "wine/port.h" +#include "wine/debug.h" + +#include + +#include "windef.h" +#include "winbase.h" +#include "winnls.h" + +#ifdef HAVE_LDAP_H +#include +#else +#define LDAP_NOT_SUPPORTED 0x5c +#endif + +#include "winldap_private.h" +#include "wldap32.h" + +WINE_DEFAULT_DEBUG_CHANNEL(wldap32); + +ULONG ldap_rename_extA( WLDAP32_LDAP *ld, PCHAR dn, PCHAR newrdn, + PCHAR newparent, INT delete, PLDAPControlA *serverctrls, + PLDAPControlA *clientctrls, ULONG *message ) +{ + ULONG ret = LDAP_NOT_SUPPORTED; +#ifdef HAVE_LDAP + WCHAR *dnW = NULL, *newrdnW = NULL, *newparentW = NULL; + LDAPControlW **serverctrlsW = NULL, **clientctrlsW = NULL; + + ret = WLDAP32_LDAP_NO_MEMORY; + + TRACE( "(%p, %s, %s, %s, 0x%02x, %p, %p, %p)\n", ld, debugstr_a(dn), + debugstr_a(newrdn), debugstr_a(newparent), delete, + serverctrls, clientctrls, message ); + + if (!ld || !message) return WLDAP32_LDAP_PARAM_ERROR; + + if (dn) { + dnW = strAtoW( dn ); + if (!dnW) goto exit; + } + if (newrdn) { + newrdnW = strAtoW( newrdn ); + if (!newrdnW) goto exit; + } + if (newparent) { + newparentW = strAtoW( newparent ); + if (!newparentW) goto exit; + } + if (serverctrls) { + serverctrlsW = controlarrayAtoW( serverctrls ); + if (!serverctrlsW) goto exit; + } + if (clientctrls) { + clientctrlsW = controlarrayAtoW( clientctrls ); + if (!clientctrlsW) goto exit; + } + + ret = ldap_rename_extW( ld, dnW, newrdnW, newparentW, delete, + serverctrlsW, clientctrlsW, message ); + +exit: + strfreeW( dnW ); + strfreeW( newrdnW ); + strfreeW( newparentW ); + controlarrayfreeW( serverctrlsW ); + controlarrayfreeW( clientctrlsW ); + +#endif + return ret; +} + +ULONG ldap_rename_extW( WLDAP32_LDAP *ld, PWCHAR dn, PWCHAR newrdn, + PWCHAR newparent, INT delete, PLDAPControlW *serverctrls, + PLDAPControlW *clientctrls, ULONG *message ) +{ + ULONG ret = LDAP_NOT_SUPPORTED; +#ifdef HAVE_LDAP + char *dnU = NULL, *newrdnU = NULL, *newparentU = NULL; + LDAPControl **serverctrlsU = NULL, **clientctrlsU = NULL; + + ret = WLDAP32_LDAP_NO_MEMORY; + + TRACE( "(%p, %s, %s, %s, 0x%02x, %p, %p, %p)\n", ld, debugstr_w(dn), + debugstr_w(newrdn), debugstr_w(newparent), delete, + serverctrls, clientctrls, message ); + + if (!ld || !message) return WLDAP32_LDAP_PARAM_ERROR; + + if (dn) { + dnU = strWtoU( dn ); + if (!dnU) goto exit; + } + if (newrdn) { + newrdnU = strWtoU( newrdn ); + if (!newrdnU) goto exit; + } + if (newparent) { + newparentU = strWtoU( newparent ); + if (!newparentU) goto exit; + } + if (serverctrls) { + serverctrlsU = controlarrayWtoU( serverctrls ); + if (!serverctrlsU) goto exit; + } + if (clientctrls) { + clientctrlsU = controlarrayWtoU( clientctrls ); + if (!clientctrlsU) goto exit; + } + + ret = ldap_rename( ld, dn ? dnU : "", newrdn ? newrdnU : "", newparentU, + delete, serverctrlsU, clientctrlsU, (int *)message ); + +exit: + strfreeU( dnU ); + strfreeU( newrdnU ); + strfreeU( newparentU ); + controlarrayfreeU( serverctrlsU ); + controlarrayfreeU( clientctrlsU ); + +#endif + return ret; +} + +ULONG ldap_rename_ext_sA( WLDAP32_LDAP *ld, PCHAR dn, PCHAR newrdn, + PCHAR newparent, INT delete, PLDAPControlA *serverctrls, + PLDAPControlA *clientctrls ) +{ + ULONG ret = LDAP_NOT_SUPPORTED; +#ifdef HAVE_LDAP + WCHAR *dnW = NULL, *newrdnW = NULL, *newparentW = NULL; + LDAPControlW **serverctrlsW = NULL, **clientctrlsW = NULL; + + ret = WLDAP32_LDAP_NO_MEMORY; + + TRACE( "(%p, %s, %s, %s, 0x%02x, %p, %p)\n", ld, debugstr_a(dn), + debugstr_a(newrdn), debugstr_a(newparent), delete, + serverctrls, clientctrls ); + + if (!ld) return WLDAP32_LDAP_PARAM_ERROR; + + if (dn) { + dnW = strAtoW( dn ); + if (!dnW) goto exit; + } + if (newrdn) { + newrdnW = strAtoW( newrdn ); + if (!newrdnW) goto exit; + } + if (newparent) { + newparentW = strAtoW( newparent ); + if (!newparentW) goto exit; + } + if (serverctrls) { + serverctrlsW = controlarrayAtoW( serverctrls ); + if (!serverctrlsW) goto exit; + } + if (clientctrls) { + clientctrlsW = controlarrayAtoW( clientctrls ); + if (!clientctrlsW) goto exit; + } + + ret = ldap_rename_ext_sW( ld, dnW, newrdnW, newparentW, delete, + serverctrlsW, clientctrlsW ); + +exit: + strfreeW( dnW ); + strfreeW( newrdnW ); + strfreeW( newparentW ); + controlarrayfreeW( serverctrlsW ); + controlarrayfreeW( clientctrlsW ); + +#endif + return ret; +} + +ULONG ldap_rename_ext_sW( WLDAP32_LDAP *ld, PWCHAR dn, PWCHAR newrdn, + PWCHAR newparent, INT delete, PLDAPControlW *serverctrls, + PLDAPControlW *clientctrls ) +{ + ULONG ret = LDAP_NOT_SUPPORTED; +#ifdef HAVE_LDAP + char *dnU = NULL, *newrdnU = NULL, *newparentU = NULL; + LDAPControl **serverctrlsU = NULL, **clientctrlsU = NULL; + + ret = WLDAP32_LDAP_NO_MEMORY; + + TRACE( "(%p, %s, %s, %s, 0x%02x, %p, %p)\n", ld, debugstr_w(dn), + debugstr_w(newrdn), debugstr_w(newparent), delete, + serverctrls, clientctrls ); + + if (!ld) return WLDAP32_LDAP_PARAM_ERROR; + + if (dn) { + dnU = strWtoU( dn ); + if (!dnU) goto exit; + } + if (newrdn) { + newrdnU = strWtoU( newrdn ); + if (!newrdnU) goto exit; + } + if (newparent) { + newparentU = strWtoU( newparent ); + if (!newparentU) goto exit; + } + if (serverctrls) { + serverctrlsU = controlarrayWtoU( serverctrls ); + if (!serverctrlsU) goto exit; + } + if (clientctrls) { + clientctrlsU = controlarrayWtoU( clientctrls ); + if (!clientctrlsU) goto exit; + } + + ret = ldap_rename_s( ld, dn ? dnU : "", newrdn ? newrdnU : "", newparentU, + delete, serverctrlsU, clientctrlsU ); + +exit: + strfreeU( dnU ); + strfreeU( newrdnU ); + strfreeU( newparentU ); + controlarrayfreeU( serverctrlsU ); + controlarrayfreeU( clientctrlsU ); + +#endif + return ret; +} diff --git a/dlls/wldap32/winldap_private.h b/dlls/wldap32/winldap_private.h index 97730df032e..a475126c46a 100644 --- a/dlls/wldap32/winldap_private.h +++ b/dlls/wldap32/winldap_private.h @@ -293,6 +293,10 @@ ULONG ldap_modrdn_sW(WLDAP32_LDAP*,PWCHAR,PWCHAR); WLDAP32_LDAP *ldap_openA(PCHAR,ULONG); WLDAP32_LDAP *ldap_openW(PWCHAR,ULONG); void WLDAP32_ldap_perror(WLDAP32_LDAP*,const PCHAR); +ULONG ldap_rename_extA(WLDAP32_LDAP*,PCHAR,PCHAR,PCHAR,INT,PLDAPControlA*,PLDAPControlA*,ULONG*); +ULONG ldap_rename_extW(WLDAP32_LDAP*,PWCHAR,PWCHAR,PWCHAR,INT,PLDAPControlW*,PLDAPControlW*,ULONG*); +ULONG ldap_rename_ext_sA(WLDAP32_LDAP*,PCHAR,PCHAR,PCHAR,INT,PLDAPControlA*,PLDAPControlA*); +ULONG ldap_rename_ext_sW(WLDAP32_LDAP*,PWCHAR,PWCHAR,PWCHAR,INT,PLDAPControlW*,PLDAPControlW*); ULONG WLDAP32_ldap_result(WLDAP32_LDAP*,ULONG,ULONG,struct l_timeval*,WLDAP32_LDAPMessage**); ULONG WLDAP32_ldap_result2error(WLDAP32_LDAP*,WLDAP32_LDAPMessage*,ULONG); ULONG ldap_sasl_bindA(WLDAP32_LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,int*); diff --git a/dlls/wldap32/wldap32.spec b/dlls/wldap32/wldap32.spec index 1ef9c5ff4dd..3263538c362 100644 --- a/dlls/wldap32/wldap32.spec +++ b/dlls/wldap32/wldap32.spec @@ -185,12 +185,12 @@ @ stub ldap_parse_vlv_controlA @ stub ldap_parse_vlv_controlW @ cdecl ldap_perror(ptr ptr) WLDAP32_ldap_perror -@ stub ldap_rename_ext -@ stub ldap_rename_extA -@ stub ldap_rename_extW -@ stub ldap_rename_ext_s -@ stub ldap_rename_ext_sA -@ stub ldap_rename_ext_sW +@ cdecl ldap_rename_ext(ptr str str str long ptr ptr ptr) ldap_rename_extA +@ cdecl ldap_rename_extA(ptr str str str long ptr ptr ptr) +@ cdecl ldap_rename_extW(ptr wstr wstr wstr long ptr ptr ptr) +@ cdecl ldap_rename_ext_s(ptr str str str long ptr ptr) ldap_rename_ext_sA +@ cdecl ldap_rename_ext_sA(ptr str str str long ptr ptr) +@ cdecl ldap_rename_ext_sW(ptr wstr wstr wstr long ptr ptr) @ cdecl ldap_result(ptr long long ptr ptr) WLDAP32_ldap_result @ cdecl ldap_result2error(ptr ptr long) WLDAP32_ldap_result2error @ cdecl ldap_sasl_bindA(ptr str str ptr ptr ptr ptr)