Alistair Leslie-Hughes : secur32/tests: Add AcquireCredentialsHandleW tests.
Alexandre Julliard
julliard at winehq.org
Thu May 26 10:54:45 CDT 2016
Module: wine
Branch: master
Commit: ee7bc087fd802cb5fc7a8a2703a0d4c4ba72e617
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ee7bc087fd802cb5fc7a8a2703a0d4c4ba72e617
Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Thu May 26 10:45:35 2016 +0000
secur32/tests: Add AcquireCredentialsHandleW tests.
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/secur32/tests/ntlm.c | 119 ++++++++++++++++++++++++++++++++++++++--------
1 file changed, 100 insertions(+), 19 deletions(-)
diff --git a/dlls/secur32/tests/ntlm.c b/dlls/secur32/tests/ntlm.c
index 4147ac7..3b661c1 100644
--- a/dlls/secur32/tests/ntlm.c
+++ b/dlls/secur32/tests/ntlm.c
@@ -42,6 +42,8 @@ static SECURITY_STATUS (SEC_ENTRY * pFreeContextBuffer)(PVOID pv);
static SECURITY_STATUS (SEC_ENTRY * pQuerySecurityPackageInfoA)(SEC_CHAR*, PSecPkgInfoA*);
static SECURITY_STATUS (SEC_ENTRY * pAcquireCredentialsHandleA)(SEC_CHAR*, SEC_CHAR*,
ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID, PCredHandle, PTimeStamp);
+static SECURITY_STATUS (SEC_ENTRY * pAcquireCredentialsHandleW)(SEC_CHAR*, SEC_WCHAR*,
+ ULONG, PLUID, void*, SEC_GET_KEY_FN, void*, CredHandle*, TimeStamp*);
static SECURITY_STATUS (SEC_ENTRY * pInitializeSecurityContextA)(PCredHandle, PCtxtHandle,
SEC_CHAR*, ULONG, ULONG, ULONG, PSecBufferDesc, ULONG,
PCtxtHandle, PSecBufferDesc, PULONG, PTimeStamp);
@@ -149,6 +151,11 @@ static BYTE crypt_message_server2[] =
{0xc8, 0xf2, 0x39, 0x7f, 0x0c, 0xaf, 0xf5, 0x5d, 0xef, 0x0c,
0x8b, 0x5f, 0x82};
+static char test_user[] = "testuser",
+ workgroup[] = "WORKGROUP",
+ test_pass[] = "testpass",
+ sec_pkg_name[] = "NTLM";
+
static void InitFunctionPtrs(void)
{
secdll = LoadLibraryA("secur32.dll");
@@ -160,6 +167,7 @@ static void InitFunctionPtrs(void)
pFreeContextBuffer = (PVOID)GetProcAddress(secdll, "FreeContextBuffer");
pQuerySecurityPackageInfoA = (PVOID)GetProcAddress(secdll, "QuerySecurityPackageInfoA");
pAcquireCredentialsHandleA = (PVOID)GetProcAddress(secdll, "AcquireCredentialsHandleA");
+ pAcquireCredentialsHandleW = (void*)GetProcAddress(secdll, "AcquireCredentialsHandleW");
pInitializeSecurityContextA = (PVOID)GetProcAddress(secdll, "InitializeSecurityContextA");
pCompleteAuthToken = (PVOID)GetProcAddress(secdll, "CompleteAuthToken");
pAcceptSecurityContext = (PVOID)GetProcAddress(secdll, "AcceptSecurityContext");
@@ -568,10 +576,6 @@ static void testInitializeSecurityContextFlags(void)
PSecPkgInfoA pkg_info = NULL;
SspiData client;
SEC_WINNT_AUTH_IDENTITY_A id;
- static char sec_pkg_name[] = "NTLM",
- test_user[] = "testuser",
- workgroup[] = "WORKGROUP",
- test_pass[] = "testpass";
ULONG req_attr, ctxt_attr;
TimeStamp ttl;
PBYTE packet;
@@ -793,10 +797,6 @@ static void testAuth(ULONG data_rep, BOOL fake)
SspiData client, server;
SEC_WINNT_AUTH_IDENTITY_A id;
SecPkgContext_Sizes ctxt_sizes;
- static char sec_pkg_name[] = "NTLM",
- test_user[] = "testuser",
- workgroup[] = "WORKGROUP",
- test_pass[] = "testpass";
if(pQuerySecurityPackageInfoA( sec_pkg_name, &pkg_info)!= SEC_E_OK)
{
@@ -930,9 +930,6 @@ static void testSignSeal(void)
SecBuffer data[2], fake_data[2], complex_data[4];
ULONG qop = 0xdeadbeef;
SecPkgContext_Sizes ctxt_sizes;
- static char test_user[] = "testuser",
- workgroup[] = "WORKGROUP",
- test_pass[] = "testpass";
complex_data[1].pvBuffer = complex_data[3].pvBuffer = NULL;
@@ -1186,10 +1183,6 @@ static BOOL 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_A id;
PSecPkgInfoA pkg_info = NULL;
@@ -1251,12 +1244,98 @@ static BOOL testAcquireCredentialsHandle(void)
return TRUE;
}
+static void testAcquireCredentialsHandleW(void)
+{
+ CredHandle cred;
+ TimeStamp ttl;
+ static WCHAR sec_pkg_nameW[] = {'N','T','L','M',0 };
+ static WCHAR test_userW[] = {'t','e','s','t','u','s','e','r',0 };
+ static WCHAR workgroupW[] = {'W','O','R','K','G','R','O','U','P',0};
+ static WCHAR test_passW[] = {'t','e','s','t','p','a','s','s',0};
+ SECURITY_STATUS ret;
+ SEC_WINNT_AUTH_IDENTITY_A idA;
+ SEC_WINNT_AUTH_IDENTITY_W id;
+ PSecPkgInfoA pkg_info = NULL;
+
+ if(!pAcquireCredentialsHandleW)
+ {
+ win_skip("AcquireCredentialsHandleW not available\n");
+ return;
+ }
+
+ if(pQuerySecurityPackageInfoA(sec_pkg_name, &pkg_info) != SEC_E_OK)
+ {
+ ok(0, "NTLM package not installed, skipping test\n");
+ return;
+ }
+ pFreeContextBuffer(pkg_info);
+
+ id.User = test_userW;
+ id.UserLength = lstrlenW(test_userW);
+ id.Domain = workgroupW;
+ id.DomainLength = lstrlenW(workgroupW);
+ id.Password = test_passW;
+ id.PasswordLength = lstrlenW(test_passW);
+ id.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
+
+ ret = pAcquireCredentialsHandleW(NULL, sec_pkg_nameW, SECPKG_CRED_OUTBOUND,
+ NULL, &id, NULL, NULL, &cred, &ttl);
+ ok(ret == SEC_E_OK, "AcquireCredentialsHandeW() returned %s\n",
+ getSecError(ret));
+ pFreeCredentialsHandle(&cred);
+
+ id.DomainLength = 0;
+ ret = pAcquireCredentialsHandleW(NULL, sec_pkg_nameW, SECPKG_CRED_OUTBOUND,
+ NULL, &id, NULL, NULL, &cred, &ttl);
+ ok(ret == SEC_E_OK, "AcquireCredentialsHandeW() returned %s\n",
+ getSecError(ret));
+ pFreeCredentialsHandle(&cred);
+
+ id.Domain = NULL;
+ ret = pAcquireCredentialsHandleW(NULL, sec_pkg_nameW, SECPKG_CRED_OUTBOUND,
+ NULL, &id, NULL, NULL, &cred, &ttl);
+ ok(ret == SEC_E_OK, "AcquireCredentialsHandeW() returned %s\n",
+ getSecError(ret));
+ pFreeCredentialsHandle(&cred);
+
+ id.Domain = workgroupW;
+ id.DomainLength = lstrlenW(workgroupW);
+ id.UserLength = 0;
+ id.User = NULL;
+ ret = pAcquireCredentialsHandleW(NULL, sec_pkg_nameW, SECPKG_CRED_OUTBOUND,
+ NULL, &id, NULL, NULL, &cred, &ttl);
+ ok(ret == SEC_E_OK, "AcquireCredentialsHandeW() returned %s\n",
+ getSecError(ret));
+ pFreeCredentialsHandle(&cred);
+
+ id.User = test_userW;
+ id.UserLength = lstrlenW(test_userW);
+ id.Password = test_passW; /* NULL string causes a crash. */
+ id.PasswordLength = 0;
+ ret = pAcquireCredentialsHandleW(NULL, sec_pkg_nameW, SECPKG_CRED_OUTBOUND,
+ NULL, &id, NULL, NULL, &cred, &ttl);
+ ok(ret == SEC_E_OK, "AcquireCredentialsHandeW() returned %s\n",
+ getSecError(ret));
+ pFreeCredentialsHandle(&cred);
+
+ /* Test using the ASCII structure. */
+ idA.User = (unsigned char*) test_user;
+ idA.UserLength = strlen(test_user);
+ idA.Domain = (unsigned char *) workgroup;
+ idA.DomainLength = strlen(workgroup);
+ idA.Password = (unsigned char*) test_pass;
+ idA.PasswordLength = strlen(test_pass);
+ idA.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
+
+ ret = pAcquireCredentialsHandleW(NULL, sec_pkg_nameW, SECPKG_CRED_OUTBOUND,
+ NULL, &idA, NULL, NULL, &cred, &ttl);
+ ok(ret == SEC_E_OK, "AcquireCredentialsHandeW() returned %s\n",
+ getSecError(ret));
+ pFreeCredentialsHandle(&cred);
+}
+
static void test_cred_multiple_use(void)
{
- static char test_user[] = "testuser",
- workgroup[] = "WORKGROUP",
- test_pass[] = "testpass",
- sec_pkg_name[] = "NTLM";
SECURITY_STATUS ret;
SEC_WINNT_AUTH_IDENTITY_A id;
PSecPkgInfoA pkg_info = NULL;
@@ -1373,6 +1452,8 @@ START_TEST(ntlm)
pAcquireCredentialsHandleA && pInitializeSecurityContextA &&
pCompleteAuthToken && pQuerySecurityPackageInfoA)
{
+ testAcquireCredentialsHandleW();
+
if(!testAcquireCredentialsHandle())
goto cleanup;
testInitializeSecurityContextFlags();
More information about the wine-cvs
mailing list