Module: wine Branch: master Commit: 1a059879bf0d0df531646238c676daedfde329b9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1a059879bf0d0df531646238c6...
Author: Juan Lang juan.lang@gmail.com Date: Thu Sep 6 09:57:29 2007 -0700
crypt32: Make a helper function to create initial candidate chain.
---
dlls/crypt32/chain.c | 64 +++++++++++++++++++++++++++++++------------------ 1 files changed, 40 insertions(+), 24 deletions(-)
diff --git a/dlls/crypt32/chain.c b/dlls/crypt32/chain.c index 7efe0c7..9652d61 100644 --- a/dlls/crypt32/chain.c +++ b/dlls/crypt32/chain.c @@ -569,6 +569,42 @@ static BOOL CRYPT_BuildSimpleChain(HCERTCHAINENGINE hChainEngine, return ret; }
+static BOOL CRYPT_BuildCandidateChainFromCert(HCERTCHAINENGINE hChainEngine, + PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore, + PCertificateChain *ppChain) +{ + PCERT_SIMPLE_CHAIN simpleChain = NULL; + BOOL ret; + + /* FIXME: only simple chains are supported for now, as CTLs aren't + * supported yet. + */ + if ((ret = CRYPT_BuildSimpleChain(hChainEngine, pCertContext, pTime, + hAdditionalStore, &simpleChain))) + { + PCertificateChain chain = CryptMemAlloc(sizeof(CertificateChain)); + + if (chain) + { + chain->ref = 1; + chain->context.cbSize = sizeof(CERT_CHAIN_CONTEXT); + memcpy(&chain->context.TrustStatus, &simpleChain->TrustStatus, + sizeof(CERT_TRUST_STATUS)); + chain->context.cChain = 1; + chain->context.rgpChain = CryptMemAlloc(sizeof(PCERT_SIMPLE_CHAIN)); + chain->context.rgpChain[0] = simpleChain; + chain->context.cLowerQualityChainContext = 0; + chain->context.rgpLowerQualityChainContext = NULL; + chain->context.fHasRevocationFreshnessTime = FALSE; + chain->context.dwRevocationFreshnessTime = 0; + } + else + ret = FALSE; + *ppChain = chain; + } + return ret; +} + typedef struct _CERT_CHAIN_PARA_NO_EXTRA_FIELDS { DWORD cbSize; CERT_USAGE_MATCH RequestedUsage; @@ -588,8 +624,8 @@ BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine, PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved, PCCERT_CHAIN_CONTEXT* ppChainContext) { - PCERT_SIMPLE_CHAIN simpleChain = NULL; BOOL ret; + PCertificateChain chain;
TRACE("(%p, %p, %p, %p, %p, %08x, %p, %p)\n", hChainEngine, pCertContext, pTime, hAdditionalStore, pChainPara, dwFlags, pvReserved, ppChainContext); @@ -605,30 +641,10 @@ BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine, hChainEngine = CRYPT_GetDefaultChainEngine(); /* FIXME: what about HCCE_LOCAL_MACHINE? */ /* FIXME: pChainPara is for now ignored */ - /* FIXME: only simple chains are supported for now, as CTLs aren't - * supported yet. - */ - if ((ret = CRYPT_BuildSimpleChain(hChainEngine, pCertContext, pTime, - hAdditionalStore, &simpleChain))) + ret = CRYPT_BuildCandidateChainFromCert(hChainEngine, pCertContext, pTime, + hAdditionalStore, &chain); + if (ret) { - PCertificateChain chain = CryptMemAlloc(sizeof(CertificateChain)); - - if (chain) - { - chain->ref = 1; - chain->context.cbSize = sizeof(CERT_CHAIN_CONTEXT); - memcpy(&chain->context.TrustStatus, &simpleChain->TrustStatus, - sizeof(CERT_TRUST_STATUS)); - chain->context.cChain = 1; - chain->context.rgpChain = CryptMemAlloc(sizeof(PCERT_SIMPLE_CHAIN)); - chain->context.rgpChain[0] = simpleChain; - chain->context.cLowerQualityChainContext = 0; - chain->context.rgpLowerQualityChainContext = NULL; - chain->context.fHasRevocationFreshnessTime = FALSE; - chain->context.dwRevocationFreshnessTime = 0; - } - else - ret = FALSE; if (ppChainContext) *ppChainContext = (PCCERT_CHAIN_CONTEXT)chain; else