Alexandre Julliard : wldap32: Move the SASL callback to the Unix side.
Alexandre Julliard
julliard at winehq.org
Thu Nov 4 17:04:21 CDT 2021
Module: wine
Branch: master
Commit: 449fae545c915f04c20cd3b6830e077ada8df3f2
URL: https://source.winehq.org/git/wine.git/?a=commit;h=449fae545c915f04c20cd3b6830e077ada8df3f2
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Nov 3 12:10:00 2021 +0100
wldap32: Move the SASL callback to the Unix side.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/wldap32/bind.c | 32 --------------------------------
dlls/wldap32/libldap.c | 33 ++++++++++++++++++++++++++++-----
dlls/wldap32/libldap.h | 30 ++++++++----------------------
dlls/wldap32/main.c | 6 +-----
4 files changed, 37 insertions(+), 64 deletions(-)
diff --git a/dlls/wldap32/bind.c b/dlls/wldap32/bind.c
index d45ed5d60e0..837612bf75f 100644
--- a/dlls/wldap32/bind.c
+++ b/dlls/wldap32/bind.c
@@ -138,38 +138,6 @@ exit:
return ret;
}
-int CDECL sasl_interact_cb( void *ld, unsigned flags, void *defaults, void *interact )
-{
- SEC_WINNT_AUTH_IDENTITY_A *id = defaults;
- struct sasl_interactU *sasl = interact;
-
- TRACE( "(%p, 0x%08x, %p, %p)\n", ld, flags, defaults, interact );
-
- while (sasl->id != SASL_CB_LIST_END)
- {
- TRACE( "sasl->id = %04lx\n", sasl->id );
-
- if (sasl->id == SASL_CB_GETREALM)
- {
- sasl->result = id->Domain;
- sasl->len = id->DomainLength;
- }
- else if (sasl->id == SASL_CB_USER)
- {
- sasl->result = id->User;
- sasl->len = id->UserLength;
- }
- else if (sasl->id == SASL_CB_PASS)
- {
- sasl->result = id->Password;
- sasl->len = id->PasswordLength;
- }
- sasl++;
- }
-
- return LDAP_SUCCESS;
-}
-
/***********************************************************************
* ldap_bind_sW (WLDAP32.@)
*
diff --git a/dlls/wldap32/libldap.c b/dlls/wldap32/libldap.c
index 495ea609059..d568c2daaae 100644
--- a/dlls/wldap32/libldap.c
+++ b/dlls/wldap32/libldap.c
@@ -59,8 +59,6 @@ C_ASSERT( sizeof(struct timevalU) == sizeof(struct timeval) );
static LDAPMod *nullmods[] = { NULL };
-static const struct ldap_callbacks *callbacks;
-
static void * CDECL wrap_ber_alloc_t( int options )
{
return ber_alloc_t( options );
@@ -553,8 +551,34 @@ static int CDECL wrap_ldap_sasl_bind_s( void *ld, const char *dn, const char *me
static int wrap_sasl_interact( LDAP *ld, unsigned int flags, void *defaults, void *interact )
{
#ifdef HAVE_SASL_SASL_H
- C_ASSERT( sizeof(struct sasl_interactU) == sizeof(struct sasl_interact) );
- return callbacks->sasl_interact( ld, flags, defaults, interact );
+ struct sasl_interactive_bind_id *id = defaults;
+ struct sasl_interact *sasl = interact;
+
+ TRACE( "(%p, 0x%08x, %p, %p)\n", ld, flags, defaults, interact );
+
+ while (sasl->id != SASL_CB_LIST_END)
+ {
+ TRACE( "sasl->id = %04lx\n", sasl->id );
+
+ if (sasl->id == SASL_CB_GETREALM)
+ {
+ sasl->result = id->domain;
+ sasl->len = id->domain_len;
+ }
+ else if (sasl->id == SASL_CB_USER)
+ {
+ sasl->result = id->user;
+ sasl->len = id->user_len;
+ }
+ else if (sasl->id == SASL_CB_PASS)
+ {
+ sasl->result = id->password;
+ sasl->len = id->password_len;
+ }
+ sasl++;
+ }
+
+ return LDAP_SUCCESS;
#endif
return -1;
}
@@ -678,7 +702,6 @@ static const struct ldap_funcs funcs =
NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out )
{
if (reason != DLL_PROCESS_ATTACH) return STATUS_SUCCESS;
- callbacks = ptr_in;
*(const struct ldap_funcs **)ptr_out = &funcs;
return STATUS_SUCCESS;
}
diff --git a/dlls/wldap32/libldap.h b/dlls/wldap32/libldap.h
index d0c37ab498d..e9736fc757f 100644
--- a/dlls/wldap32/libldap.h
+++ b/dlls/wldap32/libldap.h
@@ -83,22 +83,15 @@ typedef struct timevalU
LONG_PTR tv_usec;
} LDAP_TIMEVALU;
-#ifndef SASL_CB_LIST_END
-#define SASL_CB_LIST_END 0
-#define SASL_CB_USER 0x4001
-#define SASL_CB_PASS 0x4004
-#define SASL_CB_GETREALM 0x4008
-#endif
-
-typedef struct sasl_interactU
+struct sasl_interactive_bind_id
{
- ULONG_PTR id;
- const char *challenge;
- const char *prompt;
- const char *defresult;
- const void *result;
- unsigned int len;
-} sasl_interact_tU;
+ unsigned char* user;
+ ULONG user_len;
+ unsigned char* domain;
+ ULONG domain_len;
+ unsigned char* password;
+ ULONG password_len;
+};
struct ldap_funcs
{
@@ -179,11 +172,4 @@ struct ldap_funcs
void (CDECL *fn_ldap_value_free_len)(struct bervalU **);
};
-extern int CDECL sasl_interact_cb(void *, unsigned int, void *, void *) DECLSPEC_HIDDEN;
-
-struct ldap_callbacks
-{
- int (CDECL *sasl_interact)(void *, unsigned int, void *, void *);
-};
-
extern const struct ldap_funcs *ldap_funcs;
diff --git a/dlls/wldap32/main.c b/dlls/wldap32/main.c
index c2fdf30f820..55a08c9bad5 100644
--- a/dlls/wldap32/main.c
+++ b/dlls/wldap32/main.c
@@ -31,10 +31,6 @@ HINSTANCE hwldap32;
WINE_DEFAULT_DEBUG_CHANNEL(wldap32);
const struct ldap_funcs *ldap_funcs = NULL;
-const struct ldap_callbacks ldap_callbacks =
-{
- sasl_interact_cb
-};
BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
{
@@ -45,7 +41,7 @@ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
case DLL_PROCESS_ATTACH:
hwldap32 = hinst;
DisableThreadLibraryCalls( hinst );
- if (__wine_init_unix_lib( hinst, reason, &ldap_callbacks, &ldap_funcs ))
+ if (__wine_init_unix_lib( hinst, reason, NULL, &ldap_funcs ))
ERR( "No libldap support, expect problems\n" );
break;
}
More information about the wine-cvs
mailing list