| Index: mozilla/security/nss/lib/pki/pki3hack.c
|
| ===================================================================
|
| --- mozilla/security/nss/lib/pki/pki3hack.c (revision 158129)
|
| +++ mozilla/security/nss/lib/pki/pki3hack.c (working copy)
|
| @@ -412,6 +412,50 @@
|
| return match;
|
| }
|
|
|
| +static PRBool
|
| +nss3certificate_isTrustedForUsage(nssDecodedCert *dc, const NSSUsage *usage)
|
| +{
|
| + CERTCertificate *cc;
|
| + PRBool ca;
|
| + SECStatus secrv;
|
| + unsigned int requiredFlags;
|
| + unsigned int trustFlags;
|
| + SECTrustType trustType;
|
| + CERTCertTrust trust;
|
| +
|
| + /* This is for NSS 3.3 functions that do not specify a usage */
|
| + if (usage->anyUsage) {
|
| + return PR_FALSE; /* XXX is this right? */
|
| + }
|
| + cc = (CERTCertificate *)dc->data;
|
| + ca = usage->nss3lookingForCA;
|
| + if (!ca) {
|
| + PRBool trusted;
|
| + unsigned int failedFlags;
|
| + secrv = cert_CheckLeafTrust(cc, usage->nss3usage,
|
| + &failedFlags, &trusted);
|
| + return secrv == SECSuccess && trusted;
|
| + }
|
| + secrv = CERT_TrustFlagsForCACertUsage(usage->nss3usage, &requiredFlags,
|
| + &trustType);
|
| + if (secrv != SECSuccess) {
|
| + return PR_FALSE;
|
| + }
|
| + secrv = CERT_GetCertTrust(cc, &trust);
|
| + if (secrv != SECSuccess) {
|
| + return PR_FALSE;
|
| + }
|
| + if (trustType == trustTypeNone) {
|
| + /* normally trustTypeNone usages accept any of the given trust bits
|
| + * being on as acceptable. */
|
| + trustFlags = trust.sslFlags | trust.emailFlags |
|
| + trust.objectSigningFlags;
|
| + } else {
|
| + trustFlags = SEC_GET_TRUST_FLAGS(&trust, trustType);
|
| + }
|
| + return (trustFlags & requiredFlags) == requiredFlags;
|
| +}
|
| +
|
| static NSSASCII7 *
|
| nss3certificate_getEmailAddress(nssDecodedCert *dc)
|
| {
|
| @@ -462,6 +506,7 @@
|
| rvDC->isValidAtTime = nss3certificate_isValidAtTime;
|
| rvDC->isNewerThan = nss3certificate_isNewerThan;
|
| rvDC->matchUsage = nss3certificate_matchUsage;
|
| + rvDC->isTrustedForUsage = nss3certificate_isTrustedForUsage;
|
| rvDC->getEmailAddress = nss3certificate_getEmailAddress;
|
| rvDC->getDERSerialNumber = nss3certificate_getDERSerialNumber;
|
| } else {
|
| @@ -489,7 +534,9 @@
|
| rvDC->isValidAtTime = nss3certificate_isValidAtTime;
|
| rvDC->isNewerThan = nss3certificate_isNewerThan;
|
| rvDC->matchUsage = nss3certificate_matchUsage;
|
| + rvDC->isTrustedForUsage = nss3certificate_isTrustedForUsage;
|
| rvDC->getEmailAddress = nss3certificate_getEmailAddress;
|
| + rvDC->getDERSerialNumber = nss3certificate_getDERSerialNumber;
|
| }
|
| return rvDC;
|
| }
|
|
|