[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