From 988e8a78c2deda0463c8bad9734fa6fd8d4ec543 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 15 Oct 2013 16:52:57 +0200 Subject: [PATCH] crypt32: Moved CertAddCertificateContextToStore to cert.c. --- dlls/crypt32/cert.c | 128 +++++++++++++++++++++++++++++++++++++++++++ dlls/crypt32/store.c | 128 ------------------------------------------- 2 files changed, 128 insertions(+), 128 deletions(-) diff --git a/dlls/crypt32/cert.c b/dlls/crypt32/cert.c index 9016d8c4d85..2c96419b108 100644 --- a/dlls/crypt32/cert.c +++ b/dlls/crypt32/cert.c @@ -121,6 +121,134 @@ static const context_vtbl_t cert_vtbl = { Cert_free }; +BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore, + PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, + PCCERT_CONTEXT *ppStoreContext) +{ + WINECRYPT_CERTSTORE *store = hCertStore; + BOOL ret = TRUE; + PCCERT_CONTEXT toAdd = NULL, existing = NULL; + + TRACE("(%p, %p, %08x, %p)\n", hCertStore, pCertContext, + dwAddDisposition, ppStoreContext); + + switch (dwAddDisposition) + { + case CERT_STORE_ADD_ALWAYS: + break; + case CERT_STORE_ADD_NEW: + case CERT_STORE_ADD_REPLACE_EXISTING: + case CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES: + case CERT_STORE_ADD_USE_EXISTING: + case CERT_STORE_ADD_NEWER: + case CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES: + { + BYTE hashToAdd[20]; + DWORD size = sizeof(hashToAdd); + + ret = CertGetCertificateContextProperty(pCertContext, CERT_HASH_PROP_ID, + hashToAdd, &size); + if (ret) + { + CRYPT_HASH_BLOB blob = { sizeof(hashToAdd), hashToAdd }; + + existing = CertFindCertificateInStore(hCertStore, + pCertContext->dwCertEncodingType, 0, CERT_FIND_SHA1_HASH, &blob, + NULL); + } + break; + } + default: + FIXME("Unimplemented add disposition %d\n", dwAddDisposition); + SetLastError(E_INVALIDARG); + ret = FALSE; + } + + switch (dwAddDisposition) + { + case CERT_STORE_ADD_ALWAYS: + toAdd = CertDuplicateCertificateContext(pCertContext); + break; + case CERT_STORE_ADD_NEW: + if (existing) + { + TRACE("found matching certificate, not adding\n"); + SetLastError(CRYPT_E_EXISTS); + ret = FALSE; + } + else + toAdd = CertDuplicateCertificateContext(pCertContext); + break; + case CERT_STORE_ADD_REPLACE_EXISTING: + toAdd = CertDuplicateCertificateContext(pCertContext); + break; + case CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES: + toAdd = CertDuplicateCertificateContext(pCertContext); + if (existing) + Context_CopyProperties(toAdd, existing); + break; + case CERT_STORE_ADD_USE_EXISTING: + if (existing) + { + Context_CopyProperties(existing, pCertContext); + if (ppStoreContext) + *ppStoreContext = CertDuplicateCertificateContext(existing); + } + else + toAdd = CertDuplicateCertificateContext(pCertContext); + break; + case CERT_STORE_ADD_NEWER: + if (existing) + { + if (CompareFileTime(&existing->pCertInfo->NotBefore, + &pCertContext->pCertInfo->NotBefore) >= 0) + { + TRACE("existing certificate is newer, not adding\n"); + SetLastError(CRYPT_E_EXISTS); + ret = FALSE; + } + else + toAdd = CertDuplicateCertificateContext(pCertContext); + } + else + toAdd = CertDuplicateCertificateContext(pCertContext); + break; + case CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES: + if (existing) + { + if (CompareFileTime(&existing->pCertInfo->NotBefore, + &pCertContext->pCertInfo->NotBefore) >= 0) + { + TRACE("existing certificate is newer, not adding\n"); + SetLastError(CRYPT_E_EXISTS); + ret = FALSE; + } + else + { + toAdd = CertDuplicateCertificateContext(pCertContext); + Context_CopyProperties(toAdd, existing); + } + } + else + toAdd = CertDuplicateCertificateContext(pCertContext); + break; + } + + if (toAdd) + { + if (store) + ret = store->vtbl->certs.addContext(store, (void *)toAdd, + (void *)existing, (const void **)ppStoreContext); + else if (ppStoreContext) + *ppStoreContext = CertDuplicateCertificateContext(toAdd); + CertFreeCertificateContext(toAdd); + } + CertFreeCertificateContext(existing); + + TRACE("returning %d\n", ret); + return ret; +} + BOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext) diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c index f11279cec07..5bd19eb262d 100644 --- a/dlls/crypt32/store.c +++ b/dlls/crypt32/store.c @@ -892,134 +892,6 @@ HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV_LEGACY hProv, CERT_SYSTEM_STORE_CURRENT_USER, szSubSystemProtocol); } -BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore, - PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, - PCCERT_CONTEXT *ppStoreContext) -{ - WINECRYPT_CERTSTORE *store = hCertStore; - BOOL ret = TRUE; - PCCERT_CONTEXT toAdd = NULL, existing = NULL; - - TRACE("(%p, %p, %08x, %p)\n", hCertStore, pCertContext, - dwAddDisposition, ppStoreContext); - - switch (dwAddDisposition) - { - case CERT_STORE_ADD_ALWAYS: - break; - case CERT_STORE_ADD_NEW: - case CERT_STORE_ADD_REPLACE_EXISTING: - case CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES: - case CERT_STORE_ADD_USE_EXISTING: - case CERT_STORE_ADD_NEWER: - case CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES: - { - BYTE hashToAdd[20]; - DWORD size = sizeof(hashToAdd); - - ret = CertGetCertificateContextProperty(pCertContext, CERT_HASH_PROP_ID, - hashToAdd, &size); - if (ret) - { - CRYPT_HASH_BLOB blob = { sizeof(hashToAdd), hashToAdd }; - - existing = CertFindCertificateInStore(hCertStore, - pCertContext->dwCertEncodingType, 0, CERT_FIND_SHA1_HASH, &blob, - NULL); - } - break; - } - default: - FIXME("Unimplemented add disposition %d\n", dwAddDisposition); - SetLastError(E_INVALIDARG); - ret = FALSE; - } - - switch (dwAddDisposition) - { - case CERT_STORE_ADD_ALWAYS: - toAdd = CertDuplicateCertificateContext(pCertContext); - break; - case CERT_STORE_ADD_NEW: - if (existing) - { - TRACE("found matching certificate, not adding\n"); - SetLastError(CRYPT_E_EXISTS); - ret = FALSE; - } - else - toAdd = CertDuplicateCertificateContext(pCertContext); - break; - case CERT_STORE_ADD_REPLACE_EXISTING: - toAdd = CertDuplicateCertificateContext(pCertContext); - break; - case CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES: - toAdd = CertDuplicateCertificateContext(pCertContext); - if (existing) - Context_CopyProperties(toAdd, existing); - break; - case CERT_STORE_ADD_USE_EXISTING: - if (existing) - { - Context_CopyProperties(existing, pCertContext); - if (ppStoreContext) - *ppStoreContext = CertDuplicateCertificateContext(existing); - } - else - toAdd = CertDuplicateCertificateContext(pCertContext); - break; - case CERT_STORE_ADD_NEWER: - if (existing) - { - if (CompareFileTime(&existing->pCertInfo->NotBefore, - &pCertContext->pCertInfo->NotBefore) >= 0) - { - TRACE("existing certificate is newer, not adding\n"); - SetLastError(CRYPT_E_EXISTS); - ret = FALSE; - } - else - toAdd = CertDuplicateCertificateContext(pCertContext); - } - else - toAdd = CertDuplicateCertificateContext(pCertContext); - break; - case CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES: - if (existing) - { - if (CompareFileTime(&existing->pCertInfo->NotBefore, - &pCertContext->pCertInfo->NotBefore) >= 0) - { - TRACE("existing certificate is newer, not adding\n"); - SetLastError(CRYPT_E_EXISTS); - ret = FALSE; - } - else - { - toAdd = CertDuplicateCertificateContext(pCertContext); - Context_CopyProperties(toAdd, existing); - } - } - else - toAdd = CertDuplicateCertificateContext(pCertContext); - break; - } - - if (toAdd) - { - if (store) - ret = store->vtbl->certs.addContext(store, (void *)toAdd, - (void *)existing, (const void **)ppStoreContext); - else if (ppStoreContext) - *ppStoreContext = CertDuplicateCertificateContext(toAdd); - CertFreeCertificateContext(toAdd); - } - CertFreeCertificateContext(existing); - - TRACE("returning %d\n", ret); - return ret; -} - PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pPrev) {