Hans Leidekker : advapi32: Only require a domain in the username for CRED_PERSIST_ENTERPRISE credentials .

Alexandre Julliard julliard at winehq.org
Thu Oct 18 14:33:12 CDT 2012


Module: wine
Branch: master
Commit: 860c335b2297d36830a85d4d659d5a8358a445ea
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=860c335b2297d36830a85d4d659d5a8358a445ea

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Thu Oct 18 15:10:05 2012 +0200

advapi32: Only require a domain in the username for CRED_PERSIST_ENTERPRISE credentials.

---

 dlls/advapi32/cred.c       |    8 +++++++-
 dlls/advapi32/tests/cred.c |   41 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 1 deletions(-)

diff --git a/dlls/advapi32/cred.c b/dlls/advapi32/cred.c
index 98c4ba7..b2597b6 100644
--- a/dlls/advapi32/cred.c
+++ b/dlls/advapi32/cred.c
@@ -1804,13 +1804,19 @@ BOOL WINAPI CredWriteW(PCREDENTIALW Credential, DWORD Flags)
         return FALSE;
     }
 
+    TRACE("Credential->Flags = 0x%08x\n", Credential->Flags);
+    TRACE("Credential->Type = %u\n", Credential->Type);
     TRACE("Credential->TargetName = %s\n", debugstr_w(Credential->TargetName));
+    TRACE("Credential->Comment = %s\n", debugstr_w(Credential->Comment));
+    TRACE("Credential->Persist = %u\n", Credential->Persist);
+    TRACE("Credential->TargetAlias = %s\n", debugstr_w(Credential->TargetAlias));
     TRACE("Credential->UserName = %s\n", debugstr_w(Credential->UserName));
 
     if (Credential->Type == CRED_TYPE_DOMAIN_PASSWORD)
     {
         if (!Credential->UserName ||
-            (!strchrW(Credential->UserName, '\\') && !strchrW(Credential->UserName, '@')))
+            (Credential->Persist == CRED_PERSIST_ENTERPRISE &&
+            (!strchrW(Credential->UserName, '\\') && !strchrW(Credential->UserName, '@'))))
         {
             ERR("bad username %s\n", debugstr_w(Credential->UserName));
             SetLastError(ERROR_BAD_USERNAME);
diff --git a/dlls/advapi32/tests/cred.c b/dlls/advapi32/tests/cred.c
index 5762f1b..3d37a3c 100644
--- a/dlls/advapi32/tests/cred.c
+++ b/dlls/advapi32/tests/cred.c
@@ -121,6 +121,47 @@ static void test_CredWriteA(void)
     ok(!ret && GetLastError() == ERROR_BAD_USERNAME,
         "CredWriteA with NULL username should have failed with ERROR_BAD_USERNAME instead of %d\n",
         GetLastError());
+
+    new_cred.UserName = (char *)"winetest";
+    new_cred.Persist = CRED_PERSIST_LOCAL_MACHINE;
+    SetLastError(0xdeadbeef);
+    ret = pCredWriteA(&new_cred, 0);
+    ok(ret || broken(!ret), "CredWriteA failed with error %u\n", GetLastError());
+    if (ret)
+    {
+        ret = pCredDeleteA(TEST_TARGET_NAME, CRED_TYPE_DOMAIN_PASSWORD, 0);
+        ok(ret, "CredDeleteA failed with error %u\n", GetLastError());
+    }
+    new_cred.Type = CRED_TYPE_GENERIC;
+    SetLastError(0xdeadbeef);
+    ret = pCredWriteA(&new_cred, 0);
+    ok(ret || broken(!ret), "CredWriteA failed with error %u\n", GetLastError());
+    if  (ret)
+    {
+        ret = pCredDeleteA(TEST_TARGET_NAME, CRED_TYPE_GENERIC, 0);
+        ok(ret, "CredDeleteA failed with error %u\n", GetLastError());
+    }
+    new_cred.Persist = CRED_PERSIST_SESSION;
+    ret = pCredWriteA(&new_cred, 0);
+    ok(ret, "CredWriteA failed with error %u\n", GetLastError());
+
+    ret = pCredDeleteA(TEST_TARGET_NAME, CRED_TYPE_GENERIC, 0);
+    ok(ret, "CredDeleteA failed with error %u\n", GetLastError());
+
+    new_cred.Type = CRED_TYPE_DOMAIN_PASSWORD;
+    SetLastError(0xdeadbeef);
+    ret = pCredWriteA(&new_cred, 0);
+    ok(ret || broken(!ret), "CredWriteA failed with error %u\n", GetLastError());
+    if (ret)
+    {
+        ret = pCredDeleteA(TEST_TARGET_NAME, CRED_TYPE_DOMAIN_PASSWORD, 0);
+        ok(ret, "CredDeleteA failed with error %u\n", GetLastError());
+    }
+    new_cred.UserName = NULL;
+    SetLastError(0xdeadbeef);
+    ret = pCredWriteA(&new_cred, 0);
+    ok(!ret, "CredWriteA succeeded\n");
+    ok(GetLastError() == ERROR_BAD_USERNAME, "got %u\n", GetLastError());
 }
 
 static void test_CredDeleteA(void)




More information about the wine-cvs mailing list