Make advapi32/crypt.c test pass under win2k SP4, do stricter error checking
Dmitry Timoshkov
dmitry at baikal.ru
Fri Oct 1 07:41:03 CDT 2004
Hello,
Changelog:
Dmitry Timoshkov <dmitry at codeweavers.com>
Make advapi32/crypt.c test pass under win2k SP4, do stricter
error checking, comment out a couple of tests failing under win2k,
add a note why RSA_CPAcquireContext may fail.
diff -u cvs/hq/wine/dlls/advapi32/tests/crypt.c wine/dlls/advapi32/tests/crypt.c
--- cvs/hq/wine/dlls/advapi32/tests/crypt.c 2004-09-02 17:23:54.000000000 +0900
+++ wine/dlls/advapi32/tests/crypt.c 2004-10-01 21:10:30.000000000 +0900
@@ -18,15 +18,16 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <stdio.h>
+#include <stdarg.h>
-#include "wine/test.h"
#include "windef.h"
#include "winbase.h"
#include "wincrypt.h"
#include "winerror.h"
#include "winreg.h"
+#include "wine/test.h"
+
static const char szRsaBaseProv[] = MS_DEF_PROV_A;
static const char szNonExistentProv[] = "Wine Non Existent Cryptographic Provider v11.2";
static const char szKeySet[] = "wine_test_keyset";
@@ -102,21 +103,29 @@ static void test_acquire_context(void)
result = CryptAcquireContext(&hProv, szKeySet, szRsaBaseProv, NON_DEF_PROV_TYPE, 0);
ok(!result && GetLastError()==NTE_PROV_TYPE_NO_MATCH, "%ld\n", GetLastError());
+ /* This test fails under Win2k SP4:
+ result = TRUE, GetLastError() == ERROR_INVALID_PARAMETER
+ SetLastError(0xdeadbeef);
result = CryptAcquireContext(NULL, szKeySet, szRsaBaseProv, PROV_RSA_FULL, 0);
- ok(!result && GetLastError()==ERROR_INVALID_PARAMETER, "%ld\n", GetLastError());
+ ok(!result && GetLastError()==ERROR_INVALID_PARAMETER, "%d/%ld\n", result, GetLastError());
+ */
/* Last not least, try to really acquire a context. */
+ hProv = 0;
+ SetLastError(0xdeadbeef);
result = CryptAcquireContext(&hProv, szKeySet, szRsaBaseProv, PROV_RSA_FULL, 0);
- ok(result, "%ld\n", GetLastError());
+ ok(result && GetLastError() == ERROR_SUCCESS, "%d/%ld\n", result, GetLastError());
- if (GetLastError() == ERROR_SUCCESS)
+ if (hProv)
CryptReleaseContext(hProv, 0);
/* Try again, witch an empty ("\0") szProvider parameter */
+ hProv = 0;
+ SetLastError(0xdeadbeef);
result = CryptAcquireContext(&hProv, szKeySet, "", PROV_RSA_FULL, 0);
- ok(result, "%ld\n", GetLastError());
+ ok(result && GetLastError() == ERROR_SUCCESS, "%d/%ld\n", result, GetLastError());
- if (GetLastError() == ERROR_SUCCESS)
+ if (hProv)
CryptReleaseContext(hProv, 0);
}
@@ -230,14 +239,16 @@ static BOOL FindProvTypesRegVals(DWORD d
if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Cryptography\\Defaults\\Provider Types", &hKey))
return FALSE;
- RegQueryInfoKey(hKey, NULL, NULL, NULL, pdwTypeCount, pcbTypeName, NULL,
- NULL, NULL, NULL, NULL, NULL);
+ if (RegQueryInfoKey(hKey, NULL, NULL, NULL, pdwTypeCount, pcbTypeName, NULL,
+ NULL, NULL, NULL, NULL, NULL))
+ return FALSE;
(*pcbTypeName)++;
if (!(*pszTypeName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, *pcbTypeName))))
return FALSE;
- RegEnumKeyEx(hKey, dwIndex, *pszTypeName, pcbTypeName, NULL, NULL, NULL, NULL);
+ if (RegEnumKeyEx(hKey, dwIndex, *pszTypeName, pcbTypeName, NULL, NULL, NULL, NULL))
+ return FALSE;
(*pcbTypeName)++;
ch = *pszTypeName + strlen(*pszTypeName);
/* Convert "Type 000" to 0, etc/ */
@@ -245,14 +256,17 @@ static BOOL FindProvTypesRegVals(DWORD d
*pdwProvType += (*(--ch) - '0') * 10;
*pdwProvType += (*(--ch) - '0') * 100;
- RegOpenKey(hKey, *pszTypeName, &hSubKey);
- LocalFree(*pszTypeName);
+ if (RegOpenKey(hKey, *pszTypeName, &hSubKey))
+ return FALSE;
- RegQueryValueEx(hSubKey, "TypeName", NULL, NULL, NULL, pcbTypeName);
+ if (RegQueryValueEx(hSubKey, "TypeName", NULL, NULL, NULL, pcbTypeName))
+ return FALSE;
+
if (!(*pszTypeName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, *pcbTypeName))))
return FALSE;
- RegQueryValueEx(hSubKey, "TypeName", NULL, NULL, *pszTypeName, pcbTypeName);
+ if (RegQueryValueEx(hSubKey, "TypeName", NULL, NULL, *pszTypeName, pcbTypeName))
+ return FALSE;
RegCloseKey(hSubKey);
RegCloseKey(hKey);
@@ -279,7 +293,10 @@ static void test_enum_provider_types()
DWORD notZeroFlags = 5;
if (!FindProvTypesRegVals(index, &dwProvType, &pszTypeName, &cbTypeName, &dwTypeCount))
- return;
+ {
+ trace("could not find provider types in registry, skipping the test\n");
+ return;
+ }
/* check pdwReserved for NULL */
result = CryptEnumProviderTypes(index, ¬Null, 0, &provType, typeName, &typeNameSize);
@@ -297,9 +314,13 @@ static void test_enum_provider_types()
if (!(typeName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, typeNameSize))))
return;
+ /* This test fails under Win2k SP4:
+ result = TRUE, GetLastError() == 0xdeadbeef
+ SetLastError(0xdeadbeef);
result = CryptEnumProviderTypes(index, NULL, 0, &provType, typeName, &typeNameSize);
- ok(!result && GetLastError()==ERROR_MORE_DATA, "expected %i, got %ld\n",
- ERROR_MORE_DATA, GetLastError());
+ ok(!result && GetLastError()==ERROR_MORE_DATA, "expected 0/ERROR_MORE_DATA, got %d/%08lx\n",
+ result, GetLastError());
+ */
LocalFree(typeName);
@@ -326,10 +347,13 @@ static void test_enum_provider_types()
if (!(typeName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, typeNameSize))))
return;
+ typeNameSize = 0xdeadbeef;
result = CryptEnumProviderTypes(index, NULL, 0, &provType, typeName, &typeNameSize);
- ok(result && provType==dwProvType, "expected %ld, got %ld\n", dwProvType, provType);
- ok(result && !strcmp(pszTypeName, typeName), "expected %s, got %s\n", pszTypeName, typeName);
- ok(result && typeNameSize==cbTypeName, "expected %ld, got %ld\n", cbTypeName, typeNameSize);
+ ok(result, "expected TRUE, got %ld\n", result);
+ ok(provType==dwProvType, "expected %ld, got %ld\n", dwProvType, provType);
+ if (pszTypeName)
+ ok(!strcmp(pszTypeName, typeName), "expected %s, got %s\n", pszTypeName, typeName);
+ ok(typeNameSize==cbTypeName, "expected %ld, got %ld\n", cbTypeName, typeNameSize);
}
static BOOL FindDfltProvRegVals(DWORD dwProvType, DWORD dwFlags, LPSTR *pszProvName, DWORD *pcbProvName)
@@ -415,8 +439,10 @@ static void test_get_default_provider()
/* check for invalid prov type */
provType = 0xdeadbeef;
result = CryptGetDefaultProvider(provType, NULL, flags, provName, &provNameSize);
- ok(!result && GetLastError()==NTE_BAD_PROV_TYPE, "expected %ld, got %ld\n",
- NTE_BAD_PROV_TYPE, GetLastError());
+ ok(!result && (GetLastError() == NTE_BAD_PROV_TYPE ||
+ GetLastError() == ERROR_INVALID_PARAMETER),
+ "expected NTE_BAD_PROV_TYPE or ERROR_INVALID_PARAMETER, got %ld/%ld\n",
+ result, GetLastError());
provType = PROV_RSA_FULL;
SetLastError(0);
diff -u cvs/hq/wine/dlls/rsabase/main.c wine/dlls/rsabase/main.c
--- cvs/hq/wine/dlls/rsabase/main.c 2004-08-17 13:52:50.000000000 +0900
+++ wine/dlls/rsabase/main.c 2004-10-01 19:07:55.000000000 +0900
@@ -97,8 +97,6 @@ typedef struct _RSA_CryptProv
BOOL WINAPI RSA_CPAcquireContext(HCRYPTPROV *phProv, LPSTR pszContainer,
DWORD dwFlags, PVTableProvStruc pVTable)
{
- BOOL ret = FALSE;
-
TRACE("%p %s %08lx %p\n", phProv, debugstr_a(pszContainer),
dwFlags, pVTable);
@@ -118,11 +116,15 @@ BOOL WINAPI RSA_CPAcquireContext(HCRYPTP
cp->dwMagic = RSABASE_MAGIC;
*phProv = (HCRYPTPROV) cp;
- ret = TRUE;
+
+ SetLastError(ERROR_SUCCESS);
+ return TRUE;
}
+#else
+ FIXME("You have to install libcrypto.so and development headers in order to use crypto API\n");
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
#endif
-
- return ret;
}
BOOL WINAPI RSA_CPCreateHash(HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash)
More information about the wine-patches
mailing list