diff options
author | relyea%netscape.com <devnull@localhost> | 2002-08-29 22:11:06 +0000 |
---|---|---|
committer | relyea%netscape.com <devnull@localhost> | 2002-08-29 22:11:06 +0000 |
commit | f78bfe47e3740b40bf60929d5c8b3c9c86e513d8 (patch) | |
tree | 59fe9a2cd93f39abbf3abe4bb8d9b8084c084a2a | |
parent | 1cb05abaf90c98e880bcd264783683acea0ebe61 (diff) | |
download | nss-hg-f78bfe47e3740b40bf60929d5c8b3c9c86e513d8.tar.gz |
Filter on keyID, then run through the best cert check.
-rw-r--r-- | security/nss/lib/pki/certificate.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/security/nss/lib/pki/certificate.c b/security/nss/lib/pki/certificate.c index 4761948f1..0f82b93bf 100644 --- a/security/nss/lib/pki/certificate.c +++ b/security/nss/lib/pki/certificate.c @@ -293,7 +293,7 @@ nssCertificate_GetDecoding return c->decoding; } -static NSSCertificate * +static NSSCertificate ** filter_subject_certs_for_id ( NSSCertificate **subjectCerts, @@ -303,16 +303,21 @@ filter_subject_certs_for_id NSSCertificate **si; NSSCertificate *rvCert = NULL; nssDecodedCert *dcp; + int nextOpenSlot = 0; + /* walk the subject certs */ for (si = subjectCerts; *si; si++) { dcp = nssCertificate_GetDecoding(*si); if (dcp->matchIdentifier(dcp, id)) { /* this cert has the correct identifier */ - rvCert = nssCertificate_AddRef(*si); - break; + subjectCerts[nextOpenSlot++] = *si; + } else { + NSSCertificate_Destroy(*si); + *si = NULL; } } - return rvCert; + subjectCerts[nextOpenSlot] = NULL; + return subjectCerts; } static NSSCertificate * @@ -363,14 +368,13 @@ find_cert_issuer issuerID = dc->getIssuerIdentifier(dc); } if (issuerID) { - issuer = filter_subject_certs_for_id(certs, issuerID); + certs = filter_subject_certs_for_id(certs, issuerID); nssItem_Destroy(issuerID); - } else { - issuer = nssCertificateArray_FindBestCertificate(certs, - timeOpt, - usage, - policiesOpt); - } + } + issuer = nssCertificateArray_FindBestCertificate(certs, + timeOpt, + usage, + policiesOpt); nssCertificateArray_Destroy(certs); } nssArena_Destroy(arena); |