crypt32(11/13): Move provider stores to their own file

Juan Lang juan.lang at gmail.com
Wed Aug 15 18:49:30 CDT 2007


--Juan
-------------- next part --------------
From 42b722e7372caa1326fa522704b1c06dfde59c65 Mon Sep 17 00:00:00 2001
From: Juan Lang <juan.lang at gmail.com>
Date: Wed, 15 Aug 2007 16:38:11 -0700
Subject: [PATCH] Move provider stores to their own file
---
 dlls/crypt32/Makefile.in       |    1 
 dlls/crypt32/crypt32_private.h |    6 +
 dlls/crypt32/store.c           |  276 ----------------------------------------
 3 files changed, 7 insertions(+), 276 deletions(-)

diff --git a/dlls/crypt32/Makefile.in b/dlls/crypt32/Makefile.in
index 739e133..0cb5e8a 100644
--- a/dlls/crypt32/Makefile.in
+++ b/dlls/crypt32/Makefile.in
@@ -20,6 +20,7 @@ C_SRCS = \
 	msg.c \
 	oid.c \
 	proplist.c \
+	provstore.c \
 	protectdata.c \
 	serialize.c \
 	sip.c \
diff --git a/dlls/crypt32/crypt32_private.h b/dlls/crypt32/crypt32_private.h
index 0a1aab9..c4fbbb7 100644
--- a/dlls/crypt32/crypt32_private.h
+++ b/dlls/crypt32/crypt32_private.h
@@ -240,6 +240,12 @@ WINECRYPT_CERTSTORE *CRYPT_MemOpenStore(
 WINECRYPT_CERTSTORE *CRYPT_CollectionOpenStore(HCRYPTPROV hCryptProv,
  DWORD dwFlags, const void *pvPara);
 
+PWINECRYPT_CERTSTORE CRYPT_ProvOpenStore(LPCSTR lpszStoreProvider,
+ DWORD dwEncodingType, HCRYPTPROV hCryptProv, DWORD dwFlags,
+ const void *pvPara);
+PWINECRYPT_CERTSTORE CRYPT_ProvCreateStore(HCRYPTPROV hCryptProv, DWORD dwFlags,
+ PWINECRYPT_CERTSTORE memStore, const CERT_STORE_PROV_INFO *pProvInfo);
+
 /* Helper function for store reading functions and
  * CertAddSerializedElementToStore.  Returns a context of the appropriate type
  * if it can, or NULL otherwise.  Doesn't validate any of the properties in
diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c
index 6b5ae4d..7aa9c71 100644
--- a/dlls/crypt32/store.c
+++ b/dlls/crypt32/store.c
@@ -121,20 +121,6 @@ typedef struct _WINE_MSGSTOREINFO
     HCRYPTMSG  msg;
 } WINE_MSGSTOREINFO, *PWINE_MSGSTOREINFO;
 
-typedef struct _WINE_PROVIDERSTORE
-{
-    WINECRYPT_CERTSTORE             hdr;
-    DWORD                           dwStoreProvFlags;
-    PWINECRYPT_CERTSTORE            memStore;
-    HCERTSTOREPROV                  hStoreProv;
-    PFN_CERT_STORE_PROV_CLOSE       provCloseStore;
-    PFN_CERT_STORE_PROV_WRITE_CERT  provWriteCert;
-    PFN_CERT_STORE_PROV_DELETE_CERT provDeleteCert;
-    PFN_CERT_STORE_PROV_WRITE_CRL   provWriteCrl;
-    PFN_CERT_STORE_PROV_DELETE_CRL  provDeleteCrl;
-    PFN_CERT_STORE_PROV_CONTROL     provControl;
-} WINE_PROVIDERSTORE, *PWINE_PROVIDERSTORE;
-
 void CRYPT_InitStore(WINECRYPT_CERTSTORE *store, HCRYPTPROV hCryptProv,
  DWORD dwFlags, CertStoreType type)
 {
@@ -175,268 +161,6 @@ static void CRYPT_EmptyStore(HCERTSTORE 
     } while (crl);
 }
 
-static void WINAPI CRYPT_ProvCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
-{
-    PWINE_PROVIDERSTORE store = (PWINE_PROVIDERSTORE)hCertStore;
-
-    TRACE("(%p, %08x)\n", store, dwFlags);
-
-    if (store->provCloseStore)
-        store->provCloseStore(store->hStoreProv, dwFlags);
-    if (!(store->dwStoreProvFlags & CERT_STORE_PROV_EXTERNAL_FLAG))
-        CertCloseStore(store->memStore, dwFlags);
-    CRYPT_FreeStore((PWINECRYPT_CERTSTORE)store);
-}
-
-static BOOL CRYPT_ProvAddCert(PWINECRYPT_CERTSTORE store, void *cert,
- void *toReplace, const void **ppStoreContext)
-{
-    PWINE_PROVIDERSTORE ps = (PWINE_PROVIDERSTORE)store;
-    BOOL ret;
-
-    TRACE("(%p, %p, %p, %p)\n", store, cert, toReplace, ppStoreContext);
-
-    if (toReplace)
-        ret = ps->memStore->certs.addContext(ps->memStore, cert, toReplace,
-         ppStoreContext);
-    else
-    {
-        ret = TRUE;
-        if (ps->provWriteCert)
-            ret = ps->provWriteCert(ps->hStoreProv, (PCCERT_CONTEXT)cert,
-             CERT_STORE_PROV_WRITE_ADD_FLAG);
-        if (ret)
-            ret = ps->memStore->certs.addContext(ps->memStore, cert, NULL,
-             ppStoreContext);
-    }
-    /* dirty trick: replace the returned context's hCertStore with
-     * store.
-     */
-    if (ppStoreContext)
-        (*(PCERT_CONTEXT *)ppStoreContext)->hCertStore = store;
-    return ret;
-}
-
-static void *CRYPT_ProvEnumCert(PWINECRYPT_CERTSTORE store, void *pPrev)
-{
-    PWINE_PROVIDERSTORE ps = (PWINE_PROVIDERSTORE)store;
-    void *ret;
-
-    ret = ps->memStore->certs.enumContext(ps->memStore, pPrev);
-    if (ret)
-    {
-        /* same dirty trick: replace the returned context's hCertStore with
-         * store.
-         */
-        ((PCERT_CONTEXT)ret)->hCertStore = store;
-    }
-    return ret;
-}
-
-static BOOL CRYPT_ProvDeleteCert(PWINECRYPT_CERTSTORE store, void *cert)
-{
-    PWINE_PROVIDERSTORE ps = (PWINE_PROVIDERSTORE)store;
-    BOOL ret = TRUE;
-
-    TRACE("(%p, %p)\n", store, cert);
-
-    if (ps->provDeleteCert)
-        ret = ps->provDeleteCert(ps->hStoreProv, cert, 0);
-    if (ret)
-        ret = ps->memStore->certs.deleteContext(ps->memStore, cert);
-    return ret;
-}
-
-static BOOL CRYPT_ProvAddCRL(PWINECRYPT_CERTSTORE store, void *crl,
- void *toReplace, const void **ppStoreContext)
-{
-    PWINE_PROVIDERSTORE ps = (PWINE_PROVIDERSTORE)store;
-    BOOL ret;
-
-    TRACE("(%p, %p, %p, %p)\n", store, crl, toReplace, ppStoreContext);
-
-    if (toReplace)
-        ret = ps->memStore->crls.addContext(ps->memStore, crl, toReplace,
-         ppStoreContext);
-    else
-    {
-        if (ps->hdr.dwOpenFlags & CERT_STORE_READONLY_FLAG)
-        {
-            SetLastError(ERROR_ACCESS_DENIED);
-            ret = FALSE;
-        }
-        else
-        {
-            ret = TRUE;
-            if (ps->provWriteCrl)
-                ret = ps->provWriteCrl(ps->hStoreProv, (PCCRL_CONTEXT)crl,
-                 CERT_STORE_PROV_WRITE_ADD_FLAG);
-            if (ret)
-                ret = ps->memStore->crls.addContext(ps->memStore, crl, NULL,
-                 ppStoreContext);
-        }
-    }
-    /* dirty trick: replace the returned context's hCertStore with
-     * store.
-     */
-    if (ppStoreContext)
-        (*(PCRL_CONTEXT *)ppStoreContext)->hCertStore = store;
-    return ret;
-}
-
-static void *CRYPT_ProvEnumCRL(PWINECRYPT_CERTSTORE store, void *pPrev)
-{
-    PWINE_PROVIDERSTORE ps = (PWINE_PROVIDERSTORE)store;
-    void *ret;
-
-    ret = ps->memStore->crls.enumContext(ps->memStore, pPrev);
-    if (ret)
-    {
-        /* same dirty trick: replace the returned context's hCertStore with
-         * store.
-         */
-        ((PCRL_CONTEXT)ret)->hCertStore = store;
-    }
-    return ret;
-}
-
-static BOOL CRYPT_ProvDeleteCRL(PWINECRYPT_CERTSTORE store, void *crl)
-{
-    PWINE_PROVIDERSTORE ps = (PWINE_PROVIDERSTORE)store;
-    BOOL ret = TRUE;
-
-    TRACE("(%p, %p)\n", store, crl);
-
-    if (ps->provDeleteCrl)
-        ret = ps->provDeleteCrl(ps->hStoreProv, crl, 0);
-    if (ret)
-        ret = ps->memStore->crls.deleteContext(ps->memStore, crl);
-    return ret;
-}
-
-static BOOL WINAPI CRYPT_ProvControl(HCERTSTORE hCertStore, DWORD dwFlags,
- DWORD dwCtrlType, void const *pvCtrlPara)
-{
-    PWINE_PROVIDERSTORE store = (PWINE_PROVIDERSTORE)hCertStore;
-    BOOL ret = TRUE;
-
-    TRACE("(%p, %08x, %d, %p)\n", hCertStore, dwFlags, dwCtrlType,
-     pvCtrlPara);
-
-    if (store->provControl)
-        ret = store->provControl(store->hStoreProv, dwFlags, dwCtrlType,
-         pvCtrlPara);
-    return ret;
-}
-
-static PWINECRYPT_CERTSTORE CRYPT_ProvCreateStore(HCRYPTPROV hCryptProv,
- DWORD dwFlags, PWINECRYPT_CERTSTORE memStore, const CERT_STORE_PROV_INFO *pProvInfo)
-{
-    PWINE_PROVIDERSTORE ret = CryptMemAlloc(sizeof(WINE_PROVIDERSTORE));
-
-    if (ret)
-    {
-        CRYPT_InitStore(&ret->hdr, hCryptProv, dwFlags,
-         StoreTypeProvider);
-        ret->dwStoreProvFlags = pProvInfo->dwStoreProvFlags;
-        if (ret->dwStoreProvFlags & CERT_STORE_PROV_EXTERNAL_FLAG)
-        {
-            CertCloseStore(memStore, 0);
-            ret->memStore = NULL;
-        }
-        else
-            ret->memStore = memStore;
-        ret->hStoreProv = pProvInfo->hStoreProv;
-        ret->hdr.closeStore = CRYPT_ProvCloseStore;
-        ret->hdr.certs.addContext = CRYPT_ProvAddCert;
-        ret->hdr.certs.enumContext = CRYPT_ProvEnumCert;
-        ret->hdr.certs.deleteContext = CRYPT_ProvDeleteCert;
-        ret->hdr.crls.addContext = CRYPT_ProvAddCRL;
-        ret->hdr.crls.enumContext = CRYPT_ProvEnumCRL;
-        ret->hdr.crls.deleteContext = CRYPT_ProvDeleteCRL;
-        ret->hdr.control = CRYPT_ProvControl;
-        if (pProvInfo->cStoreProvFunc > CERT_STORE_PROV_CLOSE_FUNC)
-            ret->provCloseStore =
-             pProvInfo->rgpvStoreProvFunc[CERT_STORE_PROV_CLOSE_FUNC];
-        else
-            ret->provCloseStore = NULL;
-        if (pProvInfo->cStoreProvFunc >
-         CERT_STORE_PROV_WRITE_CERT_FUNC)
-            ret->provWriteCert = pProvInfo->rgpvStoreProvFunc[
-             CERT_STORE_PROV_WRITE_CERT_FUNC];
-        else
-            ret->provWriteCert = NULL;
-        if (pProvInfo->cStoreProvFunc >
-         CERT_STORE_PROV_DELETE_CERT_FUNC)
-            ret->provDeleteCert = pProvInfo->rgpvStoreProvFunc[
-             CERT_STORE_PROV_DELETE_CERT_FUNC];
-        else
-            ret->provDeleteCert = NULL;
-        if (pProvInfo->cStoreProvFunc >
-         CERT_STORE_PROV_WRITE_CRL_FUNC)
-            ret->provWriteCrl = pProvInfo->rgpvStoreProvFunc[
-             CERT_STORE_PROV_WRITE_CRL_FUNC];
-        else
-            ret->provWriteCert = NULL;
-        if (pProvInfo->cStoreProvFunc >
-         CERT_STORE_PROV_DELETE_CRL_FUNC)
-            ret->provDeleteCrl = pProvInfo->rgpvStoreProvFunc[
-             CERT_STORE_PROV_DELETE_CRL_FUNC];
-        else
-            ret->provDeleteCert = NULL;
-        if (pProvInfo->cStoreProvFunc >
-         CERT_STORE_PROV_CONTROL_FUNC)
-            ret->provControl = pProvInfo->rgpvStoreProvFunc[
-             CERT_STORE_PROV_CONTROL_FUNC];
-        else
-            ret->provControl = NULL;
-    }
-    return (PWINECRYPT_CERTSTORE)ret;
-}
-
-static PWINECRYPT_CERTSTORE CRYPT_ProvOpenStore(LPCSTR lpszStoreProvider,
- DWORD dwEncodingType, HCRYPTPROV hCryptProv, DWORD dwFlags, const void *pvPara)
-{
-    static HCRYPTOIDFUNCSET set = NULL;
-    PFN_CERT_DLL_OPEN_STORE_PROV_FUNC provOpenFunc;
-    HCRYPTOIDFUNCADDR hFunc;
-    PWINECRYPT_CERTSTORE ret = NULL;
-
-    if (!set)
-        set = CryptInitOIDFunctionSet(CRYPT_OID_OPEN_STORE_PROV_FUNC, 0);
-    CryptGetOIDFunctionAddress(set, dwEncodingType, lpszStoreProvider, 0,
-     (void **)&provOpenFunc, &hFunc);
-    if (provOpenFunc)
-    {
-        CERT_STORE_PROV_INFO provInfo = { 0 };
-
-        provInfo.cbSize = sizeof(provInfo);
-        if (dwFlags & CERT_STORE_DELETE_FLAG)
-            provOpenFunc(lpszStoreProvider, dwEncodingType, hCryptProv,
-             dwFlags, pvPara, NULL, &provInfo);
-        else
-        {
-            HCERTSTORE memStore;
-
-            memStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
-             CERT_STORE_CREATE_NEW_FLAG, NULL);
-            if (memStore)
-            {
-                if (provOpenFunc(lpszStoreProvider, dwEncodingType, hCryptProv,
-                 dwFlags, pvPara, memStore, &provInfo))
-                    ret = CRYPT_ProvCreateStore(hCryptProv, dwFlags, memStore,
-                     &provInfo);
-                else
-                    CertCloseStore(memStore, 0);
-            }
-        }
-        CryptFreeOIDFunctionAddress(hFunc, 0);
-    }
-    else
-        SetLastError(ERROR_FILE_NOT_FOUND);
-    return ret;
-}
-
 static void CRYPT_HashToStr(const BYTE *hash, LPWSTR asciiHash)
 {
     static const WCHAR fmt[] = { '%','0','2','X',0 };
-- 
1.4.1


More information about the wine-patches mailing list