Signed-off-by: Hans Leidekker hans@codeweavers.com --- dlls/wldap32/libldap.c | 23 +++- dlls/wldap32/libldap.h | 6 + dlls/wldap32/modify.c | 275 +++++++++-------------------------------- 3 files changed, 82 insertions(+), 222 deletions(-)
diff --git a/dlls/wldap32/libldap.c b/dlls/wldap32/libldap.c index cf2c2b7e38c..333ecc741c2 100644 --- a/dlls/wldap32/libldap.c +++ b/dlls/wldap32/libldap.c @@ -52,7 +52,7 @@ C_ASSERT( sizeof(LDAPSortKeyU) == sizeof(LDAPSortKey) ); C_ASSERT( sizeof(LDAPVLVInfoU) == sizeof(LDAPVLVInfo) ); C_ASSERT( sizeof(struct timevalU) == sizeof(struct timeval) );
-static LDAPMod *nullattrs[] = { NULL }; +static LDAPMod *nullmods[] = { NULL };
static const struct ldap_callbacks *callbacks;
@@ -305,14 +305,14 @@ int CDECL wrap_ldap_add_ext( void *ld, const char *dn, LDAPModU **attrs, LDAPCon LDAPControlU **clientctrls, ULONG *msg ) { int dummy; - return ldap_add_ext( ld, dn ? dn : "", attrs ? (LDAPMod **)attrs : nullattrs, (LDAPControl **)serverctrls, + return ldap_add_ext( ld, dn ? dn : "", attrs ? (LDAPMod **)attrs : nullmods, (LDAPControl **)serverctrls, (LDAPControl **)clientctrls, msg ? (int *)msg : &dummy ); }
int CDECL wrap_ldap_add_ext_s( void *ld, const char *dn, LDAPModU **attrs, LDAPControlU **serverctrls, LDAPControlU **clientctrls ) { - return ldap_add_ext_s( ld, dn ? dn : "", attrs ? (LDAPMod **)attrs : nullattrs, (LDAPControl **)serverctrls, + return ldap_add_ext_s( ld, dn ? dn : "", attrs ? (LDAPMod **)attrs : nullmods, (LDAPControl **)serverctrls, (LDAPControl **)clientctrls ); }
@@ -429,6 +429,21 @@ void CDECL wrap_ldap_memvfree( void **ptr ) ldap_memvfree( ptr ); }
+int CDECL wrap_ldap_modify_ext( void *ld, const char *dn, LDAPModU **mods, LDAPControlU **serverctrls, + LDAPControlU **clientctrls, ULONG *msg ) +{ + int dummy; + return ldap_modify_ext( ld, dn ? dn : "", mods ? (LDAPMod **)mods : nullmods, (LDAPControl **)serverctrls, + (LDAPControl **)clientctrls, msg ? (int *)msg : &dummy ); +} + +int CDECL wrap_ldap_modify_ext_s( void *ld, const char *dn, LDAPModU **mods, LDAPControlU **serverctrls, + LDAPControlU **clientctrls ) +{ + return ldap_modify_ext_s( ld, dn ? dn : "", mods ? (LDAPMod **)mods : nullmods, (LDAPControl **)serverctrls, + (LDAPControl **)clientctrls ); +} + int CDECL wrap_ldap_msgfree( void *msg ) { return ldap_msgfree( msg ); @@ -569,6 +584,8 @@ static const struct ldap_funcs funcs = wrap_ldap_first_reference, wrap_ldap_memfree, wrap_ldap_memvfree, + wrap_ldap_modify_ext, + wrap_ldap_modify_ext_s, wrap_ldap_msgfree, wrap_ldap_next_attribute, wrap_ldap_next_entry, diff --git a/dlls/wldap32/libldap.h b/dlls/wldap32/libldap.h index 9f26704d053..b99855e9d34 100644 --- a/dlls/wldap32/libldap.h +++ b/dlls/wldap32/libldap.h @@ -125,6 +125,10 @@ extern void * CDECL wrap_ldap_first_entry(void *, void *) DECLSPEC_HIDDEN; extern void * CDECL wrap_ldap_first_reference(void *, void *) DECLSPEC_HIDDEN; extern void CDECL wrap_ldap_memfree(void *) DECLSPEC_HIDDEN; extern void CDECL wrap_ldap_memvfree(void **) DECLSPEC_HIDDEN; +extern int CDECL wrap_ldap_modify_ext(void *, const char *, LDAPModU **, LDAPControlU **, LDAPControlU **, + ULONG *) DECLSPEC_HIDDEN; +extern int CDECL wrap_ldap_modify_ext_s(void *, const char *, LDAPModU **, LDAPControlU **, + LDAPControlU **) DECLSPEC_HIDDEN; extern int CDECL wrap_ldap_msgfree(void *) DECLSPEC_HIDDEN; extern char * CDECL wrap_ldap_next_attribute(void *, void *, void *) DECLSPEC_HIDDEN; extern void * CDECL wrap_ldap_next_entry(void *, void *) DECLSPEC_HIDDEN; @@ -190,6 +194,8 @@ struct ldap_funcs void * (CDECL *ldap_first_reference)(void *, void *); void (CDECL *ldap_memfree)(void *); void (CDECL *ldap_memvfree)(void **); + int (CDECL *ldap_modify_ext)(void *, const char *, LDAPModU **, LDAPControlU **, LDAPControlU **, ULONG *); + int (CDECL *ldap_modify_ext_s)(void *, const char *, LDAPModU **, LDAPControlU **, LDAPControlU **); int (CDECL *ldap_msgfree)(void *); char * (CDECL *ldap_next_attribute)(void *, void *, void *); void * (CDECL *ldap_next_entry)(void *, void *); diff --git a/dlls/wldap32/modify.c b/dlls/wldap32/modify.c index 7269df9da9f..9655a0cf15e 100644 --- a/dlls/wldap32/modify.c +++ b/dlls/wldap32/modify.c @@ -18,62 +18,39 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "config.h" -#include "wine/port.h" - #include <stdarg.h> -#ifdef HAVE_LDAP_H -#include <ldap.h> -#endif - #include "windef.h" #include "winbase.h" #include "winnls.h"
-#include "winldap_private.h" -#include "wldap32.h" #include "wine/debug.h" +#include "winldap_private.h"
-#ifdef HAVE_LDAP WINE_DEFAULT_DEBUG_CHANNEL(wldap32);
-static LDAPMod *nullmods[] = { NULL }; -#endif - /*********************************************************************** * ldap_modifyA (WLDAP32.@) * * See ldap_modifyW. */ -ULONG CDECL ldap_modifyA( WLDAP32_LDAP *ld, PCHAR dn, LDAPModA *mods[] ) +ULONG CDECL ldap_modifyA( WLDAP32_LDAP *ld, char *dn, LDAPModA **mods ) { - ULONG ret = WLDAP32_LDAP_NOT_SUPPORTED; -#ifdef HAVE_LDAP + ULONG ret = WLDAP32_LDAP_NO_MEMORY; WCHAR *dnW = NULL; LDAPModW **modsW = NULL; - - ret = WLDAP32_LDAP_NO_MEMORY;
TRACE( "(%p, %s, %p)\n", ld, debugstr_a(dn), mods );
if (!ld) return ~0u;
- if (dn) { - dnW = strAtoW( dn ); - if (!dnW) goto exit; - } - if (mods) { - modsW = modarrayAtoW( mods ); - if (!modsW) goto exit; - } + if (dn && !(dnW = strAtoW( dn ))) goto exit; + if (mods && !(modsW = modarrayAtoW( mods ))) goto exit;
ret = ldap_modifyW( ld, dnW, modsW );
exit: strfreeW( dnW ); modarrayfreeW( modsW ); - -#endif return ret; }
@@ -97,43 +74,15 @@ exit: * the operation. Cancel the operation by calling ldap_abandon * with the message ID. */ -ULONG CDECL ldap_modifyW( WLDAP32_LDAP *ld, PWCHAR dn, LDAPModW *mods[] ) +ULONG CDECL ldap_modifyW( WLDAP32_LDAP *ld, WCHAR *dn, LDAPModW **mods ) { - ULONG ret = WLDAP32_LDAP_NOT_SUPPORTED; -#ifdef HAVE_LDAP - char *dnU = NULL; - LDAPMod **modsU = NULL; - int msg; - - ret = WLDAP32_LDAP_NO_MEMORY; + ULONG ret, msg;
TRACE( "(%p, %s, %p)\n", ld, debugstr_w(dn), mods );
- if (!ld) return WLDAP32_LDAP_PARAM_ERROR; - - if (dn) { - dnU = strWtoU( dn ); - if (!dnU) goto exit; - } - if (mods) { - modsU = modarrayWtoU( mods ); - if (!modsU) goto exit; - } - - ret = ldap_modify_ext( ld->ld, dn ? dnU : "", mods ? modsU : nullmods, - NULL, NULL, &msg ); - - if (ret == LDAP_SUCCESS) - ret = msg; - else - ret = ~0u; - -exit: - strfreeU( dnU ); - modarrayfreeU( modsU ); - -#endif - return ret; + ret = ldap_modify_extW( ld, dn, mods, NULL, NULL, &msg ); + if (ret == WLDAP32_LDAP_SUCCESS) return msg; + return ~0u; }
/*********************************************************************** @@ -141,38 +90,22 @@ exit: * * See ldap_modify_extW. */ -ULONG CDECL ldap_modify_extA( WLDAP32_LDAP *ld, PCHAR dn, LDAPModA *mods[], - PLDAPControlA *serverctrls, PLDAPControlA *clientctrls, ULONG *message ) +ULONG CDECL ldap_modify_extA( WLDAP32_LDAP *ld, char *dn, LDAPModA **mods, + LDAPControlA **serverctrls, LDAPControlA **clientctrls, ULONG *message ) { - ULONG ret = WLDAP32_LDAP_NOT_SUPPORTED; -#ifdef HAVE_LDAP + ULONG ret = WLDAP32_LDAP_NO_MEMORY; WCHAR *dnW = NULL; LDAPModW **modsW = NULL; LDAPControlW **serverctrlsW = NULL, **clientctrlsW = NULL;
- ret = WLDAP32_LDAP_NO_MEMORY; - - TRACE( "(%p, %s, %p, %p, %p, %p)\n", ld, debugstr_a(dn), mods, - serverctrls, clientctrls, message ); + TRACE( "(%p, %s, %p, %p, %p, %p)\n", ld, debugstr_a(dn), mods, serverctrls, clientctrls, message );
if (!ld) return ~0u;
- if (dn) { - dnW = strAtoW( dn ); - if (!dnW) goto exit; - } - if (mods) { - modsW = modarrayAtoW( mods ); - if (!modsW) goto exit; - } - if (serverctrls) { - serverctrlsW = controlarrayAtoW( serverctrls ); - if (!serverctrlsW) goto exit; - } - if (clientctrls) { - clientctrlsW = controlarrayAtoW( clientctrls ); - if (!clientctrlsW) goto exit; - } + if (dn && !(dnW = strAtoW( dn ))) goto exit; + if (mods && !(modsW = modarrayAtoW( mods ))) goto exit; + if (serverctrls && !(serverctrlsW = controlarrayAtoW( serverctrls ))) goto exit; + if (clientctrls && !(clientctrlsW = controlarrayAtoW( clientctrls ))) goto exit;
ret = ldap_modify_extW( ld, dnW, modsW, serverctrlsW, clientctrlsW, message );
@@ -181,8 +114,6 @@ exit: modarrayfreeW( modsW ); controlarrayfreeW( serverctrlsW ); controlarrayfreeW( clientctrlsW ); - -#endif return ret; }
@@ -209,50 +140,30 @@ exit: * the operation. The serverctrls and clientctrls parameters are * optional and should be set to NULL if not used. */ -ULONG CDECL ldap_modify_extW( WLDAP32_LDAP *ld, PWCHAR dn, LDAPModW *mods[], - PLDAPControlW *serverctrls, PLDAPControlW *clientctrls, ULONG *message ) +ULONG CDECL ldap_modify_extW( WLDAP32_LDAP *ld, WCHAR *dn, LDAPModW **mods, + LDAPControlW **serverctrls, LDAPControlW **clientctrls, ULONG *message ) { - ULONG ret = WLDAP32_LDAP_NOT_SUPPORTED; -#ifdef HAVE_LDAP + ULONG ret = WLDAP32_LDAP_NO_MEMORY; char *dnU = NULL; - LDAPMod **modsU = NULL; - LDAPControl **serverctrlsU = NULL, **clientctrlsU = NULL; - int dummy; + LDAPModU **modsU = NULL; + LDAPControlU **serverctrlsU = NULL, **clientctrlsU = NULL;
- ret = WLDAP32_LDAP_NO_MEMORY; - - TRACE( "(%p, %s, %p, %p, %p, %p)\n", ld, debugstr_w(dn), mods, - serverctrls, clientctrls, message ); + TRACE( "(%p, %s, %p, %p, %p, %p)\n", ld, debugstr_w(dn), mods, serverctrls, clientctrls, message );
if (!ld) return ~0u;
- if (dn) { - dnU = strWtoU( dn ); - if (!dnU) goto exit; - } - if (mods) { - modsU = modarrayWtoU( mods ); - if (!modsU) goto exit; - } - if (serverctrls) { - serverctrlsU = controlarrayWtoU( serverctrls ); - if (!serverctrlsU) goto exit; - } - if (clientctrls) { - clientctrlsU = controlarrayWtoU( clientctrls ); - if (!clientctrlsU) goto exit; - } - - ret = map_error( ldap_modify_ext( ld->ld, dn ? dnU : "", mods ? modsU : nullmods, serverctrlsU, - clientctrlsU, message ? (int *)message : &dummy )); + if (dn && !(dnU = strWtoU( dn ))) goto exit; + if (mods && !(modsU = modarrayWtoU( mods ))) goto exit; + if (serverctrls && !(serverctrlsU = controlarrayWtoU( serverctrls ))) goto exit; + if (clientctrls && !(clientctrlsU = controlarrayWtoU( clientctrls ))) goto exit; + + ret = map_error( ldap_funcs->ldap_modify_ext( ld->ld, dnU, modsU, serverctrlsU, clientctrlsU, message ) );
exit: strfreeU( dnU ); modarrayfreeU( modsU ); controlarrayfreeU( serverctrlsU ); controlarrayfreeU( clientctrlsU ); - -#endif return ret; }
@@ -261,38 +172,22 @@ exit: * * See ldap_modify_ext_sW. */ -ULONG CDECL ldap_modify_ext_sA( WLDAP32_LDAP *ld, PCHAR dn, LDAPModA *mods[], - PLDAPControlA *serverctrls, PLDAPControlA *clientctrls ) +ULONG CDECL ldap_modify_ext_sA( WLDAP32_LDAP *ld, char *dn, LDAPModA **mods, + LDAPControlA **serverctrls, LDAPControlA **clientctrls ) { - ULONG ret = WLDAP32_LDAP_NOT_SUPPORTED; -#ifdef HAVE_LDAP + ULONG ret = WLDAP32_LDAP_NO_MEMORY; WCHAR *dnW = NULL; LDAPModW **modsW = NULL; LDAPControlW **serverctrlsW = NULL, **clientctrlsW = NULL;
- ret = WLDAP32_LDAP_NO_MEMORY; - - TRACE( "(%p, %s, %p, %p, %p)\n", ld, debugstr_a(dn), mods, - serverctrls, clientctrls ); + TRACE( "(%p, %s, %p, %p, %p)\n", ld, debugstr_a(dn), mods, serverctrls, clientctrls );
if (!ld) return WLDAP32_LDAP_PARAM_ERROR;
- if (dn) { - dnW = strAtoW( dn ); - if (!dnW) goto exit; - } - if (mods) { - modsW = modarrayAtoW( mods ); - if (!modsW) goto exit; - } - if (serverctrls) { - serverctrlsW = controlarrayAtoW( serverctrls ); - if (!serverctrlsW) goto exit; - } - if (clientctrls) { - clientctrlsW = controlarrayAtoW( clientctrls ); - if (!clientctrlsW) goto exit; - } + if (dn && !(dnW = strAtoW( dn ))) goto exit; + if (mods && !(modsW = modarrayAtoW( mods ))) goto exit; + if (serverctrls && !(serverctrlsW = controlarrayAtoW( serverctrls ))) goto exit; + if (clientctrls && !(clientctrlsW = controlarrayAtoW( clientctrls ))) goto exit;
ret = ldap_modify_ext_sW( ld, dnW, modsW, serverctrlsW, clientctrlsW );
@@ -301,8 +196,6 @@ exit: modarrayfreeW( modsW ); controlarrayfreeW( serverctrlsW ); controlarrayfreeW( clientctrlsW ); - -#endif return ret; }
@@ -327,49 +220,30 @@ exit: * The serverctrls and clientctrls parameters are optional and * should be set to NULL if not used. */ -ULONG CDECL ldap_modify_ext_sW( WLDAP32_LDAP *ld, PWCHAR dn, LDAPModW *mods[], - PLDAPControlW *serverctrls, PLDAPControlW *clientctrls ) +ULONG CDECL ldap_modify_ext_sW( WLDAP32_LDAP *ld, WCHAR *dn, LDAPModW **mods, + LDAPControlW **serverctrls, LDAPControlW **clientctrls ) { - ULONG ret = WLDAP32_LDAP_NOT_SUPPORTED; -#ifdef HAVE_LDAP + ULONG ret = WLDAP32_LDAP_NO_MEMORY; char *dnU = NULL; - LDAPMod **modsU = NULL; - LDAPControl **serverctrlsU = NULL, **clientctrlsU = NULL; + LDAPModU **modsU = NULL; + LDAPControlU **serverctrlsU = NULL, **clientctrlsU = NULL;
- ret = WLDAP32_LDAP_NO_MEMORY; - - TRACE( "(%p, %s, %p, %p, %p)\n", ld, debugstr_w(dn), mods, - serverctrls, clientctrls ); + TRACE( "(%p, %s, %p, %p, %p)\n", ld, debugstr_w(dn), mods, serverctrls, clientctrls );
if (!ld) return WLDAP32_LDAP_PARAM_ERROR;
- if (dn) { - dnU = strWtoU( dn ); - if (!dnU) goto exit; - } - if (mods) { - modsU = modarrayWtoU( mods ); - if (!modsU) goto exit; - } - if (serverctrls) { - serverctrlsU = controlarrayWtoU( serverctrls ); - if (!serverctrlsU) goto exit; - } - if (clientctrls) { - clientctrlsU = controlarrayWtoU( clientctrls ); - if (!clientctrlsU) goto exit; - } - - ret = map_error( ldap_modify_ext_s( ld->ld, dn ? dnU : "", mods ? modsU : nullmods, - serverctrlsU, clientctrlsU )); + if (dn && !(dnU = strWtoU( dn ))) goto exit; + if (mods && !(modsU = modarrayWtoU( mods ))) goto exit; + if (serverctrls && !(serverctrlsU = controlarrayWtoU( serverctrls ))) goto exit; + if (clientctrls && !(clientctrlsU = controlarrayWtoU( clientctrls ))) goto exit; + + ret = map_error( ldap_funcs->ldap_modify_ext_s( ld->ld, dnU, modsU, serverctrlsU, clientctrlsU ) );
exit: strfreeU( dnU ); modarrayfreeU( modsU ); controlarrayfreeU( serverctrlsU ); controlarrayfreeU( clientctrlsU ); - -#endif return ret; }
@@ -378,35 +252,24 @@ exit: * * See ldap_modify_sW. */ -ULONG CDECL ldap_modify_sA( WLDAP32_LDAP *ld, PCHAR dn, LDAPModA *mods[] ) +ULONG CDECL ldap_modify_sA( WLDAP32_LDAP *ld, char *dn, LDAPModA **mods ) { - ULONG ret = WLDAP32_LDAP_NOT_SUPPORTED; -#ifdef HAVE_LDAP + ULONG ret = WLDAP32_LDAP_NO_MEMORY; WCHAR *dnW = NULL; LDAPModW **modsW = NULL;
- ret = WLDAP32_LDAP_NO_MEMORY; - TRACE( "(%p, %s, %p)\n", ld, debugstr_a(dn), mods );
if (!ld) return WLDAP32_LDAP_PARAM_ERROR;
- if (dn) { - dnW = strAtoW( dn ); - if (!dnW) goto exit; - } - if (mods) { - modsW = modarrayAtoW( mods ); - if (!modsW) goto exit; - } + if (dn && !(dnW = strAtoW( dn ))) goto exit; + if (mods && !(modsW = modarrayAtoW( mods ))) goto exit;
ret = ldap_modify_sW( ld, dnW, modsW );
exit: strfreeW( dnW ); modarrayfreeW( modsW ); - -#endif return ret; }
@@ -425,34 +288,8 @@ exit: * Success: LDAP_SUCCESS * Failure: An LDAP error code. */ -ULONG CDECL ldap_modify_sW( WLDAP32_LDAP *ld, PWCHAR dn, LDAPModW *mods[] ) +ULONG CDECL ldap_modify_sW( WLDAP32_LDAP *ld, WCHAR *dn, LDAPModW **mods ) { - ULONG ret = WLDAP32_LDAP_NOT_SUPPORTED; -#ifdef HAVE_LDAP - char *dnU = NULL; - LDAPMod **modsU = NULL; - - ret = WLDAP32_LDAP_NO_MEMORY; - TRACE( "(%p, %s, %p)\n", ld, debugstr_w(dn), mods ); - - if (!ld) return WLDAP32_LDAP_PARAM_ERROR; - - if (dn) { - dnU = strWtoU( dn ); - if (!dnU) goto exit; - } - if (mods) { - modsU = modarrayWtoU( mods ); - if (!modsU) goto exit; - } - - ret = map_error( ldap_modify_ext_s( ld->ld, dn ? dnU : "", mods ? modsU : nullmods, NULL, NULL )); - -exit: - strfreeU( dnU ); - modarrayfreeU( modsU ); - -#endif - return ret; + return ldap_modify_ext_sW( ld, dn, mods, NULL, NULL ); }