secur32: NTLM's AcquireCredentialHandleA/W should accept domains and usernames with lengths of 0.
Add tests for these cases.
This commit is contained in:
parent
d9229bd1c5
commit
b814c45f00
|
@ -163,12 +163,6 @@ static SECURITY_STATUS SEC_ENTRY ntlm_AcquireCredentialsHandleW(
|
||||||
PSEC_WINNT_AUTH_IDENTITY_W auth_data =
|
PSEC_WINNT_AUTH_IDENTITY_W auth_data =
|
||||||
(PSEC_WINNT_AUTH_IDENTITY_W)pAuthData;
|
(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 */
|
/* Get username and domain from pAuthData */
|
||||||
username = HeapAlloc(GetProcessHeap(), 0,
|
username = HeapAlloc(GetProcessHeap(), 0,
|
||||||
(auth_data->UserLength + 1) * sizeof(SEC_WCHAR));
|
(auth_data->UserLength + 1) * sizeof(SEC_WCHAR));
|
||||||
|
|
|
@ -1116,6 +1116,74 @@ end:
|
||||||
HeapFree(GetProcessHeap(), 0, complex_data[3].pvBuffer);
|
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)
|
START_TEST(ntlm)
|
||||||
{
|
{
|
||||||
InitFunctionPtrs();
|
InitFunctionPtrs();
|
||||||
|
@ -1125,6 +1193,7 @@ START_TEST(ntlm)
|
||||||
pInitializeSecurityContextA && pCompleteAuthToken &&
|
pInitializeSecurityContextA && pCompleteAuthToken &&
|
||||||
pQuerySecurityPackageInfoA)
|
pQuerySecurityPackageInfoA)
|
||||||
{
|
{
|
||||||
|
testAcquireCredentialsHandle();
|
||||||
testInitializeSecurityContextFlags();
|
testInitializeSecurityContextFlags();
|
||||||
if(pAcceptSecurityContext)
|
if(pAcceptSecurityContext)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue