diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/x509/x509_vpm.c | 56 |
1 files changed, 34 insertions, 22 deletions
diff --git a/src/lib/libcrypto/x509/x509_vpm.c b/src/lib/libcrypto/x509/x509_vpm.c index 62d9215b4c..927c79716e 100644 --- a/src/lib/libcrypto/x509/x509_vpm.c +++ b/src/lib/libcrypto/x509/x509_vpm.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x509_vpm.c,v 1.44 2024/03/29 04:45:15 tb Exp $ */ | 1 | /* $OpenBSD: x509_vpm.c,v 1.45 2024/03/29 04:50:11 tb 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 2004. | 3 | * project 2004. |
| 4 | */ | 4 | */ |
| @@ -474,37 +474,49 @@ X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, ASN1_OBJECT *policy) | |||
| 474 | } | 474 | } |
| 475 | LCRYPTO_ALIAS(X509_VERIFY_PARAM_add0_policy); | 475 | LCRYPTO_ALIAS(X509_VERIFY_PARAM_add0_policy); |
| 476 | 476 | ||
| 477 | static STACK_OF(ASN1_OBJECT) * | ||
| 478 | sk_ASN1_OBJECT_deep_copy(const STACK_OF(ASN1_OBJECT) *sk) | ||
| 479 | { | ||
| 480 | STACK_OF(ASN1_OBJECT) *objs; | ||
| 481 | ASN1_OBJECT *obj = NULL; | ||
| 482 | int i; | ||
| 483 | |||
| 484 | if ((objs = sk_ASN1_OBJECT_new_null()) == NULL) | ||
| 485 | goto err; | ||
| 486 | |||
| 487 | for (i = 0; i < sk_ASN1_OBJECT_num(sk); i++) { | ||
| 488 | if ((obj = OBJ_dup(sk_ASN1_OBJECT_value(sk, i))) == NULL) | ||
| 489 | goto err; | ||
| 490 | if (sk_ASN1_OBJECT_push(objs, obj) <= 0) | ||
| 491 | goto err; | ||
| 492 | obj = NULL; | ||
| 493 | } | ||
| 494 | |||
| 495 | return objs; | ||
| 496 | |||
| 497 | err: | ||
| 498 | sk_ASN1_OBJECT_pop_free(objs, ASN1_OBJECT_free); | ||
| 499 | ASN1_OBJECT_free(obj); | ||
| 500 | |||
| 501 | return NULL; | ||
| 502 | } | ||
| 503 | |||
| 477 | int | 504 | int |
| 478 | X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, | 505 | X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, |
| 479 | STACK_OF(ASN1_OBJECT) *policies) | 506 | STACK_OF(ASN1_OBJECT) *policies) |
| 480 | { | 507 | { |
| 481 | int i; | 508 | if (param == NULL) |
| 482 | ASN1_OBJECT *oid, *doid; | ||
| 483 | |||
| 484 | if (!param) | ||
| 485 | return 0; | 509 | return 0; |
| 486 | if (param->policies) | ||
| 487 | sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free); | ||
| 488 | 510 | ||
| 489 | if (!policies) { | 511 | sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free); |
| 490 | param->policies = NULL; | 512 | param->policies = NULL; |
| 513 | |||
| 514 | if (policies == NULL) | ||
| 491 | return 1; | 515 | return 1; |
| 492 | } | ||
| 493 | 516 | ||
| 494 | param->policies = sk_ASN1_OBJECT_new_null(); | 517 | if ((param->policies = sk_ASN1_OBJECT_deep_copy(policies)) == NULL) |
| 495 | if (!param->policies) | ||
| 496 | return 0; | 518 | return 0; |
| 497 | 519 | ||
| 498 | for (i = 0; i < sk_ASN1_OBJECT_num(policies); i++) { | ||
| 499 | oid = sk_ASN1_OBJECT_value(policies, i); | ||
| 500 | doid = OBJ_dup(oid); | ||
| 501 | if (!doid) | ||
| 502 | return 0; | ||
| 503 | if (!sk_ASN1_OBJECT_push(param->policies, doid)) { | ||
| 504 | ASN1_OBJECT_free(doid); | ||
| 505 | return 0; | ||
| 506 | } | ||
| 507 | } | ||
| 508 | return 1; | 520 | return 1; |
| 509 | } | 521 | } |
| 510 | LCRYPTO_ALIAS(X509_VERIFY_PARAM_set1_policies); | 522 | LCRYPTO_ALIAS(X509_VERIFY_PARAM_set1_policies); |
