crypt32: Add tests of committing a collection store.
This commit is contained in:
parent
e7cc2868aa
commit
e6047ae52d
|
@ -277,11 +277,53 @@ static void testMemStore(void)
|
||||||
CertCloseStore(store1, 0);
|
CertCloseStore(store1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void compareFile(LPCWSTR filename, const BYTE *pb, DWORD cb)
|
||||||
|
{
|
||||||
|
HANDLE h;
|
||||||
|
BYTE buf[200];
|
||||||
|
BOOL ret;
|
||||||
|
DWORD cbRead = 0, totalRead = 0;
|
||||||
|
|
||||||
|
h = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING,
|
||||||
|
FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
if (h == INVALID_HANDLE_VALUE)
|
||||||
|
return;
|
||||||
|
do {
|
||||||
|
ret = ReadFile(h, buf, sizeof(buf), &cbRead, NULL);
|
||||||
|
if (ret && cbRead)
|
||||||
|
{
|
||||||
|
ok(totalRead + cbRead <= cb, "Expected total count %d, see %d\n",
|
||||||
|
cb, totalRead + cbRead);
|
||||||
|
ok(!memcmp(pb + totalRead, buf, cbRead),
|
||||||
|
"Unexpected data in file\n");
|
||||||
|
totalRead += cbRead;
|
||||||
|
}
|
||||||
|
} while (ret && cbRead);
|
||||||
|
CloseHandle(h);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const BYTE serializedStoreWithCert[] = {
|
||||||
|
0x00,0x00,0x00,0x00,0x43,0x45,0x52,0x54,0x20,0x00,0x00,0x00,0x01,0x00,0x00,
|
||||||
|
0x00,0x7c,0x00,0x00,0x00,0x30,0x7a,0x02,0x01,0x01,0x30,0x02,0x06,0x00,0x30,
|
||||||
|
0x15,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,
|
||||||
|
0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,0x30,0x22,0x18,0x0f,0x31,0x36,0x30,0x31,
|
||||||
|
0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x18,0x0f,0x31,0x36,
|
||||||
|
0x30,0x31,0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x30,0x15,
|
||||||
|
0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,
|
||||||
|
0x20,0x4c,0x61,0x6e,0x67,0x00,0x30,0x07,0x30,0x02,0x06,0x00,0x03,0x01,0x00,
|
||||||
|
0xa3,0x16,0x30,0x14,0x30,0x12,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,
|
||||||
|
0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x00 };
|
||||||
|
|
||||||
static void testCollectionStore(void)
|
static void testCollectionStore(void)
|
||||||
{
|
{
|
||||||
HCERTSTORE store1, store2, collection, collection2;
|
HCERTSTORE store1, store2, collection, collection2;
|
||||||
PCCERT_CONTEXT context;
|
PCCERT_CONTEXT context;
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
|
static const WCHAR szPrefix[] = { 'c','e','r',0 };
|
||||||
|
static const WCHAR szDot[] = { '.',0 };
|
||||||
|
WCHAR filename[MAX_PATH];
|
||||||
|
HANDLE file;
|
||||||
|
|
||||||
if (!pCertAddStoreToCollection)
|
if (!pCertAddStoreToCollection)
|
||||||
{
|
{
|
||||||
|
@ -595,6 +637,65 @@ static void testCollectionStore(void)
|
||||||
|
|
||||||
CertCloseStore(collection, 0);
|
CertCloseStore(collection, 0);
|
||||||
CertCloseStore(store1, 0);
|
CertCloseStore(store1, 0);
|
||||||
|
|
||||||
|
/* Test whether a collection store can be committed */
|
||||||
|
if (!pCertControlStore)
|
||||||
|
{
|
||||||
|
win_skip("CertControlStore() is not available\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
collection = CertOpenStore(CERT_STORE_PROV_COLLECTION, 0, 0,
|
||||||
|
CERT_STORE_CREATE_NEW_FLAG, NULL);
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = pCertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
|
||||||
|
ok(ret, "CertControlStore failed: %08x\n", GetLastError());
|
||||||
|
|
||||||
|
/* Adding a mem store that can't be committed prevents a successful commit.
|
||||||
|
*/
|
||||||
|
store1 = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
|
||||||
|
CERT_STORE_CREATE_NEW_FLAG, NULL);
|
||||||
|
pCertAddStoreToCollection(collection, store1, 0, 0);
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = pCertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
|
||||||
|
todo_wine
|
||||||
|
ok(!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
|
||||||
|
"expected ERROR_CALL_NOT_IMPLEMENTED, got %d\n", GetLastError());
|
||||||
|
pCertRemoveStoreFromCollection(collection, store1);
|
||||||
|
CertCloseStore(store1, 0);
|
||||||
|
|
||||||
|
/* Test adding a cert to a collection with a file store, committing the
|
||||||
|
* change to the collection, and comparing the resulting file.
|
||||||
|
*/
|
||||||
|
if (!GetTempFileNameW(szDot, szPrefix, 0, filename))
|
||||||
|
return;
|
||||||
|
|
||||||
|
DeleteFileW(filename);
|
||||||
|
file = CreateFileW(filename, GENERIC_READ | GENERIC_WRITE, 0, NULL,
|
||||||
|
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
if (file == INVALID_HANDLE_VALUE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
store1 = CertOpenStore(CERT_STORE_PROV_FILE, 0, 0,
|
||||||
|
CERT_FILE_STORE_COMMIT_ENABLE_FLAG, file);
|
||||||
|
ok(store1 != NULL, "CertOpenStore failed: %08x\n", GetLastError());
|
||||||
|
CloseHandle(file);
|
||||||
|
pCertAddStoreToCollection(collection, store1,
|
||||||
|
CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 0);
|
||||||
|
CertCloseStore(store1, 0);
|
||||||
|
|
||||||
|
ret = CertAddEncodedCertificateToStore(collection, X509_ASN_ENCODING,
|
||||||
|
bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
|
||||||
|
ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
|
||||||
|
GetLastError());
|
||||||
|
ret = pCertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
|
||||||
|
ok(ret, "CertControlStore failed: %d\n", ret);
|
||||||
|
|
||||||
|
CertCloseStore(collection, 0);
|
||||||
|
|
||||||
|
compareFile(filename, serializedStoreWithCert,
|
||||||
|
sizeof(serializedStoreWithCert));
|
||||||
|
DeleteFileW(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Looks for the property with ID propID in the buffer buf. Returns a pointer
|
/* Looks for the property with ID propID in the buffer buf. Returns a pointer
|
||||||
|
@ -1068,18 +1169,6 @@ static void testSystemStore(void)
|
||||||
RegDeleteKeyW(HKEY_CURRENT_USER, BogusPathW);
|
RegDeleteKeyW(HKEY_CURRENT_USER, BogusPathW);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const BYTE serializedStoreWithCert[] = {
|
|
||||||
0x00,0x00,0x00,0x00,0x43,0x45,0x52,0x54,0x20,0x00,0x00,0x00,0x01,0x00,0x00,
|
|
||||||
0x00,0x7c,0x00,0x00,0x00,0x30,0x7a,0x02,0x01,0x01,0x30,0x02,0x06,0x00,0x30,
|
|
||||||
0x15,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,
|
|
||||||
0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,0x30,0x22,0x18,0x0f,0x31,0x36,0x30,0x31,
|
|
||||||
0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x18,0x0f,0x31,0x36,
|
|
||||||
0x30,0x31,0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x30,0x15,
|
|
||||||
0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,
|
|
||||||
0x20,0x4c,0x61,0x6e,0x67,0x00,0x30,0x07,0x30,0x02,0x06,0x00,0x03,0x01,0x00,
|
|
||||||
0xa3,0x16,0x30,0x14,0x30,0x12,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,
|
|
||||||
0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00 };
|
|
||||||
static const BYTE serializedStoreWithCertAndCRL[] = {
|
static const BYTE serializedStoreWithCertAndCRL[] = {
|
||||||
0x00,0x00,0x00,0x00,0x43,0x45,0x52,0x54,0x20,0x00,0x00,0x00,0x01,0x00,0x00,
|
0x00,0x00,0x00,0x00,0x43,0x45,0x52,0x54,0x20,0x00,0x00,0x00,0x01,0x00,0x00,
|
||||||
0x00,0x7c,0x00,0x00,0x00,0x30,0x7a,0x02,0x01,0x01,0x30,0x02,0x06,0x00,0x30,
|
0x00,0x7c,0x00,0x00,0x00,0x30,0x7a,0x02,0x01,0x01,0x30,0x02,0x06,0x00,0x30,
|
||||||
|
@ -1098,31 +1187,6 @@ static const BYTE serializedStoreWithCertAndCRL[] = {
|
||||||
0x00,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,
|
0x00,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,
|
||||||
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
|
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
|
||||||
|
|
||||||
static void compareFile(LPCWSTR filename, const BYTE *pb, DWORD cb)
|
|
||||||
{
|
|
||||||
HANDLE h;
|
|
||||||
BYTE buf[200];
|
|
||||||
BOOL ret;
|
|
||||||
DWORD cbRead = 0, totalRead = 0;
|
|
||||||
|
|
||||||
h = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING,
|
|
||||||
FILE_ATTRIBUTE_NORMAL, NULL);
|
|
||||||
if (h == INVALID_HANDLE_VALUE)
|
|
||||||
return;
|
|
||||||
do {
|
|
||||||
ret = ReadFile(h, buf, sizeof(buf), &cbRead, NULL);
|
|
||||||
if (ret && cbRead)
|
|
||||||
{
|
|
||||||
ok(totalRead + cbRead <= cb, "Expected total count %d, see %d\n",
|
|
||||||
cb, totalRead + cbRead);
|
|
||||||
ok(!memcmp(pb + totalRead, buf, cbRead),
|
|
||||||
"Unexpected data in file\n");
|
|
||||||
totalRead += cbRead;
|
|
||||||
}
|
|
||||||
} while (ret && cbRead);
|
|
||||||
CloseHandle(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void testFileStore(void)
|
static void testFileStore(void)
|
||||||
{
|
{
|
||||||
static const WCHAR szPrefix[] = { 'c','e','r',0 };
|
static const WCHAR szPrefix[] = { 'c','e','r',0 };
|
||||||
|
|
Loading…
Reference in New Issue