diff options
Diffstat (limited to 'src/lib/libcrypto')
| -rw-r--r-- | src/lib/libcrypto/man/X509_NAME_get_index_by_NID.3 | 30 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509/x509name.c | 37 |
2 files changed, 20 insertions, 47 deletions
diff --git a/src/lib/libcrypto/man/X509_NAME_get_index_by_NID.3 b/src/lib/libcrypto/man/X509_NAME_get_index_by_NID.3 index 19a123a4ac..20730fb52a 100644 --- a/src/lib/libcrypto/man/X509_NAME_get_index_by_NID.3 +++ b/src/lib/libcrypto/man/X509_NAME_get_index_by_NID.3 | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | .\" $OpenBSD: X509_NAME_get_index_by_NID.3,v 1.14 2023/05/02 14:13:05 beck Exp $ | 1 | .\" $OpenBSD: X509_NAME_get_index_by_NID.3,v 1.15 2023/05/03 08:10:23 beck Exp $ |
| 2 | .\" OpenSSL aebb9aac Jul 19 09:27:53 2016 -0400 | 2 | .\" OpenSSL aebb9aac Jul 19 09:27:53 2016 -0400 |
| 3 | .\" | 3 | .\" |
| 4 | .\" This file was written by Dr. Stephen Henson <steve@openssl.org>. | 4 | .\" This file was written by Dr. Stephen Henson <steve@openssl.org>. |
| @@ -49,7 +49,7 @@ | |||
| 49 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | 49 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
| 50 | .\" OF THE POSSIBILITY OF SUCH DAMAGE. | 50 | .\" OF THE POSSIBILITY OF SUCH DAMAGE. |
| 51 | .\" | 51 | .\" |
| 52 | .Dd $Mdocdate: May 2 2023 $ | 52 | .Dd $Mdocdate: May 3 2023 $ |
| 53 | .Dt X509_NAME_GET_INDEX_BY_NID 3 | 53 | .Dt X509_NAME_GET_INDEX_BY_NID 3 |
| 54 | .Os | 54 | .Os |
| 55 | .Sh NAME | 55 | .Sh NAME |
| @@ -136,32 +136,22 @@ run from 0 to | |||
| 136 | .Fn X509_NAME_get_text_by_NID | 136 | .Fn X509_NAME_get_text_by_NID |
| 137 | and | 137 | and |
| 138 | .Fn X509_NAME_get_text_by_OBJ | 138 | .Fn X509_NAME_get_text_by_OBJ |
| 139 | retrieve the bytes encoded as UTF-8 from the first entry in | 139 | retrieve the "text" from the first entry in |
| 140 | .Fa name | 140 | .Fa name |
| 141 | which matches | 141 | which matches |
| 142 | .Fa nid | 142 | .Fa nid |
| 143 | or | 143 | or |
| 144 | .Fa obj . | 144 | .Fa obj . |
| 145 | At most | ||
| 146 | .Fa len | ||
| 147 | bytes will be written and the text written to | ||
| 148 | .Fa buf | ||
| 149 | will be NUL terminated. | ||
| 145 | If | 150 | If |
| 146 | .Fa buf | 151 | .Fa buf |
| 147 | is | 152 | is |
| 148 | .Dv NULL , | 153 | .Dv NULL , |
| 149 | nothing is written, but the return value is calculated as usual. | 154 | nothing is written, but the return value is calculated as usual. |
| 150 | If | ||
| 151 | .Fa buf | ||
| 152 | is not | ||
| 153 | .Dv NULL , | ||
| 154 | no more than | ||
| 155 | .Fa len | ||
| 156 | bytes will be written and the text written to | ||
| 157 | .Fa buf | ||
| 158 | will be NUL terminated. | ||
| 159 | .Pp | ||
| 160 | Nothing is written and it is a failure if | ||
| 161 | .Fa len | ||
| 162 | is not large enough to hold the NUL byte terminated UTF-8 encoding of | ||
| 163 | the text, or if the UTF-8 encoding ot the text would contins a NUL | ||
| 164 | byte. | ||
| 165 | .Pp | 155 | .Pp |
| 166 | All relevant | 156 | All relevant |
| 167 | .Dv NID_* | 157 | .Dv NID_* |
| @@ -199,8 +189,8 @@ if the index is invalid. | |||
| 199 | .Fn X509_NAME_get_text_by_NID | 189 | .Fn X509_NAME_get_text_by_NID |
| 200 | and | 190 | and |
| 201 | .Fn X509_NAME_get_text_by_OBJ | 191 | .Fn X509_NAME_get_text_by_OBJ |
| 202 | return the length of the output UTF-8 string written, not counting the | 192 | return the length of the output string written, not counting the |
| 203 | terminating NUL, or -1 in the case of an error or no match being found. | 193 | terminating NUL, or -1 if no match is found. |
| 204 | .Pp | 194 | .Pp |
| 205 | In some cases of failure of | 195 | In some cases of failure of |
| 206 | .Fn X509_NAME_get_index_by_NID | 196 | .Fn X509_NAME_get_index_by_NID |
diff --git a/src/lib/libcrypto/x509/x509name.c b/src/lib/libcrypto/x509/x509name.c index 319d79d74f..ecdf473ea9 100644 --- a/src/lib/libcrypto/x509/x509name.c +++ b/src/lib/libcrypto/x509/x509name.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x509name.c,v 1.33 2023/05/03 07:13:18 beck Exp $ */ | 1 | /* $OpenBSD: x509name.c,v 1.34 2023/05/03 08:10:23 beck 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 | * |
| @@ -66,7 +66,6 @@ | |||
| 66 | #include <openssl/stack.h> | 66 | #include <openssl/stack.h> |
| 67 | #include <openssl/x509.h> | 67 | #include <openssl/x509.h> |
| 68 | 68 | ||
| 69 | #include "bytestring.h" | ||
| 70 | #include "x509_local.h" | 69 | #include "x509_local.h" |
| 71 | 70 | ||
| 72 | int | 71 | int |
| @@ -85,37 +84,21 @@ int | |||
| 85 | X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, char *buf, | 84 | X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, char *buf, |
| 86 | int len) | 85 | int len) |
| 87 | { | 86 | { |
| 88 | unsigned char *text = NULL; | 87 | int i; |
| 89 | ASN1_STRING *data; | 88 | ASN1_STRING *data; |
| 90 | int i, text_len; | ||
| 91 | int ret = -1; | ||
| 92 | CBS cbs; | ||
| 93 | 89 | ||
| 94 | i = X509_NAME_get_index_by_OBJ(name, obj, -1); | 90 | i = X509_NAME_get_index_by_OBJ(name, obj, -1); |
| 95 | if (i < 0) | 91 | if (i < 0) |
| 96 | goto err; | 92 | return (-1); |
| 97 | data = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name, i)); | 93 | data = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name, i)); |
| 98 | /* | 94 | i = (data->length > (len - 1)) ? (len - 1) : data->length; |
| 99 | * Fail if we cannot encode as UTF-8, or if the UTF-8 encoding of the | 95 | if (buf == NULL) |
| 100 | * string contains a 0 byte, because mortal callers seldom handle the | 96 | return (data->length); |
| 101 | * length difference correctly | 97 | if (i >= 0) { |
| 102 | */ | 98 | memcpy(buf, data->data, i); |
| 103 | if ((text_len = ASN1_STRING_to_UTF8(&text, data)) < 0) | 99 | buf[i] = '\0'; |
| 104 | goto err; | ||
| 105 | CBS_init(&cbs, text, text_len); | ||
| 106 | if (CBS_contains_zero_byte(&cbs)) | ||
| 107 | goto err; | ||
| 108 | /* We still support the "pass NULL to find out how much" API */ | ||
| 109 | if (buf != NULL) { | ||
| 110 | if (len <= 0 || !CBS_write_bytes(&cbs, buf, len - 1, NULL)) | ||
| 111 | goto err; | ||
| 112 | /* It must be a C string */ | ||
| 113 | buf[text_len] = '\0'; | ||
| 114 | } | 100 | } |
| 115 | ret = text_len; | 101 | return (i); |
| 116 | err: | ||
| 117 | free(text); | ||
| 118 | return (ret); | ||
| 119 | } | 102 | } |
| 120 | LCRYPTO_ALIAS(X509_NAME_get_text_by_OBJ); | 103 | LCRYPTO_ALIAS(X509_NAME_get_text_by_OBJ); |
| 121 | 104 | ||
