crypt32: Use I_CertUpdateStore in file stores.

This commit is contained in:
Juan Lang 2007-10-18 11:11:54 -07:00 committed by Alexandre Julliard
parent e857f383a4
commit 889449630d
2 changed files with 16 additions and 21 deletions

View File

@ -234,6 +234,8 @@ void CRYPT_InitStore(WINECRYPT_CERTSTORE *store, DWORD dwFlags,
CertStoreType type);
void CRYPT_FreeStore(PWINECRYPT_CERTSTORE store);
void CRYPT_EmptyStore(HCERTSTORE store);
BOOL WINAPI I_CertUpdateStore(HCERTSTORE store1, HCERTSTORE store2, DWORD unk0,
DWORD unk1);
PWINECRYPT_CERTSTORE CRYPT_CollectionOpenStore(HCRYPTPROV hCryptProv,
DWORD dwFlags, const void *pvPara);

View File

@ -118,11 +118,20 @@ static BOOL WINAPI CRYPT_FileControl(HCERTSTORE hCertStore, DWORD dwFlags,
switch (dwCtrlType)
{
case CERT_STORE_CTRL_RESYNC:
CRYPT_EmptyStore(store->memStore);
store->dirty = FALSE;
if (store->type == CERT_STORE_SAVE_AS_STORE)
ret = CRYPT_ReadSerializedStoreFromFile(store->file,
store->memStore);
{
HCERTSTORE memStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
CERT_STORE_CREATE_NEW_FLAG, NULL);
/* FIXME: if I could translate a handle to a path, I could use
* CryptQueryObject instead, but there's no API to do so yet.
*/
ret = CRYPT_ReadSerializedStoreFromFile(store->file, memStore);
if (ret)
I_CertUpdateStore(store->memStore, memStore, 0, 0);
CertCloseStore(memStore, 0);
}
else if (store->type == CERT_STORE_SAVE_AS_PKCS7)
{
CERT_BLOB blob = { 0, NULL };
@ -136,24 +145,8 @@ static BOOL WINAPI CRYPT_FileControl(HCERTSTORE hCertStore, DWORD dwFlags,
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED,
CERT_QUERY_FORMAT_FLAG_BINARY, 0, NULL, NULL, NULL,
&messageStore, NULL, NULL);
if (ret)
{
PCCERT_CONTEXT cert = NULL;
PCCRL_CONTEXT crl = NULL;
do {
cert = CertEnumCertificatesInStore(messageStore, cert);
if (cert)
CertAddCertificateContextToStore(store->memStore,
cert, CERT_STORE_ADD_ALWAYS, NULL);
} while (cert);
do {
crl = CertEnumCRLsInStore(messageStore, crl);
if (crl)
CertAddCRLContextToStore(store->memStore, crl,
CERT_STORE_ADD_ALWAYS, NULL);
} while (crl);
}
I_CertUpdateStore(store->memStore, messageStore, 0, 0);
CertCloseStore(messageStore, 0);
CryptMemFree(blob.pbData);
}
}