Juan Lang : crypt32: Use I_CertUpdateStore in file stores.
Alexandre Julliard
julliard at winehq.org
Fri Oct 19 08:35:46 CDT 2007
Module: wine
Branch: master
Commit: 889449630dcba07351a58b07cb874974ed34f68f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=889449630dcba07351a58b07cb874974ed34f68f
Author: Juan Lang <juan.lang at gmail.com>
Date: Thu Oct 18 11:11:54 2007 -0700
crypt32: Use I_CertUpdateStore in file stores.
---
dlls/crypt32/crypt32_private.h | 2 ++
dlls/crypt32/filestore.c | 35 ++++++++++++++---------------------
2 files changed, 16 insertions(+), 21 deletions(-)
diff --git a/dlls/crypt32/crypt32_private.h b/dlls/crypt32/crypt32_private.h
index c0246d0..63d7c2d 100644
--- a/dlls/crypt32/crypt32_private.h
+++ b/dlls/crypt32/crypt32_private.h
@@ -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);
diff --git a/dlls/crypt32/filestore.c b/dlls/crypt32/filestore.c
index 8294e82..4c8c4a1 100644
--- a/dlls/crypt32/filestore.c
+++ b/dlls/crypt32/filestore.c
@@ -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);
}
}
More information about the wine-cvs
mailing list