[PATCH] crypt32/tests: Fix a registerOIDInfo() failure when missing elevated privileges.

Francois Gouget fgouget at codeweavers.com
Mon Dec 14 08:46:12 CST 2020


And only accept the access denied errors when running without elevated
privileges.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
 dlls/crypt32/tests/oid.c | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/dlls/crypt32/tests/oid.c b/dlls/crypt32/tests/oid.c
index ae03bba90e8..d135092a3ad 100644
--- a/dlls/crypt32/tests/oid.c
+++ b/dlls/crypt32/tests/oid.c
@@ -30,6 +30,22 @@
 #include "wine/test.h"
 
 
+static BOOL is_process_elevated(void)
+{
+    HANDLE token;
+    if (OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY, &token ))
+    {
+        TOKEN_ELEVATION_TYPE type;
+        DWORD size;
+        BOOL ret;
+
+        ret = GetTokenInformation( token, TokenElevationType, &type, sizeof(type), &size );
+        CloseHandle( token );
+        return (ret && type == TokenElevationTypeFull);
+    }
+    return FALSE;
+}
+
 static BOOL (WINAPI *pCryptEnumOIDInfo)(DWORD,DWORD,void*,PFN_CRYPT_ENUM_OID_INFO);
 
 
@@ -314,7 +330,7 @@ static void test_registerOIDFunction(void)
     SetLastError(0xdeadbeef);
     ret = CryptRegisterOIDFunction(X509_ASN_ENCODING, "CryptDllEncodeObject",
      "1.2.3.4.5.6.7.8.9.10", bogusDll, NULL);
-    if (!ret && GetLastError() == ERROR_ACCESS_DENIED)
+    if (!ret && GetLastError() == ERROR_ACCESS_DENIED && !is_process_elevated())
     {
         skip("Need admin rights\n");
         return;
@@ -393,7 +409,7 @@ static void test_registerDefaultOIDFunction(void)
     SetLastError(0xdeadbeef);
     ret = CryptRegisterDefaultOIDFunction(0, "CertDllOpenStoreProv", 0,
      bogusDll);
-    if (!ret && GetLastError() == ERROR_ACCESS_DENIED)
+    if (!ret && GetLastError() == ERROR_ACCESS_DENIED && !is_process_elevated())
     {
         skip("Need admin rights\n");
         return;
@@ -499,7 +515,7 @@ static void test_getDefaultOIDFunctionAddress(void)
     SetLastError(0xdeadbeef);
     ret = CryptRegisterDefaultOIDFunction(0, "CertDllOpenStoreProv", 0,
      bogusDll);
-    if (!ret && GetLastError() == ERROR_ACCESS_DENIED)
+    if (!ret && GetLastError() == ERROR_ACCESS_DENIED && !is_process_elevated())
         skip("Need admin rights\n");
     else
         ok(ret, "CryptRegisterDefaultOIDFunction failed: %08x\n", GetLastError());
@@ -645,7 +661,11 @@ static void test_registerOIDInfo(void)
     info1.pszOID = test_oid;
     SetLastError(0xdeadbeef);
     ret = CryptUnregisterOIDInfo(&info1);
-    ok(!ret, "should fail\n");
+    if (!ret && GetLastError() == ERROR_ACCESS_DENIED && !is_process_elevated())
+    {
+        skip("Need admin rights FIXME\n");
+        return;
+    }    ok(!ret, "should fail\n");
     ok(GetLastError() == ERROR_FILE_NOT_FOUND, "got %u\n", GetLastError());
 
     info2 = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY, (void *)test_oid, 0);
@@ -668,7 +688,7 @@ static void test_registerOIDInfo(void)
     info1.dwGroupId = CRYPT_HASH_ALG_OID_GROUP_ID;
     SetLastError(0xdeadbeef);
     ret = CryptRegisterOIDInfo(&info1, CRYPT_INSTALL_OID_INFO_BEFORE_FLAG);
-    if (!ret && GetLastError() == ERROR_ACCESS_DENIED)
+    if (!ret && GetLastError() == ERROR_ACCESS_DENIED && !is_process_elevated())
     {
         skip("Need admin rights\n");
         return;
-- 
2.20.1




More information about the wine-devel mailing list