diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/x509/x509_req.c | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/src/lib/libcrypto/x509/x509_req.c b/src/lib/libcrypto/x509/x509_req.c index 1497b1ec16..34e052341d 100644 --- a/src/lib/libcrypto/x509/x509_req.c +++ b/src/lib/libcrypto/x509/x509_req.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x509_req.c,v 1.35 2024/05/08 08:11:50 tb Exp $ */ | 1 | /* $OpenBSD: x509_req.c,v 1.36 2024/05/08 08:20:08 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -170,15 +170,6 @@ X509_REQ_check_private_key(X509_REQ *x, EVP_PKEY *k) | |||
| 170 | } | 170 | } |
| 171 | LCRYPTO_ALIAS(X509_REQ_check_private_key); | 171 | LCRYPTO_ALIAS(X509_REQ_check_private_key); |
| 172 | 172 | ||
| 173 | /* It seems several organisations had the same idea of including a list of | ||
| 174 | * extensions in a certificate request. There are at least two OIDs that are | ||
| 175 | * used and there may be more: so the list is configurable. | ||
| 176 | */ | ||
| 177 | |||
| 178 | static int ext_nid_list[] = {NID_ext_req, NID_ms_ext_req, NID_undef}; | ||
| 179 | |||
| 180 | static int *ext_nids = ext_nid_list; | ||
| 181 | |||
| 182 | int | 173 | int |
| 183 | X509_REQ_extension_nid(int nid) | 174 | X509_REQ_extension_nid(int nid) |
| 184 | { | 175 | { |
| @@ -191,21 +182,21 @@ X509_REQ_get_extensions(X509_REQ *req) | |||
| 191 | { | 182 | { |
| 192 | X509_ATTRIBUTE *attr; | 183 | X509_ATTRIBUTE *attr; |
| 193 | ASN1_TYPE *ext = NULL; | 184 | ASN1_TYPE *ext = NULL; |
| 194 | int idx, *pnid; | 185 | int idx; |
| 195 | const unsigned char *p; | 186 | const unsigned char *p; |
| 196 | 187 | ||
| 197 | if (req == NULL || req->req_info == NULL || ext_nids == NULL) | 188 | if (req == NULL || req->req_info == NULL) |
| 189 | return NULL; | ||
| 190 | |||
| 191 | if ((idx = X509_REQ_get_attr_by_NID(req, NID_ext_req, -1)) == -1) | ||
| 192 | idx = X509_REQ_get_attr_by_NID(req, NID_ms_ext_req, -1); | ||
| 193 | if (idx == -1) | ||
| 194 | return NULL; | ||
| 195 | |||
| 196 | if ((attr = X509_REQ_get_attr(req, idx)) == NULL) | ||
| 197 | return NULL; | ||
| 198 | if ((ext = X509_ATTRIBUTE_get0_type(attr, 0)) == NULL) | ||
| 198 | return NULL; | 199 | return NULL; |
| 199 | for (pnid = ext_nids; *pnid != NID_undef; pnid++) { | ||
| 200 | idx = X509_REQ_get_attr_by_NID(req, *pnid, -1); | ||
| 201 | if (idx == -1) | ||
| 202 | continue; | ||
| 203 | attr = X509_REQ_get_attr(req, idx); | ||
| 204 | ext = X509_ATTRIBUTE_get0_type(attr, 0); | ||
| 205 | break; | ||
| 206 | } | ||
| 207 | if (ext == NULL) | ||
| 208 | return sk_X509_EXTENSION_new_null(); | ||
| 209 | if (ext->type != V_ASN1_SEQUENCE) | 200 | if (ext->type != V_ASN1_SEQUENCE) |
| 210 | return NULL; | 201 | return NULL; |
| 211 | p = ext->value.sequence->data; | 202 | p = ext->value.sequence->data; |
