crypt32: Implement CertFindCRLInStore for find type CRL_FIND_ISSUED_FOR.

This commit is contained in:
Juan Lang 2009-11-18 10:40:08 -08:00 committed by Alexandre Julliard
parent a3b462e3ea
commit 4fa4f67c79
2 changed files with 17 additions and 4 deletions

View File

@ -137,6 +137,20 @@ static BOOL compare_crl_existing(PCCRL_CONTEXT pCrlContext, DWORD dwType,
return ret; return ret;
} }
static BOOL compare_crl_issued_for(PCCRL_CONTEXT pCrlContext, DWORD dwType,
DWORD dwFlags, const void *pvPara)
{
const CRL_FIND_ISSUED_FOR_PARA *para = pvPara;
BOOL ret;
ret = CertCompareCertificateName(para->pIssuerCert->dwCertEncodingType,
&para->pIssuerCert->pCertInfo->Issuer, &pCrlContext->pCrlInfo->Issuer);
if (ret)
ret = CertIsValidCRLForCertificate(para->pSubjectCert, pCrlContext,
0, NULL);
return ret;
}
PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore, PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore,
DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext) const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext)
@ -158,6 +172,9 @@ PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore,
case CRL_FIND_EXISTING: case CRL_FIND_EXISTING:
compare = compare_crl_existing; compare = compare_crl_existing;
break; break;
case CRL_FIND_ISSUED_FOR:
compare = compare_crl_issued_for;
break;
default: default:
FIXME("find type %08x unimplemented\n", dwFindType); FIXME("find type %08x unimplemented\n", dwFindType);
compare = NULL; compare = NULL;

View File

@ -390,7 +390,6 @@ static void testFindCRL(void)
issuedForPara.pIssuerCert = cert; issuedForPara.pIssuerCert = cert;
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR, context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
&issuedForPara, NULL); &issuedForPara, NULL);
todo_wine
ok(context != NULL, "Expected a context\n"); ok(context != NULL, "Expected a context\n");
if (context) if (context)
{ {
@ -433,12 +432,10 @@ static void testFindCRL(void)
* match cert's issuer, but verisignCRL does not, so the expected count * match cert's issuer, but verisignCRL does not, so the expected count
* is 0. * is 0.
*/ */
todo_wine
ok(count == 3, "expected 3 matching CRLs, got %d\n", count); ok(count == 3, "expected 3 matching CRLs, got %d\n", count);
/* Only v1CRLWithIssuerAndEntry and v2CRLWithIssuingDistPoint contain /* Only v1CRLWithIssuerAndEntry and v2CRLWithIssuingDistPoint contain
* entries, so the count of CRL entries that match cert is 2. * entries, so the count of CRL entries that match cert is 2.
*/ */
todo_wine
ok(revoked_count == 2, "expected 2 matching CRL entries, got %d\n", ok(revoked_count == 2, "expected 2 matching CRL entries, got %d\n",
revoked_count); revoked_count);
@ -495,7 +492,6 @@ static void testFindCRL(void)
revoked_count++; revoked_count++;
} }
} while (context); } while (context);
todo_wine
ok(count == 1, "expected 1 matching CRLs, got %d\n", count); ok(count == 1, "expected 1 matching CRLs, got %d\n", count);
ok(revoked_count == 0, "expected 0 matching CRL entries, got %d\n", ok(revoked_count == 0, "expected 0 matching CRL entries, got %d\n",
revoked_count); revoked_count);