Rob Shearman : secur32: NTLM's AcquireCredentialHandleA/
W should accept domains and usernames with lengths of 0.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Mar 6 16:13:17 CST 2007
Module: wine
Branch: master
Commit: b814c45f007f46b5bc644684eda247fa07793a18
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b814c45f007f46b5bc644684eda247fa07793a18
Author: Rob Shearman <rob at codeweavers.com>
Date: Tue Mar 6 13:32:09 2007 +0000
secur32: NTLM's AcquireCredentialHandleA/W should accept domains and usernames with lengths of 0.
Add tests for these cases.
---
dlls/secur32/ntlm.c | 6 ----
dlls/secur32/tests/ntlm.c | 69 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 69 insertions(+), 6 deletions(-)
diff --git a/dlls/secur32/ntlm.c b/dlls/secur32/ntlm.c
index a75b4b8..5744830 100644
--- a/dlls/secur32/ntlm.c
+++ b/dlls/secur32/ntlm.c
@@ -163,12 +163,6 @@ static SECURITY_STATUS SEC_ENTRY ntlm_AcquireCredentialsHandleW(
PSEC_WINNT_AUTH_IDENTITY_W auth_data =
(PSEC_WINNT_AUTH_IDENTITY_W)pAuthData;
- if (!auth_data->UserLength || !auth_data->DomainLength)
- {
- ret = SEC_E_NO_CREDENTIALS;
- phCredential = NULL;
- break;
- }
/* Get username and domain from pAuthData */
username = HeapAlloc(GetProcessHeap(), 0,
(auth_data->UserLength + 1) * sizeof(SEC_WCHAR));
diff --git a/dlls/secur32/tests/ntlm.c b/dlls/secur32/tests/ntlm.c
index 6d96874..4191bb0 100644
--- a/dlls/secur32/tests/ntlm.c
+++ b/dlls/secur32/tests/ntlm.c
@@ -1116,6 +1116,74 @@ end:
HeapFree(GetProcessHeap(), 0, complex_data[3].pvBuffer);
}
+static void testAcquireCredentialsHandle(void)
+{
+ CredHandle cred;
+ TimeStamp ttl;
+ static char test_user[] = "testuser",
+ workgroup[] = "WORKGROUP",
+ test_pass[] = "testpass",
+ sec_pkg_name[] = "NTLM";
+ SECURITY_STATUS ret;
+ SEC_WINNT_AUTH_IDENTITY id;
+ PSecPkgInfo pkg_info = NULL;
+
+ if(pQuerySecurityPackageInfoA(sec_pkg_name, &pkg_info) != SEC_E_OK)
+ {
+ skip("NTLM package not installed, skipping test\n");
+ return;
+ }
+ pFreeContextBuffer(pkg_info);
+
+ id.User = (unsigned char*) test_user;
+ id.UserLength = strlen((char *) id.User);
+ id.Domain = (unsigned char *) workgroup;
+ id.DomainLength = strlen((char *) id.Domain);
+ id.Password = (unsigned char*) test_pass;
+ id.PasswordLength = strlen((char *) id.Password);
+ id.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
+
+ ret = pAcquireCredentialsHandleA(NULL, sec_pkg_name, SECPKG_CRED_OUTBOUND,
+ NULL, &id, NULL, NULL, &cred, &ttl);
+ ok(ret == SEC_E_OK, "AcquireCredentialsHande() returned %s\n",
+ getSecError(ret));
+ pFreeCredentialsHandle(&cred);
+
+ id.DomainLength = 0;
+ ret = pAcquireCredentialsHandleA(NULL, sec_pkg_name, SECPKG_CRED_OUTBOUND,
+ NULL, &id, NULL, NULL, &cred, &ttl);
+ ok(ret == SEC_E_OK, "AcquireCredentialsHande() returned %s\n",
+ getSecError(ret));
+ pFreeCredentialsHandle(&cred);
+
+ id.Domain = NULL;
+ ret = pAcquireCredentialsHandleA(NULL, sec_pkg_name, SECPKG_CRED_OUTBOUND,
+ NULL, &id, NULL, NULL, &cred, &ttl);
+ ok(ret == SEC_E_OK, "AcquireCredentialsHande() returned %s\n",
+ getSecError(ret));
+ pFreeCredentialsHandle(&cred);
+
+ id.Domain = (unsigned char *) workgroup;
+ id.DomainLength = strlen((char *) id.Domain);
+ id.UserLength = 0;
+ id.User = NULL;
+ ret = pAcquireCredentialsHandleA(NULL, sec_pkg_name, SECPKG_CRED_OUTBOUND,
+ NULL, &id, NULL, NULL, &cred, &ttl);
+ ok(ret == SEC_E_OK, "AcquireCredentialsHande() returned %s\n",
+ getSecError(ret));
+ pFreeCredentialsHandle(&cred);
+
+ id.User = (unsigned char*) test_user;
+ id.UserLength = strlen((char *) id.User);
+ id.Password = NULL;
+ id.PasswordLength = 0;
+ ret = pAcquireCredentialsHandleA(NULL, sec_pkg_name, SECPKG_CRED_OUTBOUND,
+ NULL, &id, NULL, NULL, &cred, &ttl);
+ ok(ret == SEC_E_OK, "AcquireCredentialsHande() returned %s\n",
+ getSecError(ret));
+ pFreeCredentialsHandle(&cred);
+}
+
START_TEST(ntlm)
{
InitFunctionPtrs();
@@ -1125,6 +1193,7 @@ START_TEST(ntlm)
pInitializeSecurityContextA && pCompleteAuthToken &&
pQuerySecurityPackageInfoA)
{
+ testAcquireCredentialsHandle();
testInitializeSecurityContextFlags();
if(pAcceptSecurityContext)
{
More information about the wine-cvs
mailing list