Hans Leidekker : secur32: Use a reserved flag for the cached credentials hack.

Alexandre Julliard julliard at winehq.org
Fri May 7 15:42:03 CDT 2021


Module: wine
Branch: master
Commit: 4a45679f1aa3af87a8cdd032c4f2b79248d398cc
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=4a45679f1aa3af87a8cdd032c4f2b79248d398cc

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Fri May  7 11:54:39 2021 +0200

secur32: Use a reserved flag for the cached credentials hack.

Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msv1_0/main.c       |  5 +++--
 dlls/secur32/negotiate.c | 22 +++++-----------------
 2 files changed, 8 insertions(+), 19 deletions(-)

diff --git a/dlls/msv1_0/main.c b/dlls/msv1_0/main.c
index f61e3c90efe..df9d0dd0f1a 100644
--- a/dlls/msv1_0/main.c
+++ b/dlls/msv1_0/main.c
@@ -159,6 +159,7 @@ static char *get_domain_arg( const WCHAR *domain, int domain_len )
     return ret;
 }
 
+#define WINE_NO_CACHED_CREDENTIALS 0x10000000
 static NTSTATUS NTAPI ntlm_SpAcquireCredentialsHandle( UNICODE_STRING *principal, ULONG cred_use, LUID *logon_id,
                                                        void *auth_data, void *get_key_fn, void *get_key_arg,
                                                        LSA_SEC_HANDLE *handle, TimeStamp *expiry )
@@ -171,7 +172,7 @@ static NTSTATUS NTAPI ntlm_SpAcquireCredentialsHandle( UNICODE_STRING *principal
     TRACE( "%s, 0x%08x, %p, %p, %p, %p, %p, %p\n", debugstr_us(principal), cred_use, logon_id, auth_data,
            get_key_fn, get_key_arg, cred, expiry );
 
-    switch (cred_use)
+    switch (cred_use & ~SECPKG_CRED_RESERVED)
     {
     case SECPKG_CRED_INBOUND:
         if (!(cred = malloc( sizeof(*cred) ))) return SEC_E_INSUFFICIENT_MEMORY;
@@ -194,7 +195,7 @@ static NTSTATUS NTAPI ntlm_SpAcquireCredentialsHandle( UNICODE_STRING *principal
         cred->domain_arg   = NULL;
         cred->password     = NULL;
         cred->password_len = 0;
-        cred->no_cached_credentials = 0;
+        cred->no_cached_credentials = (cred_use & WINE_NO_CACHED_CREDENTIALS);
 
         if ((id = auth_data))
         {
diff --git a/dlls/secur32/negotiate.c b/dlls/secur32/negotiate.c
index 6767790d09f..aeddbccd4f4 100644
--- a/dlls/secur32/negotiate.c
+++ b/dlls/secur32/negotiate.c
@@ -58,16 +58,7 @@ struct sec_handle
     SecHandle       handle_ntlm;
 };
 
-/* matches layout from msv1_0 */
-struct ntlm_cred
-{
-    int   mode;
-    char *username_arg;
-    char *domain_arg;
-    char *password;
-    int   password_len;
-    int   no_cached_credentials; /* don't try to use cached Samba credentials */
-};
+#define WINE_NO_CACHED_CREDENTIALS 0x10000000
 
 /***********************************************************************
  *              AcquireCredentialsHandleW
@@ -99,14 +90,11 @@ static SECURITY_STATUS SEC_ENTRY nego_AcquireCredentialsHandleW(
 
     if ((package = SECUR32_findPackageW( ntlmW )))
     {
+        ULONG cred_use = pAuthData ? fCredentialUse : fCredentialUse | WINE_NO_CACHED_CREDENTIALS;
+
         ret = package->provider->fnTableW.AcquireCredentialsHandleW( pszPrincipal, ntlmW,
-                fCredentialUse, pLogonID, pAuthData, pGetKeyFn, pGetKeyArgument, &cred->handle_ntlm, ptsExpiry );
-        if (ret == SEC_E_OK)
-        {
-            struct ntlm_cred *ntlm_cred = (struct ntlm_cred *)cred->handle_ntlm.dwLower;
-            ntlm_cred->no_cached_credentials = (pAuthData == NULL);
-            cred->ntlm = package->provider;
-        }
+                cred_use, pLogonID, pAuthData, pGetKeyFn, pGetKeyArgument, &cred->handle_ntlm, ptsExpiry );
+        if (ret == SEC_E_OK) cred->ntlm = package->provider;
     }
 
     if (cred->krb || cred->ntlm)




More information about the wine-cvs mailing list