summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libcrypto/x509v3/v3_cpols.c57
-rw-r--r--src/lib/libssl/src/crypto/x509v3/v3_cpols.c57
2 files changed, 72 insertions, 42 deletions
diff --git a/src/lib/libcrypto/x509v3/v3_cpols.c b/src/lib/libcrypto/x509v3/v3_cpols.c
index 65916778aa..61e6b3ba47 100644
--- a/src/lib/libcrypto/x509v3/v3_cpols.c
+++ b/src/lib/libcrypto/x509v3/v3_cpols.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: v3_cpols.c,v 1.19 2015/02/14 15:17:52 miod Exp $ */ 1/* $OpenBSD: v3_cpols.c,v 1.20 2015/07/15 17:00:35 miod Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -334,35 +334,45 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org)
334 int i; 334 int i;
335 CONF_VALUE *cnf; 335 CONF_VALUE *cnf;
336 POLICYINFO *pol; 336 POLICYINFO *pol;
337 POLICYQUALINFO *qual; 337 POLICYQUALINFO *nqual = NULL;
338 338
339 if (!(pol = POLICYINFO_new())) 339 if ((pol = POLICYINFO_new()) == NULL)
340 goto merr; 340 goto merr;
341 for (i = 0; i < sk_CONF_VALUE_num(polstrs); i++) { 341 for (i = 0; i < sk_CONF_VALUE_num(polstrs); i++) {
342 cnf = sk_CONF_VALUE_value(polstrs, i); 342 cnf = sk_CONF_VALUE_value(polstrs, i);
343 if (!strcmp(cnf->name, "policyIdentifier")) { 343 if (strcmp(cnf->name, "policyIdentifier") == 0) {
344 ASN1_OBJECT *pobj; 344 ASN1_OBJECT *pobj;
345 if (!(pobj = OBJ_txt2obj(cnf->value, 0))) { 345
346 if ((pobj = OBJ_txt2obj(cnf->value, 0)) == NULL) {
346 X509V3err(X509V3_F_POLICY_SECTION, 347 X509V3err(X509V3_F_POLICY_SECTION,
347 X509V3_R_INVALID_OBJECT_IDENTIFIER); 348 X509V3_R_INVALID_OBJECT_IDENTIFIER);
348 X509V3_conf_err(cnf); 349 X509V3_conf_err(cnf);
349 goto err; 350 goto err;
350 } 351 }
351 pol->policyid = pobj; 352 pol->policyid = pobj;
352 } else if (!name_cmp(cnf->name, "CPS")) { 353 } else if (name_cmp(cnf->name, "CPS") == 0) {
353 if (!pol->qualifiers) 354 if ((nqual = POLICYQUALINFO_new()) == NULL)
354 pol->qualifiers = sk_POLICYQUALINFO_new_null();
355 if (!(qual = POLICYQUALINFO_new()))
356 goto merr; 355 goto merr;
357 if (!sk_POLICYQUALINFO_push(pol->qualifiers, qual)) 356 nqual->pqualid = OBJ_nid2obj(NID_id_qt_cps);
357 nqual->d.cpsuri = M_ASN1_IA5STRING_new();
358 if (nqual->d.cpsuri == NULL)
358 goto merr; 359 goto merr;
359 qual->pqualid = OBJ_nid2obj(NID_id_qt_cps); 360 if (ASN1_STRING_set(nqual->d.cpsuri, cnf->value,
360 qual->d.cpsuri = M_ASN1_IA5STRING_new(); 361 strlen(cnf->value)) == 0)
361 if (!ASN1_STRING_set(qual->d.cpsuri, cnf->value, 362 goto merr;
362 strlen(cnf->value))) 363
364 if (pol->qualifiers == NULL) {
365 pol->qualifiers = sk_POLICYQUALINFO_new_null();
366 if (pol->qualifiers == NULL)
367 goto merr;
368 }
369 if (sk_POLICYQUALINFO_push(pol->qualifiers, nqual) == 0)
363 goto merr; 370 goto merr;
364 } else if (!name_cmp(cnf->name, "userNotice")) { 371 nqual = NULL;
372 } else if (name_cmp(cnf->name, "userNotice") == 0) {
365 STACK_OF(CONF_VALUE) *unot; 373 STACK_OF(CONF_VALUE) *unot;
374 POLICYQUALINFO *qual;
375
366 if (*cnf->value != '@') { 376 if (*cnf->value != '@') {
367 X509V3err(X509V3_F_POLICY_SECTION, 377 X509V3err(X509V3_F_POLICY_SECTION,
368 X509V3_R_EXPECTED_A_SECTION_NAME); 378 X509V3_R_EXPECTED_A_SECTION_NAME);
@@ -370,7 +380,7 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org)
370 goto err; 380 goto err;
371 } 381 }
372 unot = X509V3_get_section(ctx, cnf->value + 1); 382 unot = X509V3_get_section(ctx, cnf->value + 1);
373 if (!unot) { 383 if (unot == NULL) {
374 X509V3err(X509V3_F_POLICY_SECTION, 384 X509V3err(X509V3_F_POLICY_SECTION,
375 X509V3_R_INVALID_SECTION); 385 X509V3_R_INVALID_SECTION);
376 X509V3_conf_err(cnf); 386 X509V3_conf_err(cnf);
@@ -378,11 +388,15 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org)
378 } 388 }
379 qual = notice_section(ctx, unot, ia5org); 389 qual = notice_section(ctx, unot, ia5org);
380 X509V3_section_free(ctx, unot); 390 X509V3_section_free(ctx, unot);
381 if (!qual) 391 if (qual == NULL)
382 goto err; 392 goto err;
383 if (!pol->qualifiers) pol->qualifiers = 393
384 sk_POLICYQUALINFO_new_null(); 394 if (pol->qualifiers == NULL) {
385 if (!sk_POLICYQUALINFO_push(pol->qualifiers, qual)) 395 pol->qualifiers = sk_POLICYQUALINFO_new_null();
396 if (pol->qualifiers == NULL)
397 goto merr;
398 }
399 if (sk_POLICYQUALINFO_push(pol->qualifiers, qual) == 0)
386 goto merr; 400 goto merr;
387 } else { 401 } else {
388 X509V3err(X509V3_F_POLICY_SECTION, 402 X509V3err(X509V3_F_POLICY_SECTION,
@@ -391,7 +405,7 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org)
391 goto err; 405 goto err;
392 } 406 }
393 } 407 }
394 if (!pol->policyid) { 408 if (pol->policyid == NULL) {
395 X509V3err(X509V3_F_POLICY_SECTION, 409 X509V3err(X509V3_F_POLICY_SECTION,
396 X509V3_R_NO_POLICY_IDENTIFIER); 410 X509V3_R_NO_POLICY_IDENTIFIER);
397 goto err; 411 goto err;
@@ -403,6 +417,7 @@ merr:
403 X509V3err(X509V3_F_POLICY_SECTION, ERR_R_MALLOC_FAILURE); 417 X509V3err(X509V3_F_POLICY_SECTION, ERR_R_MALLOC_FAILURE);
404 418
405err: 419err:
420 POLICYQUALINFO_free(nqual);
406 POLICYINFO_free(pol); 421 POLICYINFO_free(pol);
407 return NULL; 422 return NULL;
408} 423}
diff --git a/src/lib/libssl/src/crypto/x509v3/v3_cpols.c b/src/lib/libssl/src/crypto/x509v3/v3_cpols.c
index 65916778aa..61e6b3ba47 100644
--- a/src/lib/libssl/src/crypto/x509v3/v3_cpols.c
+++ b/src/lib/libssl/src/crypto/x509v3/v3_cpols.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: v3_cpols.c,v 1.19 2015/02/14 15:17:52 miod Exp $ */ 1/* $OpenBSD: v3_cpols.c,v 1.20 2015/07/15 17:00:35 miod Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -334,35 +334,45 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org)
334 int i; 334 int i;
335 CONF_VALUE *cnf; 335 CONF_VALUE *cnf;
336 POLICYINFO *pol; 336 POLICYINFO *pol;
337 POLICYQUALINFO *qual; 337 POLICYQUALINFO *nqual = NULL;
338 338
339 if (!(pol = POLICYINFO_new())) 339 if ((pol = POLICYINFO_new()) == NULL)
340 goto merr; 340 goto merr;
341 for (i = 0; i < sk_CONF_VALUE_num(polstrs); i++) { 341 for (i = 0; i < sk_CONF_VALUE_num(polstrs); i++) {
342 cnf = sk_CONF_VALUE_value(polstrs, i); 342 cnf = sk_CONF_VALUE_value(polstrs, i);
343 if (!strcmp(cnf->name, "policyIdentifier")) { 343 if (strcmp(cnf->name, "policyIdentifier") == 0) {
344 ASN1_OBJECT *pobj; 344 ASN1_OBJECT *pobj;
345 if (!(pobj = OBJ_txt2obj(cnf->value, 0))) { 345
346 if ((pobj = OBJ_txt2obj(cnf->value, 0)) == NULL) {
346 X509V3err(X509V3_F_POLICY_SECTION, 347 X509V3err(X509V3_F_POLICY_SECTION,
347 X509V3_R_INVALID_OBJECT_IDENTIFIER); 348 X509V3_R_INVALID_OBJECT_IDENTIFIER);
348 X509V3_conf_err(cnf); 349 X509V3_conf_err(cnf);
349 goto err; 350 goto err;
350 } 351 }
351 pol->policyid = pobj; 352 pol->policyid = pobj;
352 } else if (!name_cmp(cnf->name, "CPS")) { 353 } else if (name_cmp(cnf->name, "CPS") == 0) {
353 if (!pol->qualifiers) 354 if ((nqual = POLICYQUALINFO_new()) == NULL)
354 pol->qualifiers = sk_POLICYQUALINFO_new_null();
355 if (!(qual = POLICYQUALINFO_new()))
356 goto merr; 355 goto merr;
357 if (!sk_POLICYQUALINFO_push(pol->qualifiers, qual)) 356 nqual->pqualid = OBJ_nid2obj(NID_id_qt_cps);
357 nqual->d.cpsuri = M_ASN1_IA5STRING_new();
358 if (nqual->d.cpsuri == NULL)
358 goto merr; 359 goto merr;
359 qual->pqualid = OBJ_nid2obj(NID_id_qt_cps); 360 if (ASN1_STRING_set(nqual->d.cpsuri, cnf->value,
360 qual->d.cpsuri = M_ASN1_IA5STRING_new(); 361 strlen(cnf->value)) == 0)
361 if (!ASN1_STRING_set(qual->d.cpsuri, cnf->value, 362 goto merr;
362 strlen(cnf->value))) 363
364 if (pol->qualifiers == NULL) {
365 pol->qualifiers = sk_POLICYQUALINFO_new_null();
366 if (pol->qualifiers == NULL)
367 goto merr;
368 }
369 if (sk_POLICYQUALINFO_push(pol->qualifiers, nqual) == 0)
363 goto merr; 370 goto merr;
364 } else if (!name_cmp(cnf->name, "userNotice")) { 371 nqual = NULL;
372 } else if (name_cmp(cnf->name, "userNotice") == 0) {
365 STACK_OF(CONF_VALUE) *unot; 373 STACK_OF(CONF_VALUE) *unot;
374 POLICYQUALINFO *qual;
375
366 if (*cnf->value != '@') { 376 if (*cnf->value != '@') {
367 X509V3err(X509V3_F_POLICY_SECTION, 377 X509V3err(X509V3_F_POLICY_SECTION,
368 X509V3_R_EXPECTED_A_SECTION_NAME); 378 X509V3_R_EXPECTED_A_SECTION_NAME);
@@ -370,7 +380,7 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org)
370 goto err; 380 goto err;
371 } 381 }
372 unot = X509V3_get_section(ctx, cnf->value + 1); 382 unot = X509V3_get_section(ctx, cnf->value + 1);
373 if (!unot) { 383 if (unot == NULL) {
374 X509V3err(X509V3_F_POLICY_SECTION, 384 X509V3err(X509V3_F_POLICY_SECTION,
375 X509V3_R_INVALID_SECTION); 385 X509V3_R_INVALID_SECTION);
376 X509V3_conf_err(cnf); 386 X509V3_conf_err(cnf);
@@ -378,11 +388,15 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org)
378 } 388 }
379 qual = notice_section(ctx, unot, ia5org); 389 qual = notice_section(ctx, unot, ia5org);
380 X509V3_section_free(ctx, unot); 390 X509V3_section_free(ctx, unot);
381 if (!qual) 391 if (qual == NULL)
382 goto err; 392 goto err;
383 if (!pol->qualifiers) pol->qualifiers = 393
384 sk_POLICYQUALINFO_new_null(); 394 if (pol->qualifiers == NULL) {
385 if (!sk_POLICYQUALINFO_push(pol->qualifiers, qual)) 395 pol->qualifiers = sk_POLICYQUALINFO_new_null();
396 if (pol->qualifiers == NULL)
397 goto merr;
398 }
399 if (sk_POLICYQUALINFO_push(pol->qualifiers, qual) == 0)
386 goto merr; 400 goto merr;
387 } else { 401 } else {
388 X509V3err(X509V3_F_POLICY_SECTION, 402 X509V3err(X509V3_F_POLICY_SECTION,
@@ -391,7 +405,7 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org)
391 goto err; 405 goto err;
392 } 406 }
393 } 407 }
394 if (!pol->policyid) { 408 if (pol->policyid == NULL) {
395 X509V3err(X509V3_F_POLICY_SECTION, 409 X509V3err(X509V3_F_POLICY_SECTION,
396 X509V3_R_NO_POLICY_IDENTIFIER); 410 X509V3_R_NO_POLICY_IDENTIFIER);
397 goto err; 411 goto err;
@@ -403,6 +417,7 @@ merr:
403 X509V3err(X509V3_F_POLICY_SECTION, ERR_R_MALLOC_FAILURE); 417 X509V3err(X509V3_F_POLICY_SECTION, ERR_R_MALLOC_FAILURE);
404 418
405err: 419err:
420 POLICYQUALINFO_free(nqual);
406 POLICYINFO_free(pol); 421 POLICYINFO_free(pol);
407 return NULL; 422 return NULL;
408} 423}