Henri Verbeet : secur32: Skip schannel tests if schannel is unavailable.

Alexandre Julliard julliard at winehq.org
Tue Sep 23 09:28:32 CDT 2008


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

Author: Henri Verbeet <hverbeet at gmail.com>
Date:   Mon Sep 22 22:13:18 2008 +0200

secur32: Skip schannel tests if schannel is unavailable.

---

 dlls/secur32/tests/schannel.c |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/dlls/secur32/tests/schannel.c b/dlls/secur32/tests/schannel.c
index 9f7c2a8..a6032be 100644
--- a/dlls/secur32/tests/schannel.c
+++ b/dlls/secur32/tests/schannel.c
@@ -30,6 +30,8 @@
 static HMODULE secdll, crypt32dll;
 
 static ACQUIRE_CREDENTIALS_HANDLE_FN_A pAcquireCredentialsHandleA;
+static ENUMERATE_SECURITY_PACKAGES_FN_A pEnumerateSecurityPackagesA;
+static FREE_CONTEXT_BUFFER_FN pFreeContextBuffer;
 static FREE_CREDENTIALS_HANDLE_FN pFreeCredentialsHandle;
 static QUERY_CREDENTIALS_ATTRIBUTES_FN_A pQueryCredentialsAttributesA;
 
@@ -120,6 +122,8 @@ static void InitFunctionPtrs(void)
     if(secdll)
     {
         GET_PROC(secdll, AcquireCredentialsHandleA);
+        GET_PROC(secdll, EnumerateSecurityPackagesA);
+        GET_PROC(secdll, FreeContextBuffer);
         GET_PROC(secdll, FreeCredentialsHandle);
         GET_PROC(secdll, QueryCredentialsAttributesA);
     }
@@ -150,6 +154,9 @@ static void test_strength(PCredHandle handle)
 
 static void testAcquireSecurityContext(void)
 {
+    BOOL has_schannel = FALSE;
+    SecPkgInfoA *package_info;
+    ULONG i;
     SECURITY_STATUS st;
     CredHandle cred;
     TimeStamp exp;
@@ -163,12 +170,31 @@ static void testAcquireSecurityContext(void)
     CRYPT_KEY_PROV_INFO keyProvInfo;
 
     if (!pAcquireCredentialsHandleA || !pCertCreateCertificateContext ||
+        !pEnumerateSecurityPackagesA || !pFreeContextBuffer ||
         !pFreeCredentialsHandle || !pCryptAcquireContextW)
     {
         skip("Needed functions are not available\n");
         return;
     }
 
+    if (SUCCEEDED(pEnumerateSecurityPackagesA(&i, &package_info)))
+    {
+        while(i--)
+        {
+            if (!strcmp(package_info[i].Name, unisp_name_a))
+            {
+                has_schannel = TRUE;
+                break;
+            }
+        }
+        pFreeContextBuffer(package_info);
+    }
+    if (!has_schannel)
+    {
+        skip("Schannel not available\n");
+        return;
+    }
+
     lstrcpyW(ms_def_prov_w, MS_DEF_PROV_W);
 
     keyProvInfo.pwszContainerName = cspNameW;




More information about the wine-cvs mailing list