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