Hans Leidekker : advapi32: Forward LogonUserA to LogonUserW.

Alexandre Julliard julliard at winehq.org
Fri Jan 10 14:44:56 CST 2014


Module: wine
Branch: stable
Commit: aba364a256d85e399d4a5e75922bc09693df5a47
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=aba364a256d85e399d4a5e75922bc09693df5a47

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Wed Nov 13 15:32:55 2013 +0100

advapi32: Forward LogonUserA to LogonUserW.

(cherry picked from commit 7519cddddbe602c57caa078b88396e5654d68c38)

---

 dlls/advapi32/advapi.c        |   19 +++++++++++++++++--
 dlls/advapi32/advapi32_misc.h |   12 ++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/dlls/advapi32/advapi.c b/dlls/advapi32/advapi.c
index 860c728..884b5d1 100644
--- a/dlls/advapi32/advapi.c
+++ b/dlls/advapi32/advapi.c
@@ -35,6 +35,8 @@
 #include "wine/unicode.h"
 #include "wine/debug.h"
 
+#include "advapi32_misc.h"
+
 WINE_DEFAULT_DEBUG_CHANNEL(advapi);
 
 /******************************************************************************
@@ -268,10 +270,23 @@ BOOL WINAPI InitiateSystemShutdownW( LPWSTR lpMachineName, LPWSTR lpMessage, DWO
 BOOL WINAPI LogonUserA( LPCSTR lpszUsername, LPCSTR lpszDomain, LPCSTR lpszPassword,
                         DWORD dwLogonType, DWORD dwLogonProvider, PHANDLE phToken )
 {
-    FIXME("%s %s %p 0x%08x 0x%08x %p - stub\n", debugstr_a(lpszUsername),
+    WCHAR *usernameW = NULL, *domainW = NULL, *passwordW = NULL;
+    BOOL ret = FALSE;
+
+    TRACE("%s %s %p 0x%08x 0x%08x %p\n", debugstr_a(lpszUsername),
           debugstr_a(lpszDomain), lpszPassword, dwLogonType, dwLogonProvider, phToken);
 
-    return TRUE;
+    if (lpszUsername && !(usernameW = strdupAW( lpszUsername ))) return FALSE;
+    if (lpszDomain && !(domainW = strdupAW( lpszUsername ))) goto done;
+    if (lpszPassword && !(passwordW = strdupAW( lpszPassword ))) goto done;
+
+    ret = LogonUserW( usernameW, domainW, passwordW, dwLogonType, dwLogonProvider, phToken );
+
+done:
+    heap_free( usernameW );
+    heap_free( domainW );
+    heap_free( passwordW );
+    return ret;
 }
 
 BOOL WINAPI LogonUserW( LPCWSTR lpszUsername, LPCWSTR lpszDomain, LPCWSTR lpszPassword,
diff --git a/dlls/advapi32/advapi32_misc.h b/dlls/advapi32/advapi32_misc.h
index ace73f1..9dd48b8 100644
--- a/dlls/advapi32/advapi32_misc.h
+++ b/dlls/advapi32/advapi32_misc.h
@@ -22,6 +22,7 @@
 
 #include "ntsecapi.h"
 #include "winsvc.h"
+#include "winnls.h"
 
 const char * debugstr_sid(PSID sid) DECLSPEC_HIDDEN;
 BOOL ADVAPI_IsLocalComputer(LPCWSTR ServerName) DECLSPEC_HIDDEN;
@@ -52,4 +53,15 @@ static inline BOOL heap_free( void *mem )
     return HeapFree( GetProcessHeap(), 0, mem );
 }
 
+static inline WCHAR *strdupAW( const char *src )
+{
+    WCHAR *dst = NULL;
+    if (src)
+    {
+        DWORD len = MultiByteToWideChar( CP_ACP, 0, src, -1, NULL, 0 );
+        if ((dst = heap_alloc( len * sizeof(WCHAR) ))) MultiByteToWideChar( CP_ACP, 0, src, -1, dst, len );
+    }
+    return dst;
+}
+
 #endif /* __WINE_ADVAPI32MISC_H */




More information about the wine-cvs mailing list