sync with OpenBSD -current

This commit is contained in:
purplerain 2024-03-29 19:36:15 +00:00
parent 6278c437f5
commit 784d5aeff3
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
93 changed files with 1817 additions and 10181 deletions

View file

@ -1,4 +1,4 @@
/* $OpenBSD: x509_vpm.c,v 1.43 2024/03/29 00:25:32 tb Exp $ */
/* $OpenBSD: x509_vpm.c,v 1.45 2024/03/29 04:50:11 tb Exp $ */
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
* project 2004.
*/
@ -464,48 +464,59 @@ LCRYPTO_ALIAS(X509_VERIFY_PARAM_set_time);
int
X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, ASN1_OBJECT *policy)
{
if (!param->policies) {
if (param->policies == NULL)
param->policies = sk_ASN1_OBJECT_new_null();
if (!param->policies)
return 0;
}
if (!sk_ASN1_OBJECT_push(param->policies, policy))
if (param->policies == NULL)
return 0;
if (sk_ASN1_OBJECT_push(param->policies, policy) <= 0)
return 0;
return 1;
}
LCRYPTO_ALIAS(X509_VERIFY_PARAM_add0_policy);
static STACK_OF(ASN1_OBJECT) *
sk_ASN1_OBJECT_deep_copy(const STACK_OF(ASN1_OBJECT) *sk)
{
STACK_OF(ASN1_OBJECT) *objs;
ASN1_OBJECT *obj = NULL;
int i;
if ((objs = sk_ASN1_OBJECT_new_null()) == NULL)
goto err;
for (i = 0; i < sk_ASN1_OBJECT_num(sk); i++) {
if ((obj = OBJ_dup(sk_ASN1_OBJECT_value(sk, i))) == NULL)
goto err;
if (sk_ASN1_OBJECT_push(objs, obj) <= 0)
goto err;
obj = NULL;
}
return objs;
err:
sk_ASN1_OBJECT_pop_free(objs, ASN1_OBJECT_free);
ASN1_OBJECT_free(obj);
return NULL;
}
int
X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param,
STACK_OF(ASN1_OBJECT) *policies)
{
int i;
ASN1_OBJECT *oid, *doid;
if (!param)
if (param == NULL)
return 0;
if (param->policies)
sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free);
if (!policies) {
param->policies = NULL;
sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free);
param->policies = NULL;
if (policies == NULL)
return 1;
}
param->policies = sk_ASN1_OBJECT_new_null();
if (!param->policies)
if ((param->policies = sk_ASN1_OBJECT_deep_copy(policies)) == NULL)
return 0;
for (i = 0; i < sk_ASN1_OBJECT_num(policies); i++) {
oid = sk_ASN1_OBJECT_value(policies, i);
doid = OBJ_dup(oid);
if (!doid)
return 0;
if (!sk_ASN1_OBJECT_push(param->policies, doid)) {
ASN1_OBJECT_free(doid);
return 0;
}
}
return 1;
}
LCRYPTO_ALIAS(X509_VERIFY_PARAM_set1_policies);