| OLD | NEW |
| 1 /* This Source Code Form is subject to the terms of the Mozilla Public | 1 /* This Source Code Form is subject to the terms of the Mozilla Public |
| 2 * License, v. 2.0. If a copy of the MPL was not distributed with this | 2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
| 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| 4 /* | 4 /* |
| 5 * pkix_nameconstraintschecker.c | 5 * pkix_nameconstraintschecker.c |
| 6 * | 6 * |
| 7 * Functions for Name Constraints Checkers | 7 * Functions for Name Constraints Checkers |
| 8 * | 8 * |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 PKIX_CertChainChecker *checker, | 160 PKIX_CertChainChecker *checker, |
| 161 PKIX_PL_Cert *cert, | 161 PKIX_PL_Cert *cert, |
| 162 PKIX_List *unresolvedCriticalExtensions, | 162 PKIX_List *unresolvedCriticalExtensions, |
| 163 void **pNBIOContext, | 163 void **pNBIOContext, |
| 164 void *plContext) | 164 void *plContext) |
| 165 { | 165 { |
| 166 pkix_NameConstraintsCheckerState *state = NULL; | 166 pkix_NameConstraintsCheckerState *state = NULL; |
| 167 PKIX_PL_CertNameConstraints *nameConstraints = NULL; | 167 PKIX_PL_CertNameConstraints *nameConstraints = NULL; |
| 168 PKIX_PL_CertNameConstraints *mergedNameConstraints = NULL; | 168 PKIX_PL_CertNameConstraints *mergedNameConstraints = NULL; |
| 169 PKIX_Boolean selfIssued = PKIX_FALSE; | 169 PKIX_Boolean selfIssued = PKIX_FALSE; |
| 170 PKIX_Boolean lastCert = PKIX_FALSE; |
| 170 | 171 |
| 171 PKIX_ENTER(CERTCHAINCHECKER, "pkix_NameConstraintsChecker_Check"); | 172 PKIX_ENTER(CERTCHAINCHECKER, "pkix_NameConstraintsChecker_Check"); |
| 172 PKIX_NULLCHECK_THREE(checker, cert, pNBIOContext); | 173 PKIX_NULLCHECK_THREE(checker, cert, pNBIOContext); |
| 173 | 174 |
| 174 *pNBIOContext = NULL; /* we never block on pending I/O */ | 175 *pNBIOContext = NULL; /* we never block on pending I/O */ |
| 175 | 176 |
| 176 PKIX_CHECK(PKIX_CertChainChecker_GetCertChainCheckerState | 177 PKIX_CHECK(PKIX_CertChainChecker_GetCertChainCheckerState |
| 177 (checker, (PKIX_PL_Object **)&state, plContext), | 178 (checker, (PKIX_PL_Object **)&state, plContext), |
| 178 PKIX_CERTCHAINCHECKERGETCERTCHAINCHECKERSTATEFAILED); | 179 PKIX_CERTCHAINCHECKERGETCERTCHAINCHECKERSTATEFAILED); |
| 179 | 180 |
| 180 state->certsRemaining--; | 181 state->certsRemaining--; |
| 182 lastCert = state->certsRemaining == 0; |
| 181 | 183 |
| 182 /* Get status of self issued */ | 184 /* Get status of self issued */ |
| 183 PKIX_CHECK(pkix_IsCertSelfIssued(cert, &selfIssued, plContext), | 185 PKIX_CHECK(pkix_IsCertSelfIssued(cert, &selfIssued, plContext), |
| 184 PKIX_ISCERTSELFISSUEDFAILED); | 186 PKIX_ISCERTSELFISSUEDFAILED); |
| 185 | 187 |
| 186 /* Check on non self-issued and if so only for last cert */ | 188 /* Check on non self-issued and if so only for last cert */ |
| 187 if (selfIssued == PKIX_FALSE || | 189 if (selfIssued == PKIX_FALSE || |
| 188 (selfIssued == PKIX_TRUE && state->certsRemaining == 0)) { | 190 (selfIssued == PKIX_TRUE && lastCert)) { |
| 189 PKIX_CHECK(PKIX_PL_Cert_CheckNameConstraints | 191 PKIX_CHECK(PKIX_PL_Cert_CheckNameConstraints |
| 190 (cert, state->nameConstraints, plContext), | 192 (cert, state->nameConstraints, lastCert, |
| 193 plContext), |
| 191 PKIX_CERTCHECKNAMECONSTRAINTSFAILED); | 194 PKIX_CERTCHECKNAMECONSTRAINTSFAILED); |
| 192 } | 195 } |
| 193 | 196 |
| 194 if (state->certsRemaining != 0) { | 197 if (!lastCert) { |
| 195 | 198 |
| 196 PKIX_CHECK(PKIX_PL_Cert_GetNameConstraints | 199 PKIX_CHECK(PKIX_PL_Cert_GetNameConstraints |
| 197 (cert, &nameConstraints, plContext), | 200 (cert, &nameConstraints, plContext), |
| 198 PKIX_CERTGETNAMECONSTRAINTSFAILED); | 201 PKIX_CERTGETNAMECONSTRAINTSFAILED); |
| 199 | 202 |
| 200 /* Merge with previous name constraints kept in state */ | 203 /* Merge with previous name constraints kept in state */ |
| 201 | 204 |
| 202 if (nameConstraints != NULL) { | 205 if (nameConstraints != NULL) { |
| 203 | 206 |
| 204 if (state->nameConstraints == NULL) { | 207 if (state->nameConstraints == NULL) { |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 pChecker, | 299 pChecker, |
| 297 plContext), | 300 plContext), |
| 298 PKIX_CERTCHAINCHECKERCREATEFAILED); | 301 PKIX_CERTCHAINCHECKERCREATEFAILED); |
| 299 | 302 |
| 300 cleanup: | 303 cleanup: |
| 301 | 304 |
| 302 PKIX_DECREF(state); | 305 PKIX_DECREF(state); |
| 303 | 306 |
| 304 PKIX_RETURN(CERTCHAINCHECKER); | 307 PKIX_RETURN(CERTCHAINCHECKER); |
| 305 } | 308 } |
| OLD | NEW |