crypt32(16/17): Set error status on issued certificate,
not on issuer
Juan Lang
juan.lang at gmail.com
Thu Aug 30 20:19:10 CDT 2007
--Juan
-------------- next part --------------
From 4760da953507dc93b59f75d3bf1b8353527cd514 Mon Sep 17 00:00:00 2001
From: Juan Lang <juan.lang at gmail.com>
Date: Thu, 30 Aug 2007 17:59:43 -0700
Subject: [PATCH] Set error status on issued certificate, not on issuer
---
dlls/crypt32/chain.c | 22 +++++++++++++++-------
dlls/crypt32/tests/chain.c | 2 +-
2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/dlls/crypt32/chain.c b/dlls/crypt32/chain.c
index 5a2b8ef..d15f551 100644
--- a/dlls/crypt32/chain.c
+++ b/dlls/crypt32/chain.c
@@ -287,17 +287,25 @@ static BOOL CRYPT_AddCertToSimpleChain(P
(chain->cElement + 1) * sizeof(PCERT_CHAIN_ELEMENT));
if (chain->rgpElement)
{
+ chain->rgpElement[chain->cElement++] = element;
memset(element, 0, sizeof(CERT_CHAIN_ELEMENT));
element->cbSize = sizeof(CERT_CHAIN_ELEMENT);
element->pCertContext = CertDuplicateCertificateContext(cert);
- if (dwFlags & CERT_STORE_REVOCATION_FLAG &&
- !(dwFlags & CERT_STORE_NO_CRL_FLAG))
- element->TrustStatus.dwErrorStatus |= CERT_TRUST_IS_REVOKED;
- if (dwFlags & CERT_STORE_SIGNATURE_FLAG)
- element->TrustStatus.dwErrorStatus |=
- CERT_TRUST_IS_NOT_SIGNATURE_VALID;
+ /* Flags, if set, refer to the element this cert issued, so set
+ * the preceding element's error accordingly
+ */
+ if (chain->cElement > 1)
+ {
+ if (dwFlags & CERT_STORE_REVOCATION_FLAG &&
+ !(dwFlags & CERT_STORE_NO_CRL_FLAG))
+ chain->rgpElement[chain->cElement - 2]->TrustStatus.
+ dwErrorStatus |= CERT_TRUST_IS_REVOKED;
+ if (dwFlags & CERT_STORE_SIGNATURE_FLAG)
+ chain->rgpElement[chain->cElement - 2]->TrustStatus.
+ dwErrorStatus |=
+ CERT_TRUST_IS_NOT_SIGNATURE_VALID;
+ }
/* FIXME: initialize the rest of element */
- chain->rgpElement[chain->cElement++] = element;
if (chain->cElement % engine->CycleDetectionModulus)
CRYPT_CheckSimpleChainForCycles(chain);
CRYPT_CombineTrustStatus(&chain->TrustStatus,
diff --git a/dlls/crypt32/tests/chain.c b/dlls/crypt32/tests/chain.c
index 9292066..a1082a4 100644
--- a/dlls/crypt32/tests/chain.c
+++ b/dlls/crypt32/tests/chain.c
@@ -1490,7 +1490,7 @@ static ChainCheck chainCheck[] = {
{ CERT_TRUST_IS_UNTRUSTED_ROOT | CERT_TRUST_IS_NOT_SIGNATURE_VALID |
CERT_TRUST_IS_NOT_TIME_VALID, 0 },
1, simpleStatus1 },
- TODO_ERROR | TODO_INFO },
+ TODO_INFO },
{ { sizeof(chain2) / sizeof(chain2[0]), chain2 },
{ { 0, CERT_TRUST_HAS_PREFERRED_ISSUER },
{ CERT_TRUST_IS_UNTRUSTED_ROOT | CERT_TRUST_IS_NOT_TIME_VALID, 0 },
--
1.4.1
More information about the wine-patches
mailing list