diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/x509v3/v3_ia5.c | 59 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509v3/v3_info.c | 129 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509v3/v3_int.c | 35 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509v3/v3_lib.c | 179 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509v3/v3conf.c | 30 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509v3/v3err.c | 299 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509v3/v3prin.c | 21 | ||||
| -rw-r--r-- | src/lib/libssl/src/crypto/x509v3/v3_ia5.c | 59 | ||||
| -rw-r--r-- | src/lib/libssl/src/crypto/x509v3/v3_info.c | 129 | ||||
| -rw-r--r-- | src/lib/libssl/src/crypto/x509v3/v3_int.c | 35 | ||||
| -rw-r--r-- | src/lib/libssl/src/crypto/x509v3/v3_lib.c | 179 | ||||
| -rw-r--r-- | src/lib/libssl/src/crypto/x509v3/v3conf.c | 30 | ||||
| -rw-r--r-- | src/lib/libssl/src/crypto/x509v3/v3err.c | 299 | ||||
| -rw-r--r-- | src/lib/libssl/src/crypto/x509v3/v3prin.c | 21 |
14 files changed, 818 insertions, 686 deletions
diff --git a/src/lib/libcrypto/x509v3/v3_ia5.c b/src/lib/libcrypto/x509v3/v3_ia5.c index 98789b36e9..090fe49b20 100644 --- a/src/lib/libcrypto/x509v3/v3_ia5.c +++ b/src/lib/libcrypto/x509v3/v3_ia5.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -64,26 +64,29 @@ | |||
| 64 | #include <openssl/x509v3.h> | 64 | #include <openssl/x509v3.h> |
| 65 | 65 | ||
| 66 | static char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); | 66 | static char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); |
| 67 | static ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str); | 67 | static ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, |
| 68 | const X509V3_EXT_METHOD v3_ns_ia5_list[] = { | 68 | X509V3_CTX *ctx, char *str); |
| 69 | EXT_IA5STRING(NID_netscape_base_url), | ||
| 70 | EXT_IA5STRING(NID_netscape_revocation_url), | ||
| 71 | EXT_IA5STRING(NID_netscape_ca_revocation_url), | ||
| 72 | EXT_IA5STRING(NID_netscape_renewal_url), | ||
| 73 | EXT_IA5STRING(NID_netscape_ca_policy_url), | ||
| 74 | EXT_IA5STRING(NID_netscape_ssl_server_name), | ||
| 75 | EXT_IA5STRING(NID_netscape_comment), | ||
| 76 | EXT_END | ||
| 77 | }; | ||
| 78 | 69 | ||
| 70 | const X509V3_EXT_METHOD v3_ns_ia5_list[] = { | ||
| 71 | EXT_IA5STRING(NID_netscape_base_url), | ||
| 72 | EXT_IA5STRING(NID_netscape_revocation_url), | ||
| 73 | EXT_IA5STRING(NID_netscape_ca_revocation_url), | ||
| 74 | EXT_IA5STRING(NID_netscape_renewal_url), | ||
| 75 | EXT_IA5STRING(NID_netscape_ca_policy_url), | ||
| 76 | EXT_IA5STRING(NID_netscape_ssl_server_name), | ||
| 77 | EXT_IA5STRING(NID_netscape_comment), | ||
| 78 | EXT_END | ||
| 79 | }; | ||
| 79 | 80 | ||
| 80 | static char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, | 81 | static char * |
| 81 | ASN1_IA5STRING *ia5) | 82 | i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5) |
| 82 | { | 83 | { |
| 83 | char *tmp; | 84 | char *tmp; |
| 84 | if(!ia5 || !ia5->length) return NULL; | 85 | |
| 85 | if(!(tmp = malloc(ia5->length + 1))) { | 86 | if (!ia5 || !ia5->length) |
| 86 | X509V3err(X509V3_F_I2S_ASN1_IA5STRING,ERR_R_MALLOC_FAILURE); | 87 | return NULL; |
| 88 | if (!(tmp = malloc(ia5->length + 1))) { | ||
| 89 | X509V3err(X509V3_F_I2S_ASN1_IA5STRING, ERR_R_MALLOC_FAILURE); | ||
| 87 | return NULL; | 90 | return NULL; |
| 88 | } | 91 | } |
| 89 | memcpy(tmp, ia5->data, ia5->length); | 92 | memcpy(tmp, ia5->data, ia5->length); |
| @@ -91,23 +94,25 @@ static char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, | |||
| 91 | return tmp; | 94 | return tmp; |
| 92 | } | 95 | } |
| 93 | 96 | ||
| 94 | static ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, | 97 | static ASN1_IA5STRING * |
| 95 | X509V3_CTX *ctx, char *str) | 98 | s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str) |
| 96 | { | 99 | { |
| 97 | ASN1_IA5STRING *ia5; | 100 | ASN1_IA5STRING *ia5; |
| 98 | if(!str) { | 101 | if (!str) { |
| 99 | X509V3err(X509V3_F_S2I_ASN1_IA5STRING,X509V3_R_INVALID_NULL_ARGUMENT); | 102 | X509V3err(X509V3_F_S2I_ASN1_IA5STRING, |
| 103 | X509V3_R_INVALID_NULL_ARGUMENT); | ||
| 100 | return NULL; | 104 | return NULL; |
| 101 | } | 105 | } |
| 102 | if(!(ia5 = M_ASN1_IA5STRING_new())) goto err; | 106 | if (!(ia5 = M_ASN1_IA5STRING_new())) |
| 103 | if(!ASN1_STRING_set((ASN1_STRING *)ia5, (unsigned char*)str, | 107 | goto err; |
| 104 | strlen(str))) { | 108 | if (!ASN1_STRING_set((ASN1_STRING *)ia5, (unsigned char*)str, |
| 109 | strlen(str))) { | ||
| 105 | M_ASN1_IA5STRING_free(ia5); | 110 | M_ASN1_IA5STRING_free(ia5); |
| 106 | goto err; | 111 | goto err; |
| 107 | } | 112 | } |
| 108 | return ia5; | 113 | return ia5; |
| 109 | err: | 114 | |
| 110 | X509V3err(X509V3_F_S2I_ASN1_IA5STRING,ERR_R_MALLOC_FAILURE); | 115 | err: |
| 116 | X509V3err(X509V3_F_S2I_ASN1_IA5STRING, ERR_R_MALLOC_FAILURE); | ||
| 111 | return NULL; | 117 | return NULL; |
| 112 | } | 118 | } |
| 113 | |||
diff --git a/src/lib/libcrypto/x509v3/v3_info.c b/src/lib/libcrypto/x509v3/v3_info.c index c9d6c97b51..7853e3e23b 100644 --- a/src/lib/libcrypto/x509v3/v3_info.c +++ b/src/lib/libcrypto/x509v3/v3_info.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -63,29 +63,33 @@ | |||
| 63 | #include <openssl/asn1t.h> | 63 | #include <openssl/asn1t.h> |
| 64 | #include <openssl/x509v3.h> | 64 | #include <openssl/x509v3.h> |
| 65 | 65 | ||
| 66 | static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, | 66 | static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS( |
| 67 | AUTHORITY_INFO_ACCESS *ainfo, | 67 | X509V3_EXT_METHOD *method, AUTHORITY_INFO_ACCESS *ainfo, |
| 68 | STACK_OF(CONF_VALUE) *ret); | 68 | STACK_OF(CONF_VALUE) *ret); |
| 69 | static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, | 69 | static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS( |
| 70 | X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); | 70 | X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); |
| 71 | 71 | ||
| 72 | const X509V3_EXT_METHOD v3_info = | 72 | const X509V3_EXT_METHOD v3_info = { |
| 73 | { NID_info_access, X509V3_EXT_MULTILINE, ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), | 73 | NID_info_access, X509V3_EXT_MULTILINE, |
| 74 | 0,0,0,0, | 74 | ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), |
| 75 | 0,0, | 75 | 0, 0, 0, 0, |
| 76 | (X509V3_EXT_I2V)i2v_AUTHORITY_INFO_ACCESS, | 76 | 0, 0, |
| 77 | (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS, | 77 | (X509V3_EXT_I2V)i2v_AUTHORITY_INFO_ACCESS, |
| 78 | 0,0, | 78 | (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS, |
| 79 | NULL}; | 79 | 0, 0, |
| 80 | 80 | NULL | |
| 81 | const X509V3_EXT_METHOD v3_sinfo = | 81 | }; |
| 82 | { NID_sinfo_access, X509V3_EXT_MULTILINE, ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), | 82 | |
| 83 | 0,0,0,0, | 83 | const X509V3_EXT_METHOD v3_sinfo = { |
| 84 | 0,0, | 84 | NID_sinfo_access, X509V3_EXT_MULTILINE, |
| 85 | (X509V3_EXT_I2V)i2v_AUTHORITY_INFO_ACCESS, | 85 | ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), |
| 86 | (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS, | 86 | 0, 0, 0, 0, |
| 87 | 0,0, | 87 | 0, 0, |
| 88 | NULL}; | 88 | (X509V3_EXT_I2V)i2v_AUTHORITY_INFO_ACCESS, |
| 89 | (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS, | ||
| 90 | 0, 0, | ||
| 91 | NULL | ||
| 92 | }; | ||
| 89 | 93 | ||
| 90 | ASN1_SEQUENCE(ACCESS_DESCRIPTION) = { | 94 | ASN1_SEQUENCE(ACCESS_DESCRIPTION) = { |
| 91 | ASN1_SIMPLE(ACCESS_DESCRIPTION, method, ASN1_OBJECT), | 95 | ASN1_SIMPLE(ACCESS_DESCRIPTION, method, ASN1_OBJECT), |
| @@ -94,31 +98,34 @@ ASN1_SEQUENCE(ACCESS_DESCRIPTION) = { | |||
| 94 | 98 | ||
| 95 | IMPLEMENT_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) | 99 | IMPLEMENT_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) |
| 96 | 100 | ||
| 97 | ASN1_ITEM_TEMPLATE(AUTHORITY_INFO_ACCESS) = | 101 | ASN1_ITEM_TEMPLATE(AUTHORITY_INFO_ACCESS) = |
| 98 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, GeneralNames, ACCESS_DESCRIPTION) | 102 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, GeneralNames, |
| 103 | ACCESS_DESCRIPTION) | ||
| 99 | ASN1_ITEM_TEMPLATE_END(AUTHORITY_INFO_ACCESS) | 104 | ASN1_ITEM_TEMPLATE_END(AUTHORITY_INFO_ACCESS) |
| 100 | 105 | ||
| 101 | IMPLEMENT_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) | 106 | IMPLEMENT_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) |
| 102 | 107 | ||
| 103 | static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, | 108 | static STACK_OF(CONF_VALUE) * |
| 104 | AUTHORITY_INFO_ACCESS *ainfo, | 109 | i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, |
| 105 | STACK_OF(CONF_VALUE) *ret) | 110 | AUTHORITY_INFO_ACCESS *ainfo, STACK_OF(CONF_VALUE) *ret) |
| 106 | { | 111 | { |
| 107 | ACCESS_DESCRIPTION *desc; | 112 | ACCESS_DESCRIPTION *desc; |
| 108 | int i,nlen; | 113 | int i, nlen; |
| 109 | char objtmp[80], *ntmp; | 114 | char objtmp[80], *ntmp; |
| 110 | CONF_VALUE *vtmp; | 115 | CONF_VALUE *vtmp; |
| 111 | for(i = 0; i < sk_ACCESS_DESCRIPTION_num(ainfo); i++) { | 116 | |
| 117 | for (i = 0; i < sk_ACCESS_DESCRIPTION_num(ainfo); i++) { | ||
| 112 | desc = sk_ACCESS_DESCRIPTION_value(ainfo, i); | 118 | desc = sk_ACCESS_DESCRIPTION_value(ainfo, i); |
| 113 | ret = i2v_GENERAL_NAME(method, desc->location, ret); | 119 | ret = i2v_GENERAL_NAME(method, desc->location, ret); |
| 114 | if(!ret) break; | 120 | if (!ret) |
| 121 | break; | ||
| 115 | vtmp = sk_CONF_VALUE_value(ret, i); | 122 | vtmp = sk_CONF_VALUE_value(ret, i); |
| 116 | i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method); | 123 | i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method); |
| 117 | nlen = strlen(objtmp) + strlen(vtmp->name) + 5; | 124 | nlen = strlen(objtmp) + strlen(vtmp->name) + 5; |
| 118 | ntmp = malloc(nlen); | 125 | ntmp = malloc(nlen); |
| 119 | if(!ntmp) { | 126 | if (!ntmp) { |
| 120 | X509V3err(X509V3_F_I2V_AUTHORITY_INFO_ACCESS, | 127 | X509V3err(X509V3_F_I2V_AUTHORITY_INFO_ACCESS, |
| 121 | ERR_R_MALLOC_FAILURE); | 128 | ERR_R_MALLOC_FAILURE); |
| 122 | return NULL; | 129 | return NULL; |
| 123 | } | 130 | } |
| 124 | strlcpy(ntmp, objtmp, nlen); | 131 | strlcpy(ntmp, objtmp, nlen); |
| @@ -126,49 +133,57 @@ static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method | |||
| 126 | strlcat(ntmp, vtmp->name, nlen); | 133 | strlcat(ntmp, vtmp->name, nlen); |
| 127 | free(vtmp->name); | 134 | free(vtmp->name); |
| 128 | vtmp->name = ntmp; | 135 | vtmp->name = ntmp; |
| 129 | 136 | ||
| 130 | } | 137 | } |
| 131 | if(!ret) return sk_CONF_VALUE_new_null(); | 138 | if (!ret) |
| 139 | return sk_CONF_VALUE_new_null(); | ||
| 132 | return ret; | 140 | return ret; |
| 133 | } | 141 | } |
| 134 | 142 | ||
| 135 | static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, | 143 | static AUTHORITY_INFO_ACCESS * |
| 136 | X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) | 144 | v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, |
| 145 | STACK_OF(CONF_VALUE) *nval) | ||
| 137 | { | 146 | { |
| 138 | AUTHORITY_INFO_ACCESS *ainfo = NULL; | 147 | AUTHORITY_INFO_ACCESS *ainfo = NULL; |
| 139 | CONF_VALUE *cnf, ctmp; | 148 | CONF_VALUE *cnf, ctmp; |
| 140 | ACCESS_DESCRIPTION *acc; | 149 | ACCESS_DESCRIPTION *acc; |
| 141 | int i, objlen; | 150 | int i, objlen; |
| 142 | char *objtmp, *ptmp; | 151 | char *objtmp, *ptmp; |
| 143 | if(!(ainfo = sk_ACCESS_DESCRIPTION_new_null())) { | 152 | |
| 144 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS,ERR_R_MALLOC_FAILURE); | 153 | if (!(ainfo = sk_ACCESS_DESCRIPTION_new_null())) { |
| 154 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, | ||
| 155 | ERR_R_MALLOC_FAILURE); | ||
| 145 | return NULL; | 156 | return NULL; |
| 146 | } | 157 | } |
| 147 | for(i = 0; i < sk_CONF_VALUE_num(nval); i++) { | 158 | for (i = 0; i < sk_CONF_VALUE_num(nval); i++) { |
| 148 | cnf = sk_CONF_VALUE_value(nval, i); | 159 | cnf = sk_CONF_VALUE_value(nval, i); |
| 149 | if(!(acc = ACCESS_DESCRIPTION_new()) | 160 | if (!(acc = ACCESS_DESCRIPTION_new()) || |
| 150 | || !sk_ACCESS_DESCRIPTION_push(ainfo, acc)) { | 161 | !sk_ACCESS_DESCRIPTION_push(ainfo, acc)) { |
| 151 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS,ERR_R_MALLOC_FAILURE); | 162 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, |
| 163 | ERR_R_MALLOC_FAILURE); | ||
| 152 | goto err; | 164 | goto err; |
| 153 | } | 165 | } |
| 154 | ptmp = strchr(cnf->name, ';'); | 166 | ptmp = strchr(cnf->name, ';'); |
| 155 | if(!ptmp) { | 167 | if (!ptmp) { |
| 156 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS,X509V3_R_INVALID_SYNTAX); | 168 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, |
| 169 | X509V3_R_INVALID_SYNTAX); | ||
| 157 | goto err; | 170 | goto err; |
| 158 | } | 171 | } |
| 159 | objlen = ptmp - cnf->name; | 172 | objlen = ptmp - cnf->name; |
| 160 | ctmp.name = ptmp + 1; | 173 | ctmp.name = ptmp + 1; |
| 161 | ctmp.value = cnf->value; | 174 | ctmp.value = cnf->value; |
| 162 | if(!v2i_GENERAL_NAME_ex(acc->location, method, ctx, &ctmp, 0)) | 175 | if (!v2i_GENERAL_NAME_ex(acc->location, method, ctx, &ctmp, 0)) |
| 163 | goto err; | 176 | goto err; |
| 164 | if(!(objtmp = malloc(objlen + 1))) { | 177 | if (!(objtmp = malloc(objlen + 1))) { |
| 165 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS,ERR_R_MALLOC_FAILURE); | 178 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, |
| 179 | ERR_R_MALLOC_FAILURE); | ||
| 166 | goto err; | 180 | goto err; |
| 167 | } | 181 | } |
| 168 | strlcpy(objtmp, cnf->name, objlen + 1); | 182 | strlcpy(objtmp, cnf->name, objlen + 1); |
| 169 | acc->method = OBJ_txt2obj(objtmp, 0); | 183 | acc->method = OBJ_txt2obj(objtmp, 0); |
| 170 | if(!acc->method) { | 184 | if (!acc->method) { |
| 171 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS,X509V3_R_BAD_OBJECT); | 185 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, |
| 186 | X509V3_R_BAD_OBJECT); | ||
| 172 | ERR_add_error_data(2, "value=", objtmp); | 187 | ERR_add_error_data(2, "value=", objtmp); |
| 173 | free(objtmp); | 188 | free(objtmp); |
| 174 | goto err; | 189 | goto err; |
| @@ -177,16 +192,18 @@ static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *metho | |||
| 177 | 192 | ||
| 178 | } | 193 | } |
| 179 | return ainfo; | 194 | return ainfo; |
| 180 | err: | 195 | |
| 196 | err: | ||
| 181 | sk_ACCESS_DESCRIPTION_pop_free(ainfo, ACCESS_DESCRIPTION_free); | 197 | sk_ACCESS_DESCRIPTION_pop_free(ainfo, ACCESS_DESCRIPTION_free); |
| 182 | return NULL; | 198 | return NULL; |
| 183 | } | 199 | } |
| 184 | 200 | ||
| 185 | int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION* a) | 201 | int |
| 186 | { | 202 | i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION* a) |
| 203 | { | ||
| 187 | i2a_ASN1_OBJECT(bp, a->method); | 204 | i2a_ASN1_OBJECT(bp, a->method); |
| 188 | #ifdef UNDEF | 205 | #ifdef UNDEF |
| 189 | i2a_GENERAL_NAME(bp, a->location); | 206 | i2a_GENERAL_NAME(bp, a->location); |
| 190 | #endif | 207 | #endif |
| 191 | return 2; | 208 | return 2; |
| 192 | } | 209 | } |
diff --git a/src/lib/libcrypto/x509v3/v3_int.c b/src/lib/libcrypto/x509v3/v3_int.c index 4bfd14cf46..51f9e5cdc6 100644 --- a/src/lib/libcrypto/x509v3/v3_int.c +++ b/src/lib/libcrypto/x509v3/v3_int.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -60,30 +60,35 @@ | |||
| 60 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
| 61 | #include <openssl/x509v3.h> | 61 | #include <openssl/x509v3.h> |
| 62 | 62 | ||
| 63 | const X509V3_EXT_METHOD v3_crl_num = { | 63 | const X509V3_EXT_METHOD v3_crl_num = { |
| 64 | NID_crl_number, 0, ASN1_ITEM_ref(ASN1_INTEGER), | 64 | NID_crl_number, 0, ASN1_ITEM_ref(ASN1_INTEGER), |
| 65 | 0,0,0,0, | 65 | 0, 0, 0, 0, |
| 66 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, | 66 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, |
| 67 | 0, | 67 | 0, |
| 68 | 0,0,0,0, NULL}; | 68 | 0, 0, 0, 0, |
| 69 | NULL | ||
| 70 | }; | ||
| 69 | 71 | ||
| 70 | const X509V3_EXT_METHOD v3_delta_crl = { | 72 | const X509V3_EXT_METHOD v3_delta_crl = { |
| 71 | NID_delta_crl, 0, ASN1_ITEM_ref(ASN1_INTEGER), | 73 | NID_delta_crl, 0, ASN1_ITEM_ref(ASN1_INTEGER), |
| 72 | 0,0,0,0, | 74 | 0, 0, 0, 0, |
| 73 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, | 75 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, |
| 74 | 0, | 76 | 0, |
| 75 | 0,0,0,0, NULL}; | 77 | 0, 0, 0, 0, |
| 78 | NULL | ||
| 79 | }; | ||
| 76 | 80 | ||
| 77 | static void * s2i_asn1_int(X509V3_EXT_METHOD *meth, X509V3_CTX *ctx, char *value) | 81 | static void * |
| 78 | { | 82 | s2i_asn1_int(X509V3_EXT_METHOD *meth, X509V3_CTX *ctx, char *value) |
| 83 | { | ||
| 79 | return s2i_ASN1_INTEGER(meth, value); | 84 | return s2i_ASN1_INTEGER(meth, value); |
| 80 | } | 85 | } |
| 81 | 86 | ||
| 82 | const X509V3_EXT_METHOD v3_inhibit_anyp = { | 87 | const X509V3_EXT_METHOD v3_inhibit_anyp = { |
| 83 | NID_inhibit_any_policy, 0, ASN1_ITEM_ref(ASN1_INTEGER), | 88 | NID_inhibit_any_policy, 0, ASN1_ITEM_ref(ASN1_INTEGER), |
| 84 | 0,0,0,0, | 89 | 0, 0, 0, 0, |
| 85 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, | 90 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, |
| 86 | (X509V3_EXT_S2I)s2i_asn1_int, | 91 | (X509V3_EXT_S2I)s2i_asn1_int, |
| 87 | 0,0,0,0, NULL}; | 92 | 0, 0, 0, 0, |
| 88 | 93 | NULL | |
| 89 | 94 | }; | |
diff --git a/src/lib/libcrypto/x509v3/v3_lib.c b/src/lib/libcrypto/x509v3/v3_lib.c index 8d5e6ee911..3f610cdaa3 100644 --- a/src/lib/libcrypto/x509v3/v3_lib.c +++ b/src/lib/libcrypto/x509v3/v3_lib.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -67,74 +67,87 @@ | |||
| 67 | static STACK_OF(X509V3_EXT_METHOD) *ext_list = NULL; | 67 | static STACK_OF(X509V3_EXT_METHOD) *ext_list = NULL; |
| 68 | 68 | ||
| 69 | static int ext_cmp(const X509V3_EXT_METHOD * const *a, | 69 | static int ext_cmp(const X509V3_EXT_METHOD * const *a, |
| 70 | const X509V3_EXT_METHOD * const *b); | 70 | const X509V3_EXT_METHOD * const *b); |
| 71 | static void ext_list_free(X509V3_EXT_METHOD *ext); | 71 | static void ext_list_free(X509V3_EXT_METHOD *ext); |
| 72 | 72 | ||
| 73 | int X509V3_EXT_add(X509V3_EXT_METHOD *ext) | 73 | int |
| 74 | X509V3_EXT_add(X509V3_EXT_METHOD *ext) | ||
| 74 | { | 75 | { |
| 75 | if(!ext_list && !(ext_list = sk_X509V3_EXT_METHOD_new(ext_cmp))) { | 76 | if (!ext_list && !(ext_list = sk_X509V3_EXT_METHOD_new(ext_cmp))) { |
| 76 | X509V3err(X509V3_F_X509V3_EXT_ADD,ERR_R_MALLOC_FAILURE); | 77 | X509V3err(X509V3_F_X509V3_EXT_ADD, ERR_R_MALLOC_FAILURE); |
| 77 | return 0; | 78 | return 0; |
| 78 | } | 79 | } |
| 79 | if(!sk_X509V3_EXT_METHOD_push(ext_list, ext)) { | 80 | if (!sk_X509V3_EXT_METHOD_push(ext_list, ext)) { |
| 80 | X509V3err(X509V3_F_X509V3_EXT_ADD,ERR_R_MALLOC_FAILURE); | 81 | X509V3err(X509V3_F_X509V3_EXT_ADD, ERR_R_MALLOC_FAILURE); |
| 81 | return 0; | 82 | return 0; |
| 82 | } | 83 | } |
| 83 | return 1; | 84 | return 1; |
| 84 | } | 85 | } |
| 85 | 86 | ||
| 86 | static int ext_cmp(const X509V3_EXT_METHOD * const *a, | 87 | static int |
| 87 | const X509V3_EXT_METHOD * const *b) | 88 | ext_cmp(const X509V3_EXT_METHOD * const *a, const X509V3_EXT_METHOD * const *b) |
| 88 | { | 89 | { |
| 89 | return ((*a)->ext_nid - (*b)->ext_nid); | 90 | return ((*a)->ext_nid - (*b)->ext_nid); |
| 90 | } | 91 | } |
| 91 | 92 | ||
| 92 | DECLARE_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, const X509V3_EXT_METHOD *, | 93 | DECLARE_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, |
| 93 | ext); | 94 | const X509V3_EXT_METHOD *, ext); |
| 94 | IMPLEMENT_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, | 95 | IMPLEMENT_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, |
| 95 | const X509V3_EXT_METHOD *, ext); | 96 | const X509V3_EXT_METHOD *, ext); |
| 96 | 97 | ||
| 97 | const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid) | 98 | const X509V3_EXT_METHOD * |
| 99 | X509V3_EXT_get_nid(int nid) | ||
| 98 | { | 100 | { |
| 99 | X509V3_EXT_METHOD tmp; | 101 | X509V3_EXT_METHOD tmp; |
| 100 | const X509V3_EXT_METHOD *t = &tmp, * const *ret; | 102 | const X509V3_EXT_METHOD *t = &tmp, * const *ret; |
| 101 | int idx; | 103 | int idx; |
| 102 | if(nid < 0) return NULL; | 104 | |
| 105 | if (nid < 0) | ||
| 106 | return NULL; | ||
| 103 | tmp.ext_nid = nid; | 107 | tmp.ext_nid = nid; |
| 104 | ret = OBJ_bsearch_ext(&t, standard_exts, STANDARD_EXTENSION_COUNT); | 108 | ret = OBJ_bsearch_ext(&t, standard_exts, STANDARD_EXTENSION_COUNT); |
| 105 | if(ret) return *ret; | 109 | if (ret) |
| 106 | if(!ext_list) return NULL; | 110 | return *ret; |
| 111 | if (!ext_list) | ||
| 112 | return NULL; | ||
| 107 | idx = sk_X509V3_EXT_METHOD_find(ext_list, &tmp); | 113 | idx = sk_X509V3_EXT_METHOD_find(ext_list, &tmp); |
| 108 | if(idx == -1) return NULL; | 114 | if (idx == -1) |
| 115 | return NULL; | ||
| 109 | return sk_X509V3_EXT_METHOD_value(ext_list, idx); | 116 | return sk_X509V3_EXT_METHOD_value(ext_list, idx); |
| 110 | } | 117 | } |
| 111 | 118 | ||
| 112 | const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext) | 119 | const X509V3_EXT_METHOD * |
| 120 | X509V3_EXT_get(X509_EXTENSION *ext) | ||
| 113 | { | 121 | { |
| 114 | int nid; | 122 | int nid; |
| 115 | if((nid = OBJ_obj2nid(ext->object)) == NID_undef) return NULL; | 123 | |
| 124 | if ((nid = OBJ_obj2nid(ext->object)) == NID_undef) | ||
| 125 | return NULL; | ||
| 116 | return X509V3_EXT_get_nid(nid); | 126 | return X509V3_EXT_get_nid(nid); |
| 117 | } | 127 | } |
| 118 | 128 | ||
| 119 | 129 | int | |
| 120 | int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist) | 130 | X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist) |
| 121 | { | 131 | { |
| 122 | for(;extlist->ext_nid!=-1;extlist++) | 132 | for (; extlist->ext_nid!=-1; extlist++) |
| 123 | if(!X509V3_EXT_add(extlist)) return 0; | 133 | if (!X509V3_EXT_add(extlist)) |
| 134 | return 0; | ||
| 124 | return 1; | 135 | return 1; |
| 125 | } | 136 | } |
| 126 | 137 | ||
| 127 | int X509V3_EXT_add_alias(int nid_to, int nid_from) | 138 | int |
| 139 | X509V3_EXT_add_alias(int nid_to, int nid_from) | ||
| 128 | { | 140 | { |
| 129 | const X509V3_EXT_METHOD *ext; | 141 | const X509V3_EXT_METHOD *ext; |
| 130 | X509V3_EXT_METHOD *tmpext; | 142 | X509V3_EXT_METHOD *tmpext; |
| 131 | 143 | ||
| 132 | if(!(ext = X509V3_EXT_get_nid(nid_from))) { | 144 | if (!(ext = X509V3_EXT_get_nid(nid_from))) { |
| 133 | X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS,X509V3_R_EXTENSION_NOT_FOUND); | 145 | X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS, |
| 146 | X509V3_R_EXTENSION_NOT_FOUND); | ||
| 134 | return 0; | 147 | return 0; |
| 135 | } | 148 | } |
| 136 | if(!(tmpext = malloc(sizeof(X509V3_EXT_METHOD)))) { | 149 | if (!(tmpext = malloc(sizeof(X509V3_EXT_METHOD)))) { |
| 137 | X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS,ERR_R_MALLOC_FAILURE); | 150 | X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS, ERR_R_MALLOC_FAILURE); |
| 138 | return 0; | 151 | return 0; |
| 139 | } | 152 | } |
| 140 | *tmpext = *ext; | 153 | *tmpext = *ext; |
| @@ -143,36 +156,44 @@ int X509V3_EXT_add_alias(int nid_to, int nid_from) | |||
| 143 | return X509V3_EXT_add(tmpext); | 156 | return X509V3_EXT_add(tmpext); |
| 144 | } | 157 | } |
| 145 | 158 | ||
| 146 | void X509V3_EXT_cleanup(void) | 159 | void |
| 160 | X509V3_EXT_cleanup(void) | ||
| 147 | { | 161 | { |
| 148 | sk_X509V3_EXT_METHOD_pop_free(ext_list, ext_list_free); | 162 | sk_X509V3_EXT_METHOD_pop_free(ext_list, ext_list_free); |
| 149 | ext_list = NULL; | 163 | ext_list = NULL; |
| 150 | } | 164 | } |
| 151 | 165 | ||
| 152 | static void ext_list_free(X509V3_EXT_METHOD *ext) | 166 | static void |
| 167 | ext_list_free(X509V3_EXT_METHOD *ext) | ||
| 153 | { | 168 | { |
| 154 | if(ext->ext_flags & X509V3_EXT_DYNAMIC) free(ext); | 169 | if (ext->ext_flags & X509V3_EXT_DYNAMIC) |
| 170 | free(ext); | ||
| 155 | } | 171 | } |
| 156 | 172 | ||
| 157 | /* Legacy function: we don't need to add standard extensions | 173 | /* Legacy function: we don't need to add standard extensions |
| 158 | * any more because they are now kept in ext_dat.h. | 174 | * any more because they are now kept in ext_dat.h. |
| 159 | */ | 175 | */ |
| 160 | 176 | ||
| 161 | int X509V3_add_standard_extensions(void) | 177 | int |
| 178 | X509V3_add_standard_extensions(void) | ||
| 162 | { | 179 | { |
| 163 | return 1; | 180 | return 1; |
| 164 | } | 181 | } |
| 165 | 182 | ||
| 166 | /* Return an extension internal structure */ | 183 | /* Return an extension internal structure */ |
| 167 | 184 | ||
| 168 | void *X509V3_EXT_d2i(X509_EXTENSION *ext) | 185 | void * |
| 186 | X509V3_EXT_d2i(X509_EXTENSION *ext) | ||
| 169 | { | 187 | { |
| 170 | const X509V3_EXT_METHOD *method; | 188 | const X509V3_EXT_METHOD *method; |
| 171 | const unsigned char *p; | 189 | const unsigned char *p; |
| 172 | 190 | ||
| 173 | if(!(method = X509V3_EXT_get(ext))) return NULL; | 191 | if (!(method = X509V3_EXT_get(ext))) |
| 192 | return NULL; | ||
| 174 | p = ext->value->data; | 193 | p = ext->value->data; |
| 175 | if(method->it) return ASN1_item_d2i(NULL, &p, ext->value->length, ASN1_ITEM_ptr(method->it)); | 194 | if (method->it) |
| 195 | return ASN1_item_d2i(NULL, &p, ext->value->length, | ||
| 196 | ASN1_ITEM_ptr(method->it)); | ||
| 176 | return method->d2i(NULL, &p, ext->value->length); | 197 | return method->d2i(NULL, &p, ext->value->length); |
| 177 | } | 198 | } |
| 178 | 199 | ||
| @@ -191,43 +212,53 @@ void *X509V3_EXT_d2i(X509_EXTENSION *ext) | |||
| 191 | * -2 extension occurs more than once. | 212 | * -2 extension occurs more than once. |
| 192 | */ | 213 | */ |
| 193 | 214 | ||
| 194 | void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx) | 215 | void * |
| 216 | X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx) | ||
| 195 | { | 217 | { |
| 196 | int lastpos, i; | 218 | int lastpos, i; |
| 197 | X509_EXTENSION *ex, *found_ex = NULL; | 219 | X509_EXTENSION *ex, *found_ex = NULL; |
| 198 | if(!x) { | 220 | |
| 199 | if(idx) *idx = -1; | 221 | if (!x) { |
| 200 | if(crit) *crit = -1; | 222 | if (idx) |
| 223 | *idx = -1; | ||
| 224 | if (crit) | ||
| 225 | *crit = -1; | ||
| 201 | return NULL; | 226 | return NULL; |
| 202 | } | 227 | } |
| 203 | if(idx) lastpos = *idx + 1; | 228 | if (idx) |
| 204 | else lastpos = 0; | 229 | lastpos = *idx + 1; |
| 205 | if(lastpos < 0) lastpos = 0; | 230 | else |
| 206 | for(i = lastpos; i < sk_X509_EXTENSION_num(x); i++) | 231 | lastpos = 0; |
| 207 | { | 232 | if (lastpos < 0) |
| 233 | lastpos = 0; | ||
| 234 | for (i = lastpos; i < sk_X509_EXTENSION_num(x); i++) { | ||
| 208 | ex = sk_X509_EXTENSION_value(x, i); | 235 | ex = sk_X509_EXTENSION_value(x, i); |
| 209 | if(OBJ_obj2nid(ex->object) == nid) { | 236 | if (OBJ_obj2nid(ex->object) == nid) { |
| 210 | if(idx) { | 237 | if (idx) { |
| 211 | *idx = i; | 238 | *idx = i; |
| 212 | found_ex = ex; | 239 | found_ex = ex; |
| 213 | break; | 240 | break; |
| 214 | } else if(found_ex) { | 241 | } else if (found_ex) { |
| 215 | /* Found more than one */ | 242 | /* Found more than one */ |
| 216 | if(crit) *crit = -2; | 243 | if (crit) |
| 244 | *crit = -2; | ||
| 217 | return NULL; | 245 | return NULL; |
| 218 | } | 246 | } |
| 219 | found_ex = ex; | 247 | found_ex = ex; |
| 220 | } | 248 | } |
| 221 | } | 249 | } |
| 222 | if(found_ex) { | 250 | if (found_ex) { |
| 223 | /* Found it */ | 251 | /* Found it */ |
| 224 | if(crit) *crit = X509_EXTENSION_get_critical(found_ex); | 252 | if (crit) |
| 253 | *crit = X509_EXTENSION_get_critical(found_ex); | ||
| 225 | return X509V3_EXT_d2i(found_ex); | 254 | return X509V3_EXT_d2i(found_ex); |
| 226 | } | 255 | } |
| 227 | 256 | ||
| 228 | /* Extension not found */ | 257 | /* Extension not found */ |
| 229 | if(idx) *idx = -1; | 258 | if (idx) |
| 230 | if(crit) *crit = -1; | 259 | *idx = -1; |
| 260 | if (crit) | ||
| 261 | *crit = -1; | ||
| 231 | return NULL; | 262 | return NULL; |
| 232 | } | 263 | } |
| 233 | 264 | ||
| @@ -236,8 +267,9 @@ void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx) | |||
| 236 | * 'value' arguments (if relevant) are the extensions internal structure. | 267 | * 'value' arguments (if relevant) are the extensions internal structure. |
| 237 | */ | 268 | */ |
| 238 | 269 | ||
| 239 | int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, | 270 | int |
| 240 | int crit, unsigned long flags) | 271 | X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, |
| 272 | int crit, unsigned long flags) | ||
| 241 | { | 273 | { |
| 242 | int extidx = -1; | 274 | int extidx = -1; |
| 243 | int errcode; | 275 | int errcode; |
| @@ -247,30 +279,31 @@ int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, | |||
| 247 | /* If appending we don't care if it exists, otherwise | 279 | /* If appending we don't care if it exists, otherwise |
| 248 | * look for existing extension. | 280 | * look for existing extension. |
| 249 | */ | 281 | */ |
| 250 | if(ext_op != X509V3_ADD_APPEND) | 282 | if (ext_op != X509V3_ADD_APPEND) |
| 251 | extidx = X509v3_get_ext_by_NID(*x, nid, -1); | 283 | extidx = X509v3_get_ext_by_NID(*x, nid, -1); |
| 252 | 284 | ||
| 253 | /* See if extension exists */ | 285 | /* See if extension exists */ |
| 254 | if(extidx >= 0) { | 286 | if (extidx >= 0) { |
| 255 | /* If keep existing, nothing to do */ | 287 | /* If keep existing, nothing to do */ |
| 256 | if(ext_op == X509V3_ADD_KEEP_EXISTING) | 288 | if (ext_op == X509V3_ADD_KEEP_EXISTING) |
| 257 | return 1; | 289 | return 1; |
| 258 | /* If default then its an error */ | 290 | /* If default then its an error */ |
| 259 | if(ext_op == X509V3_ADD_DEFAULT) { | 291 | if (ext_op == X509V3_ADD_DEFAULT) { |
| 260 | errcode = X509V3_R_EXTENSION_EXISTS; | 292 | errcode = X509V3_R_EXTENSION_EXISTS; |
| 261 | goto err; | 293 | goto err; |
| 262 | } | 294 | } |
| 263 | /* If delete, just delete it */ | 295 | /* If delete, just delete it */ |
| 264 | if(ext_op == X509V3_ADD_DELETE) { | 296 | if (ext_op == X509V3_ADD_DELETE) { |
| 265 | if(!sk_X509_EXTENSION_delete(*x, extidx)) return -1; | 297 | if (!sk_X509_EXTENSION_delete(*x, extidx)) |
| 298 | return -1; | ||
| 266 | return 1; | 299 | return 1; |
| 267 | } | 300 | } |
| 268 | } else { | 301 | } else { |
| 269 | /* If replace existing or delete, error since | 302 | /* If replace existing or delete, error since |
| 270 | * extension must exist | 303 | * extension must exist |
| 271 | */ | 304 | */ |
| 272 | if((ext_op == X509V3_ADD_REPLACE_EXISTING) || | 305 | if ((ext_op == X509V3_ADD_REPLACE_EXISTING) || |
| 273 | (ext_op == X509V3_ADD_DELETE)) { | 306 | (ext_op == X509V3_ADD_DELETE)) { |
| 274 | errcode = X509V3_R_EXTENSION_NOT_FOUND; | 307 | errcode = X509V3_R_EXTENSION_NOT_FOUND; |
| 275 | goto err; | 308 | goto err; |
| 276 | } | 309 | } |
| @@ -282,26 +315,30 @@ int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, | |||
| 282 | 315 | ||
| 283 | ext = X509V3_EXT_i2d(nid, crit, value); | 316 | ext = X509V3_EXT_i2d(nid, crit, value); |
| 284 | 317 | ||
| 285 | if(!ext) { | 318 | if (!ext) { |
| 286 | X509V3err(X509V3_F_X509V3_ADD1_I2D, X509V3_R_ERROR_CREATING_EXTENSION); | 319 | X509V3err(X509V3_F_X509V3_ADD1_I2D, |
| 320 | X509V3_R_ERROR_CREATING_EXTENSION); | ||
| 287 | return 0; | 321 | return 0; |
| 288 | } | 322 | } |
| 289 | 323 | ||
| 290 | /* If extension exists replace it.. */ | 324 | /* If extension exists replace it.. */ |
| 291 | if(extidx >= 0) { | 325 | if (extidx >= 0) { |
| 292 | extmp = sk_X509_EXTENSION_value(*x, extidx); | 326 | extmp = sk_X509_EXTENSION_value(*x, extidx); |
| 293 | X509_EXTENSION_free(extmp); | 327 | X509_EXTENSION_free(extmp); |
| 294 | if(!sk_X509_EXTENSION_set(*x, extidx, ext)) return -1; | 328 | if (!sk_X509_EXTENSION_set(*x, extidx, ext)) |
| 329 | return -1; | ||
| 295 | return 1; | 330 | return 1; |
| 296 | } | 331 | } |
| 297 | 332 | ||
| 298 | if(!*x && !(*x = sk_X509_EXTENSION_new_null())) return -1; | 333 | if (!*x && !(*x = sk_X509_EXTENSION_new_null())) |
| 299 | if(!sk_X509_EXTENSION_push(*x, ext)) return -1; | 334 | return -1; |
| 335 | if (!sk_X509_EXTENSION_push(*x, ext)) | ||
| 336 | return -1; | ||
| 300 | 337 | ||
| 301 | return 1; | 338 | return 1; |
| 302 | 339 | ||
| 303 | err: | 340 | err: |
| 304 | if(!(flags & X509V3_ADD_SILENT)) | 341 | if (!(flags & X509V3_ADD_SILENT)) |
| 305 | X509V3err(X509V3_F_X509V3_ADD1_I2D, errcode); | 342 | X509V3err(X509V3_F_X509V3_ADD1_I2D, errcode); |
| 306 | return 0; | 343 | return 0; |
| 307 | } | 344 | } |
diff --git a/src/lib/libcrypto/x509v3/v3conf.c b/src/lib/libcrypto/x509v3/v3conf.c index a9e6ca3542..cfa5fce75c 100644 --- a/src/lib/libcrypto/x509v3/v3conf.c +++ b/src/lib/libcrypto/x509v3/v3conf.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -66,7 +66,8 @@ | |||
| 66 | 66 | ||
| 67 | /* Test application to add extensions from a config file */ | 67 | /* Test application to add extensions from a config file */ |
| 68 | 68 | ||
| 69 | int main(int argc, char **argv) | 69 | int |
| 70 | main(int argc, char **argv) | ||
| 70 | { | 71 | { |
| 71 | LHASH *conf; | 72 | LHASH *conf; |
| 72 | X509 *cert; | 73 | X509 *cert; |
| @@ -75,28 +76,30 @@ int main(int argc, char **argv) | |||
| 75 | int i; | 76 | int i; |
| 76 | int count; | 77 | int count; |
| 77 | X509_EXTENSION *ext; | 78 | X509_EXTENSION *ext; |
| 79 | |||
| 78 | X509V3_add_standard_extensions(); | 80 | X509V3_add_standard_extensions(); |
| 79 | ERR_load_crypto_strings(); | 81 | ERR_load_crypto_strings(); |
| 80 | if(!argv[1]) { | 82 | if (!argv[1]) { |
| 81 | fprintf(stderr, "Usage: v3conf cert.pem [file.cnf]\n"); | 83 | fprintf(stderr, "Usage: v3conf cert.pem [file.cnf]\n"); |
| 82 | exit(1); | 84 | exit(1); |
| 83 | } | 85 | } |
| 84 | conf_file = argv[2]; | 86 | conf_file = argv[2]; |
| 85 | if(!conf_file) conf_file = "test.cnf"; | 87 | if (!conf_file) |
| 88 | conf_file = "test.cnf"; | ||
| 86 | conf = CONF_load(NULL, "test.cnf", NULL); | 89 | conf = CONF_load(NULL, "test.cnf", NULL); |
| 87 | if(!conf) { | 90 | if (!conf) { |
| 88 | fprintf(stderr, "Error opening Config file %s\n", conf_file); | 91 | fprintf(stderr, "Error opening Config file %s\n", conf_file); |
| 89 | ERR_print_errors_fp(stderr); | 92 | ERR_print_errors_fp(stderr); |
| 90 | exit(1); | 93 | exit(1); |
| 91 | } | 94 | } |
| 92 | 95 | ||
| 93 | inf = fopen(argv[1], "r"); | 96 | inf = fopen(argv[1], "r"); |
| 94 | if(!inf) { | 97 | if (!inf) { |
| 95 | fprintf(stderr, "Can't open certificate file %s\n", argv[1]); | 98 | fprintf(stderr, "Can't open certificate file %s\n", argv[1]); |
| 96 | exit(1); | 99 | exit(1); |
| 97 | } | 100 | } |
| 98 | cert = PEM_read_X509(inf, NULL, NULL); | 101 | cert = PEM_read_X509(inf, NULL, NULL); |
| 99 | if(!cert) { | 102 | if (!cert) { |
| 100 | fprintf(stderr, "Error reading certificate file %s\n", argv[1]); | 103 | fprintf(stderr, "Error reading certificate file %s\n", argv[1]); |
| 101 | exit(1); | 104 | exit(1); |
| 102 | } | 105 | } |
| @@ -105,7 +108,7 @@ int main(int argc, char **argv) | |||
| 105 | sk_pop_free(cert->cert_info->extensions, X509_EXTENSION_free); | 108 | sk_pop_free(cert->cert_info->extensions, X509_EXTENSION_free); |
| 106 | cert->cert_info->extensions = NULL; | 109 | cert->cert_info->extensions = NULL; |
| 107 | 110 | ||
| 108 | if(!X509V3_EXT_add_conf(conf, NULL, "test_section", cert)) { | 111 | if (!X509V3_EXT_add_conf(conf, NULL, "test_section", cert)) { |
| 109 | fprintf(stderr, "Error adding extensions\n"); | 112 | fprintf(stderr, "Error adding extensions\n"); |
| 110 | ERR_print_errors_fp(stderr); | 113 | ERR_print_errors_fp(stderr); |
| 111 | exit(1); | 114 | exit(1); |
| @@ -113,15 +116,16 @@ int main(int argc, char **argv) | |||
| 113 | 116 | ||
| 114 | count = X509_get_ext_count(cert); | 117 | count = X509_get_ext_count(cert); |
| 115 | printf("%d extensions\n", count); | 118 | printf("%d extensions\n", count); |
| 116 | for(i = 0; i < count; i++) { | 119 | for (i = 0; i < count; i++) { |
| 117 | ext = X509_get_ext(cert, i); | 120 | ext = X509_get_ext(cert, i); |
| 118 | printf("%s", OBJ_nid2ln(OBJ_obj2nid(ext->object))); | 121 | printf("%s", OBJ_nid2ln(OBJ_obj2nid(ext->object))); |
| 119 | if(ext->critical) printf(",critical:\n"); | 122 | if (ext->critical) |
| 120 | else printf(":\n"); | 123 | printf(",critical:\n"); |
| 124 | else | ||
| 125 | printf(":\n"); | ||
| 121 | X509V3_EXT_print_fp(stdout, ext, 0, 0); | 126 | X509V3_EXT_print_fp(stdout, ext, 0, 0); |
| 122 | printf("\n"); | 127 | printf("\n"); |
| 123 | 128 | ||
| 124 | } | 129 | } |
| 125 | return 0; | 130 | return 0; |
| 126 | } | 131 | } |
| 127 | |||
diff --git a/src/lib/libcrypto/x509v3/v3err.c b/src/lib/libcrypto/x509v3/v3err.c index f9f6f1f91f..c0b8b0e262 100644 --- a/src/lib/libcrypto/x509v3/v3err.c +++ b/src/lib/libcrypto/x509v3/v3err.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * are met: | 7 | * are met: |
| 8 | * | 8 | * |
| 9 | * 1. Redistributions of source code must retain the above copyright | 9 | * 1. Redistributions of source code must retain the above copyright |
| 10 | * notice, this list of conditions and the following disclaimer. | 10 | * notice, this list of conditions and the following disclaimer. |
| 11 | * | 11 | * |
| 12 | * 2. Redistributions in binary form must reproduce the above copyright | 12 | * 2. Redistributions in binary form must reproduce the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer in | 13 | * notice, this list of conditions and the following disclaimer in |
| @@ -68,159 +68,156 @@ | |||
| 68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_X509V3,func,0) | 68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_X509V3,func,0) |
| 69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_X509V3,0,reason) | 69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_X509V3,0,reason) |
| 70 | 70 | ||
| 71 | static ERR_STRING_DATA X509V3_str_functs[]= | 71 | static ERR_STRING_DATA X509V3_str_functs[] = { |
| 72 | { | 72 | {ERR_FUNC(X509V3_F_A2I_GENERAL_NAME), "A2I_GENERAL_NAME"}, |
| 73 | {ERR_FUNC(X509V3_F_A2I_GENERAL_NAME), "A2I_GENERAL_NAME"}, | 73 | {ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_CANONIZE), "ASIDENTIFIERCHOICE_CANONIZE"}, |
| 74 | {ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_CANONIZE), "ASIDENTIFIERCHOICE_CANONIZE"}, | 74 | {ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL), "ASIDENTIFIERCHOICE_IS_CANONICAL"}, |
| 75 | {ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL), "ASIDENTIFIERCHOICE_IS_CANONICAL"}, | 75 | {ERR_FUNC(X509V3_F_COPY_EMAIL), "COPY_EMAIL"}, |
| 76 | {ERR_FUNC(X509V3_F_COPY_EMAIL), "COPY_EMAIL"}, | 76 | {ERR_FUNC(X509V3_F_COPY_ISSUER), "COPY_ISSUER"}, |
| 77 | {ERR_FUNC(X509V3_F_COPY_ISSUER), "COPY_ISSUER"}, | 77 | {ERR_FUNC(X509V3_F_DO_DIRNAME), "DO_DIRNAME"}, |
| 78 | {ERR_FUNC(X509V3_F_DO_DIRNAME), "DO_DIRNAME"}, | 78 | {ERR_FUNC(X509V3_F_DO_EXT_CONF), "DO_EXT_CONF"}, |
| 79 | {ERR_FUNC(X509V3_F_DO_EXT_CONF), "DO_EXT_CONF"}, | 79 | {ERR_FUNC(X509V3_F_DO_EXT_I2D), "DO_EXT_I2D"}, |
| 80 | {ERR_FUNC(X509V3_F_DO_EXT_I2D), "DO_EXT_I2D"}, | 80 | {ERR_FUNC(X509V3_F_DO_EXT_NCONF), "DO_EXT_NCONF"}, |
| 81 | {ERR_FUNC(X509V3_F_DO_EXT_NCONF), "DO_EXT_NCONF"}, | 81 | {ERR_FUNC(X509V3_F_DO_I2V_NAME_CONSTRAINTS), "DO_I2V_NAME_CONSTRAINTS"}, |
| 82 | {ERR_FUNC(X509V3_F_DO_I2V_NAME_CONSTRAINTS), "DO_I2V_NAME_CONSTRAINTS"}, | 82 | {ERR_FUNC(X509V3_F_GNAMES_FROM_SECTNAME), "GNAMES_FROM_SECTNAME"}, |
| 83 | {ERR_FUNC(X509V3_F_GNAMES_FROM_SECTNAME), "GNAMES_FROM_SECTNAME"}, | 83 | {ERR_FUNC(X509V3_F_HEX_TO_STRING), "hex_to_string"}, |
| 84 | {ERR_FUNC(X509V3_F_HEX_TO_STRING), "hex_to_string"}, | 84 | {ERR_FUNC(X509V3_F_I2S_ASN1_ENUMERATED), "i2s_ASN1_ENUMERATED"}, |
| 85 | {ERR_FUNC(X509V3_F_I2S_ASN1_ENUMERATED), "i2s_ASN1_ENUMERATED"}, | 85 | {ERR_FUNC(X509V3_F_I2S_ASN1_IA5STRING), "I2S_ASN1_IA5STRING"}, |
| 86 | {ERR_FUNC(X509V3_F_I2S_ASN1_IA5STRING), "I2S_ASN1_IA5STRING"}, | 86 | {ERR_FUNC(X509V3_F_I2S_ASN1_INTEGER), "i2s_ASN1_INTEGER"}, |
| 87 | {ERR_FUNC(X509V3_F_I2S_ASN1_INTEGER), "i2s_ASN1_INTEGER"}, | 87 | {ERR_FUNC(X509V3_F_I2V_AUTHORITY_INFO_ACCESS), "I2V_AUTHORITY_INFO_ACCESS"}, |
| 88 | {ERR_FUNC(X509V3_F_I2V_AUTHORITY_INFO_ACCESS), "I2V_AUTHORITY_INFO_ACCESS"}, | 88 | {ERR_FUNC(X509V3_F_NOTICE_SECTION), "NOTICE_SECTION"}, |
| 89 | {ERR_FUNC(X509V3_F_NOTICE_SECTION), "NOTICE_SECTION"}, | 89 | {ERR_FUNC(X509V3_F_NREF_NOS), "NREF_NOS"}, |
| 90 | {ERR_FUNC(X509V3_F_NREF_NOS), "NREF_NOS"}, | 90 | {ERR_FUNC(X509V3_F_POLICY_SECTION), "POLICY_SECTION"}, |
| 91 | {ERR_FUNC(X509V3_F_POLICY_SECTION), "POLICY_SECTION"}, | 91 | {ERR_FUNC(X509V3_F_PROCESS_PCI_VALUE), "PROCESS_PCI_VALUE"}, |
| 92 | {ERR_FUNC(X509V3_F_PROCESS_PCI_VALUE), "PROCESS_PCI_VALUE"}, | 92 | {ERR_FUNC(X509V3_F_R2I_CERTPOL), "R2I_CERTPOL"}, |
| 93 | {ERR_FUNC(X509V3_F_R2I_CERTPOL), "R2I_CERTPOL"}, | 93 | {ERR_FUNC(X509V3_F_R2I_PCI), "R2I_PCI"}, |
| 94 | {ERR_FUNC(X509V3_F_R2I_PCI), "R2I_PCI"}, | 94 | {ERR_FUNC(X509V3_F_S2I_ASN1_IA5STRING), "S2I_ASN1_IA5STRING"}, |
| 95 | {ERR_FUNC(X509V3_F_S2I_ASN1_IA5STRING), "S2I_ASN1_IA5STRING"}, | 95 | {ERR_FUNC(X509V3_F_S2I_ASN1_INTEGER), "s2i_ASN1_INTEGER"}, |
| 96 | {ERR_FUNC(X509V3_F_S2I_ASN1_INTEGER), "s2i_ASN1_INTEGER"}, | 96 | {ERR_FUNC(X509V3_F_S2I_ASN1_OCTET_STRING), "s2i_ASN1_OCTET_STRING"}, |
| 97 | {ERR_FUNC(X509V3_F_S2I_ASN1_OCTET_STRING), "s2i_ASN1_OCTET_STRING"}, | 97 | {ERR_FUNC(X509V3_F_S2I_ASN1_SKEY_ID), "S2I_ASN1_SKEY_ID"}, |
| 98 | {ERR_FUNC(X509V3_F_S2I_ASN1_SKEY_ID), "S2I_ASN1_SKEY_ID"}, | 98 | {ERR_FUNC(X509V3_F_S2I_SKEY_ID), "S2I_SKEY_ID"}, |
| 99 | {ERR_FUNC(X509V3_F_S2I_SKEY_ID), "S2I_SKEY_ID"}, | 99 | {ERR_FUNC(X509V3_F_SET_DIST_POINT_NAME), "SET_DIST_POINT_NAME"}, |
| 100 | {ERR_FUNC(X509V3_F_SET_DIST_POINT_NAME), "SET_DIST_POINT_NAME"}, | 100 | {ERR_FUNC(X509V3_F_STRING_TO_HEX), "string_to_hex"}, |
| 101 | {ERR_FUNC(X509V3_F_STRING_TO_HEX), "string_to_hex"}, | 101 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_ASC), "SXNET_add_id_asc"}, |
| 102 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_ASC), "SXNET_add_id_asc"}, | 102 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_INTEGER), "SXNET_add_id_INTEGER"}, |
| 103 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_INTEGER), "SXNET_add_id_INTEGER"}, | 103 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_ULONG), "SXNET_add_id_ulong"}, |
| 104 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_ULONG), "SXNET_add_id_ulong"}, | 104 | {ERR_FUNC(X509V3_F_SXNET_GET_ID_ASC), "SXNET_get_id_asc"}, |
| 105 | {ERR_FUNC(X509V3_F_SXNET_GET_ID_ASC), "SXNET_get_id_asc"}, | 105 | {ERR_FUNC(X509V3_F_SXNET_GET_ID_ULONG), "SXNET_get_id_ulong"}, |
| 106 | {ERR_FUNC(X509V3_F_SXNET_GET_ID_ULONG), "SXNET_get_id_ulong"}, | 106 | {ERR_FUNC(X509V3_F_V2I_ASIDENTIFIERS), "V2I_ASIDENTIFIERS"}, |
| 107 | {ERR_FUNC(X509V3_F_V2I_ASIDENTIFIERS), "V2I_ASIDENTIFIERS"}, | 107 | {ERR_FUNC(X509V3_F_V2I_ASN1_BIT_STRING), "v2i_ASN1_BIT_STRING"}, |
| 108 | {ERR_FUNC(X509V3_F_V2I_ASN1_BIT_STRING), "v2i_ASN1_BIT_STRING"}, | 108 | {ERR_FUNC(X509V3_F_V2I_AUTHORITY_INFO_ACCESS), "V2I_AUTHORITY_INFO_ACCESS"}, |
| 109 | {ERR_FUNC(X509V3_F_V2I_AUTHORITY_INFO_ACCESS), "V2I_AUTHORITY_INFO_ACCESS"}, | 109 | {ERR_FUNC(X509V3_F_V2I_AUTHORITY_KEYID), "V2I_AUTHORITY_KEYID"}, |
| 110 | {ERR_FUNC(X509V3_F_V2I_AUTHORITY_KEYID), "V2I_AUTHORITY_KEYID"}, | 110 | {ERR_FUNC(X509V3_F_V2I_BASIC_CONSTRAINTS), "V2I_BASIC_CONSTRAINTS"}, |
| 111 | {ERR_FUNC(X509V3_F_V2I_BASIC_CONSTRAINTS), "V2I_BASIC_CONSTRAINTS"}, | 111 | {ERR_FUNC(X509V3_F_V2I_CRLD), "V2I_CRLD"}, |
| 112 | {ERR_FUNC(X509V3_F_V2I_CRLD), "V2I_CRLD"}, | 112 | {ERR_FUNC(X509V3_F_V2I_EXTENDED_KEY_USAGE), "V2I_EXTENDED_KEY_USAGE"}, |
| 113 | {ERR_FUNC(X509V3_F_V2I_EXTENDED_KEY_USAGE), "V2I_EXTENDED_KEY_USAGE"}, | 113 | {ERR_FUNC(X509V3_F_V2I_GENERAL_NAMES), "v2i_GENERAL_NAMES"}, |
| 114 | {ERR_FUNC(X509V3_F_V2I_GENERAL_NAMES), "v2i_GENERAL_NAMES"}, | 114 | {ERR_FUNC(X509V3_F_V2I_GENERAL_NAME_EX), "v2i_GENERAL_NAME_ex"}, |
| 115 | {ERR_FUNC(X509V3_F_V2I_GENERAL_NAME_EX), "v2i_GENERAL_NAME_ex"}, | 115 | {ERR_FUNC(X509V3_F_V2I_IDP), "V2I_IDP"}, |
| 116 | {ERR_FUNC(X509V3_F_V2I_IDP), "V2I_IDP"}, | 116 | {ERR_FUNC(X509V3_F_V2I_IPADDRBLOCKS), "V2I_IPADDRBLOCKS"}, |
| 117 | {ERR_FUNC(X509V3_F_V2I_IPADDRBLOCKS), "V2I_IPADDRBLOCKS"}, | 117 | {ERR_FUNC(X509V3_F_V2I_ISSUER_ALT), "V2I_ISSUER_ALT"}, |
| 118 | {ERR_FUNC(X509V3_F_V2I_ISSUER_ALT), "V2I_ISSUER_ALT"}, | 118 | {ERR_FUNC(X509V3_F_V2I_NAME_CONSTRAINTS), "V2I_NAME_CONSTRAINTS"}, |
| 119 | {ERR_FUNC(X509V3_F_V2I_NAME_CONSTRAINTS), "V2I_NAME_CONSTRAINTS"}, | 119 | {ERR_FUNC(X509V3_F_V2I_POLICY_CONSTRAINTS), "V2I_POLICY_CONSTRAINTS"}, |
| 120 | {ERR_FUNC(X509V3_F_V2I_POLICY_CONSTRAINTS), "V2I_POLICY_CONSTRAINTS"}, | 120 | {ERR_FUNC(X509V3_F_V2I_POLICY_MAPPINGS), "V2I_POLICY_MAPPINGS"}, |
| 121 | {ERR_FUNC(X509V3_F_V2I_POLICY_MAPPINGS), "V2I_POLICY_MAPPINGS"}, | 121 | {ERR_FUNC(X509V3_F_V2I_SUBJECT_ALT), "V2I_SUBJECT_ALT"}, |
| 122 | {ERR_FUNC(X509V3_F_V2I_SUBJECT_ALT), "V2I_SUBJECT_ALT"}, | 122 | {ERR_FUNC(X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL), "V3_ADDR_VALIDATE_PATH_INTERNAL"}, |
| 123 | {ERR_FUNC(X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL), "V3_ADDR_VALIDATE_PATH_INTERNAL"}, | 123 | {ERR_FUNC(X509V3_F_V3_GENERIC_EXTENSION), "V3_GENERIC_EXTENSION"}, |
| 124 | {ERR_FUNC(X509V3_F_V3_GENERIC_EXTENSION), "V3_GENERIC_EXTENSION"}, | 124 | {ERR_FUNC(X509V3_F_X509V3_ADD1_I2D), "X509V3_add1_i2d"}, |
| 125 | {ERR_FUNC(X509V3_F_X509V3_ADD1_I2D), "X509V3_add1_i2d"}, | 125 | {ERR_FUNC(X509V3_F_X509V3_ADD_VALUE), "X509V3_add_value"}, |
| 126 | {ERR_FUNC(X509V3_F_X509V3_ADD_VALUE), "X509V3_add_value"}, | 126 | {ERR_FUNC(X509V3_F_X509V3_EXT_ADD), "X509V3_EXT_add"}, |
| 127 | {ERR_FUNC(X509V3_F_X509V3_EXT_ADD), "X509V3_EXT_add"}, | 127 | {ERR_FUNC(X509V3_F_X509V3_EXT_ADD_ALIAS), "X509V3_EXT_add_alias"}, |
| 128 | {ERR_FUNC(X509V3_F_X509V3_EXT_ADD_ALIAS), "X509V3_EXT_add_alias"}, | 128 | {ERR_FUNC(X509V3_F_X509V3_EXT_CONF), "X509V3_EXT_conf"}, |
| 129 | {ERR_FUNC(X509V3_F_X509V3_EXT_CONF), "X509V3_EXT_conf"}, | 129 | {ERR_FUNC(X509V3_F_X509V3_EXT_I2D), "X509V3_EXT_i2d"}, |
| 130 | {ERR_FUNC(X509V3_F_X509V3_EXT_I2D), "X509V3_EXT_i2d"}, | 130 | {ERR_FUNC(X509V3_F_X509V3_EXT_NCONF), "X509V3_EXT_nconf"}, |
| 131 | {ERR_FUNC(X509V3_F_X509V3_EXT_NCONF), "X509V3_EXT_nconf"}, | 131 | {ERR_FUNC(X509V3_F_X509V3_GET_SECTION), "X509V3_get_section"}, |
| 132 | {ERR_FUNC(X509V3_F_X509V3_GET_SECTION), "X509V3_get_section"}, | 132 | {ERR_FUNC(X509V3_F_X509V3_GET_STRING), "X509V3_get_string"}, |
| 133 | {ERR_FUNC(X509V3_F_X509V3_GET_STRING), "X509V3_get_string"}, | 133 | {ERR_FUNC(X509V3_F_X509V3_GET_VALUE_BOOL), "X509V3_get_value_bool"}, |
| 134 | {ERR_FUNC(X509V3_F_X509V3_GET_VALUE_BOOL), "X509V3_get_value_bool"}, | 134 | {ERR_FUNC(X509V3_F_X509V3_PARSE_LIST), "X509V3_parse_list"}, |
| 135 | {ERR_FUNC(X509V3_F_X509V3_PARSE_LIST), "X509V3_parse_list"}, | 135 | {ERR_FUNC(X509V3_F_X509_PURPOSE_ADD), "X509_PURPOSE_add"}, |
| 136 | {ERR_FUNC(X509V3_F_X509_PURPOSE_ADD), "X509_PURPOSE_add"}, | 136 | {ERR_FUNC(X509V3_F_X509_PURPOSE_SET), "X509_PURPOSE_set"}, |
| 137 | {ERR_FUNC(X509V3_F_X509_PURPOSE_SET), "X509_PURPOSE_set"}, | 137 | {0, NULL} |
| 138 | {0,NULL} | 138 | }; |
| 139 | }; | ||
| 140 | 139 | ||
| 141 | static ERR_STRING_DATA X509V3_str_reasons[]= | 140 | static ERR_STRING_DATA X509V3_str_reasons[] = { |
| 142 | { | 141 | {ERR_REASON(X509V3_R_BAD_IP_ADDRESS) , "bad ip address"}, |
| 143 | {ERR_REASON(X509V3_R_BAD_IP_ADDRESS) ,"bad ip address"}, | 142 | {ERR_REASON(X509V3_R_BAD_OBJECT) , "bad object"}, |
| 144 | {ERR_REASON(X509V3_R_BAD_OBJECT) ,"bad object"}, | 143 | {ERR_REASON(X509V3_R_BN_DEC2BN_ERROR) , "bn dec2bn error"}, |
| 145 | {ERR_REASON(X509V3_R_BN_DEC2BN_ERROR) ,"bn dec2bn error"}, | 144 | {ERR_REASON(X509V3_R_BN_TO_ASN1_INTEGER_ERROR), "bn to asn1 integer error"}, |
| 146 | {ERR_REASON(X509V3_R_BN_TO_ASN1_INTEGER_ERROR),"bn to asn1 integer error"}, | 145 | {ERR_REASON(X509V3_R_DIRNAME_ERROR) , "dirname error"}, |
| 147 | {ERR_REASON(X509V3_R_DIRNAME_ERROR) ,"dirname error"}, | 146 | {ERR_REASON(X509V3_R_DISTPOINT_ALREADY_SET), "distpoint already set"}, |
| 148 | {ERR_REASON(X509V3_R_DISTPOINT_ALREADY_SET),"distpoint already set"}, | 147 | {ERR_REASON(X509V3_R_DUPLICATE_ZONE_ID) , "duplicate zone id"}, |
| 149 | {ERR_REASON(X509V3_R_DUPLICATE_ZONE_ID) ,"duplicate zone id"}, | 148 | {ERR_REASON(X509V3_R_ERROR_CONVERTING_ZONE), "error converting zone"}, |
| 150 | {ERR_REASON(X509V3_R_ERROR_CONVERTING_ZONE),"error converting zone"}, | 149 | {ERR_REASON(X509V3_R_ERROR_CREATING_EXTENSION), "error creating extension"}, |
| 151 | {ERR_REASON(X509V3_R_ERROR_CREATING_EXTENSION),"error creating extension"}, | 150 | {ERR_REASON(X509V3_R_ERROR_IN_EXTENSION) , "error in extension"}, |
| 152 | {ERR_REASON(X509V3_R_ERROR_IN_EXTENSION) ,"error in extension"}, | 151 | {ERR_REASON(X509V3_R_EXPECTED_A_SECTION_NAME), "expected a section name"}, |
| 153 | {ERR_REASON(X509V3_R_EXPECTED_A_SECTION_NAME),"expected a section name"}, | 152 | {ERR_REASON(X509V3_R_EXTENSION_EXISTS) , "extension exists"}, |
| 154 | {ERR_REASON(X509V3_R_EXTENSION_EXISTS) ,"extension exists"}, | 153 | {ERR_REASON(X509V3_R_EXTENSION_NAME_ERROR), "extension name error"}, |
| 155 | {ERR_REASON(X509V3_R_EXTENSION_NAME_ERROR),"extension name error"}, | 154 | {ERR_REASON(X509V3_R_EXTENSION_NOT_FOUND), "extension not found"}, |
| 156 | {ERR_REASON(X509V3_R_EXTENSION_NOT_FOUND),"extension not found"}, | 155 | {ERR_REASON(X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED), "extension setting not supported"}, |
| 157 | {ERR_REASON(X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED),"extension setting not supported"}, | 156 | {ERR_REASON(X509V3_R_EXTENSION_VALUE_ERROR), "extension value error"}, |
| 158 | {ERR_REASON(X509V3_R_EXTENSION_VALUE_ERROR),"extension value error"}, | 157 | {ERR_REASON(X509V3_R_ILLEGAL_EMPTY_EXTENSION), "illegal empty extension"}, |
| 159 | {ERR_REASON(X509V3_R_ILLEGAL_EMPTY_EXTENSION),"illegal empty extension"}, | 158 | {ERR_REASON(X509V3_R_ILLEGAL_HEX_DIGIT) , "illegal hex digit"}, |
| 160 | {ERR_REASON(X509V3_R_ILLEGAL_HEX_DIGIT) ,"illegal hex digit"}, | 159 | {ERR_REASON(X509V3_R_INCORRECT_POLICY_SYNTAX_TAG), "incorrect policy syntax tag"}, |
| 161 | {ERR_REASON(X509V3_R_INCORRECT_POLICY_SYNTAX_TAG),"incorrect policy syntax tag"}, | 160 | {ERR_REASON(X509V3_R_INVALID_MULTIPLE_RDNS), "invalid multiple rdns"}, |
| 162 | {ERR_REASON(X509V3_R_INVALID_MULTIPLE_RDNS),"invalid multiple rdns"}, | 161 | {ERR_REASON(X509V3_R_INVALID_ASNUMBER) , "invalid asnumber"}, |
| 163 | {ERR_REASON(X509V3_R_INVALID_ASNUMBER) ,"invalid asnumber"}, | 162 | {ERR_REASON(X509V3_R_INVALID_ASRANGE) , "invalid asrange"}, |
| 164 | {ERR_REASON(X509V3_R_INVALID_ASRANGE) ,"invalid asrange"}, | 163 | {ERR_REASON(X509V3_R_INVALID_BOOLEAN_STRING), "invalid boolean string"}, |
| 165 | {ERR_REASON(X509V3_R_INVALID_BOOLEAN_STRING),"invalid boolean string"}, | 164 | {ERR_REASON(X509V3_R_INVALID_EXTENSION_STRING), "invalid extension string"}, |
| 166 | {ERR_REASON(X509V3_R_INVALID_EXTENSION_STRING),"invalid extension string"}, | 165 | {ERR_REASON(X509V3_R_INVALID_INHERITANCE), "invalid inheritance"}, |
| 167 | {ERR_REASON(X509V3_R_INVALID_INHERITANCE),"invalid inheritance"}, | 166 | {ERR_REASON(X509V3_R_INVALID_IPADDRESS) , "invalid ipaddress"}, |
| 168 | {ERR_REASON(X509V3_R_INVALID_IPADDRESS) ,"invalid ipaddress"}, | 167 | {ERR_REASON(X509V3_R_INVALID_NAME) , "invalid name"}, |
| 169 | {ERR_REASON(X509V3_R_INVALID_NAME) ,"invalid name"}, | 168 | {ERR_REASON(X509V3_R_INVALID_NULL_ARGUMENT), "invalid null argument"}, |
| 170 | {ERR_REASON(X509V3_R_INVALID_NULL_ARGUMENT),"invalid null argument"}, | 169 | {ERR_REASON(X509V3_R_INVALID_NULL_NAME) , "invalid null name"}, |
| 171 | {ERR_REASON(X509V3_R_INVALID_NULL_NAME) ,"invalid null name"}, | 170 | {ERR_REASON(X509V3_R_INVALID_NULL_VALUE) , "invalid null value"}, |
| 172 | {ERR_REASON(X509V3_R_INVALID_NULL_VALUE) ,"invalid null value"}, | 171 | {ERR_REASON(X509V3_R_INVALID_NUMBER) , "invalid number"}, |
| 173 | {ERR_REASON(X509V3_R_INVALID_NUMBER) ,"invalid number"}, | 172 | {ERR_REASON(X509V3_R_INVALID_NUMBERS) , "invalid numbers"}, |
| 174 | {ERR_REASON(X509V3_R_INVALID_NUMBERS) ,"invalid numbers"}, | 173 | {ERR_REASON(X509V3_R_INVALID_OBJECT_IDENTIFIER), "invalid object identifier"}, |
| 175 | {ERR_REASON(X509V3_R_INVALID_OBJECT_IDENTIFIER),"invalid object identifier"}, | 174 | {ERR_REASON(X509V3_R_INVALID_OPTION) , "invalid option"}, |
| 176 | {ERR_REASON(X509V3_R_INVALID_OPTION) ,"invalid option"}, | 175 | {ERR_REASON(X509V3_R_INVALID_POLICY_IDENTIFIER), "invalid policy identifier"}, |
| 177 | {ERR_REASON(X509V3_R_INVALID_POLICY_IDENTIFIER),"invalid policy identifier"}, | 176 | {ERR_REASON(X509V3_R_INVALID_PROXY_POLICY_SETTING), "invalid proxy policy setting"}, |
| 178 | {ERR_REASON(X509V3_R_INVALID_PROXY_POLICY_SETTING),"invalid proxy policy setting"}, | 177 | {ERR_REASON(X509V3_R_INVALID_PURPOSE) , "invalid purpose"}, |
| 179 | {ERR_REASON(X509V3_R_INVALID_PURPOSE) ,"invalid purpose"}, | 178 | {ERR_REASON(X509V3_R_INVALID_SAFI) , "invalid safi"}, |
| 180 | {ERR_REASON(X509V3_R_INVALID_SAFI) ,"invalid safi"}, | 179 | {ERR_REASON(X509V3_R_INVALID_SECTION) , "invalid section"}, |
| 181 | {ERR_REASON(X509V3_R_INVALID_SECTION) ,"invalid section"}, | 180 | {ERR_REASON(X509V3_R_INVALID_SYNTAX) , "invalid syntax"}, |
| 182 | {ERR_REASON(X509V3_R_INVALID_SYNTAX) ,"invalid syntax"}, | 181 | {ERR_REASON(X509V3_R_ISSUER_DECODE_ERROR), "issuer decode error"}, |
| 183 | {ERR_REASON(X509V3_R_ISSUER_DECODE_ERROR),"issuer decode error"}, | 182 | {ERR_REASON(X509V3_R_MISSING_VALUE) , "missing value"}, |
| 184 | {ERR_REASON(X509V3_R_MISSING_VALUE) ,"missing value"}, | 183 | {ERR_REASON(X509V3_R_NEED_ORGANIZATION_AND_NUMBERS), "need organization and numbers"}, |
| 185 | {ERR_REASON(X509V3_R_NEED_ORGANIZATION_AND_NUMBERS),"need organization and numbers"}, | 184 | {ERR_REASON(X509V3_R_NO_CONFIG_DATABASE) , "no config database"}, |
| 186 | {ERR_REASON(X509V3_R_NO_CONFIG_DATABASE) ,"no config database"}, | 185 | {ERR_REASON(X509V3_R_NO_ISSUER_CERTIFICATE), "no issuer certificate"}, |
| 187 | {ERR_REASON(X509V3_R_NO_ISSUER_CERTIFICATE),"no issuer certificate"}, | 186 | {ERR_REASON(X509V3_R_NO_ISSUER_DETAILS) , "no issuer details"}, |
| 188 | {ERR_REASON(X509V3_R_NO_ISSUER_DETAILS) ,"no issuer details"}, | 187 | {ERR_REASON(X509V3_R_NO_POLICY_IDENTIFIER), "no policy identifier"}, |
| 189 | {ERR_REASON(X509V3_R_NO_POLICY_IDENTIFIER),"no policy identifier"}, | 188 | {ERR_REASON(X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED), "no proxy cert policy language defined"}, |
| 190 | {ERR_REASON(X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED),"no proxy cert policy language defined"}, | 189 | {ERR_REASON(X509V3_R_NO_PUBLIC_KEY) , "no public key"}, |
| 191 | {ERR_REASON(X509V3_R_NO_PUBLIC_KEY) ,"no public key"}, | 190 | {ERR_REASON(X509V3_R_NO_SUBJECT_DETAILS) , "no subject details"}, |
| 192 | {ERR_REASON(X509V3_R_NO_SUBJECT_DETAILS) ,"no subject details"}, | 191 | {ERR_REASON(X509V3_R_ODD_NUMBER_OF_DIGITS), "odd number of digits"}, |
| 193 | {ERR_REASON(X509V3_R_ODD_NUMBER_OF_DIGITS),"odd number of digits"}, | 192 | {ERR_REASON(X509V3_R_OPERATION_NOT_DEFINED), "operation not defined"}, |
| 194 | {ERR_REASON(X509V3_R_OPERATION_NOT_DEFINED),"operation not defined"}, | 193 | {ERR_REASON(X509V3_R_OTHERNAME_ERROR) , "othername error"}, |
| 195 | {ERR_REASON(X509V3_R_OTHERNAME_ERROR) ,"othername error"}, | 194 | {ERR_REASON(X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED), "policy language already defined"}, |
| 196 | {ERR_REASON(X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED),"policy language already defined"}, | 195 | {ERR_REASON(X509V3_R_POLICY_PATH_LENGTH) , "policy path length"}, |
| 197 | {ERR_REASON(X509V3_R_POLICY_PATH_LENGTH) ,"policy path length"}, | 196 | {ERR_REASON(X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED), "policy path length already defined"}, |
| 198 | {ERR_REASON(X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED),"policy path length already defined"}, | 197 | {ERR_REASON(X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED), "policy syntax not currently supported"}, |
| 199 | {ERR_REASON(X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED),"policy syntax not currently supported"}, | 198 | {ERR_REASON(X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY), "policy when proxy language requires no policy"}, |
| 200 | {ERR_REASON(X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY),"policy when proxy language requires no policy"}, | 199 | {ERR_REASON(X509V3_R_SECTION_NOT_FOUND) , "section not found"}, |
| 201 | {ERR_REASON(X509V3_R_SECTION_NOT_FOUND) ,"section not found"}, | 200 | {ERR_REASON(X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS), "unable to get issuer details"}, |
| 202 | {ERR_REASON(X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS),"unable to get issuer details"}, | 201 | {ERR_REASON(X509V3_R_UNABLE_TO_GET_ISSUER_KEYID), "unable to get issuer keyid"}, |
| 203 | {ERR_REASON(X509V3_R_UNABLE_TO_GET_ISSUER_KEYID),"unable to get issuer keyid"}, | 202 | {ERR_REASON(X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT), "unknown bit string argument"}, |
| 204 | {ERR_REASON(X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT),"unknown bit string argument"}, | 203 | {ERR_REASON(X509V3_R_UNKNOWN_EXTENSION) , "unknown extension"}, |
| 205 | {ERR_REASON(X509V3_R_UNKNOWN_EXTENSION) ,"unknown extension"}, | 204 | {ERR_REASON(X509V3_R_UNKNOWN_EXTENSION_NAME), "unknown extension name"}, |
| 206 | {ERR_REASON(X509V3_R_UNKNOWN_EXTENSION_NAME),"unknown extension name"}, | 205 | {ERR_REASON(X509V3_R_UNKNOWN_OPTION) , "unknown option"}, |
| 207 | {ERR_REASON(X509V3_R_UNKNOWN_OPTION) ,"unknown option"}, | 206 | {ERR_REASON(X509V3_R_UNSUPPORTED_OPTION) , "unsupported option"}, |
| 208 | {ERR_REASON(X509V3_R_UNSUPPORTED_OPTION) ,"unsupported option"}, | 207 | {ERR_REASON(X509V3_R_UNSUPPORTED_TYPE) , "unsupported type"}, |
| 209 | {ERR_REASON(X509V3_R_UNSUPPORTED_TYPE) ,"unsupported type"}, | 208 | {ERR_REASON(X509V3_R_USER_TOO_LONG) , "user too long"}, |
| 210 | {ERR_REASON(X509V3_R_USER_TOO_LONG) ,"user too long"}, | 209 | {0, NULL} |
| 211 | {0,NULL} | 210 | }; |
| 212 | }; | ||
| 213 | 211 | ||
| 214 | #endif | 212 | #endif |
| 215 | 213 | ||
| 216 | void ERR_load_X509V3_strings(void) | 214 | void |
| 217 | { | 215 | ERR_load_X509V3_strings(void) |
| 216 | { | ||
| 218 | #ifndef OPENSSL_NO_ERR | 217 | #ifndef OPENSSL_NO_ERR |
| 219 | 218 | if (ERR_func_error_string(X509V3_str_functs[0].error) == NULL) { | |
| 220 | if (ERR_func_error_string(X509V3_str_functs[0].error) == NULL) | 219 | ERR_load_strings(0, X509V3_str_functs); |
| 221 | { | 220 | ERR_load_strings(0, X509V3_str_reasons); |
| 222 | ERR_load_strings(0,X509V3_str_functs); | ||
| 223 | ERR_load_strings(0,X509V3_str_reasons); | ||
| 224 | } | ||
| 225 | #endif | ||
| 226 | } | 221 | } |
| 222 | #endif | ||
| 223 | } | ||
diff --git a/src/lib/libcrypto/x509v3/v3prin.c b/src/lib/libcrypto/x509v3/v3prin.c index d5ff268296..da701de132 100644 --- a/src/lib/libcrypto/x509v3/v3prin.c +++ b/src/lib/libcrypto/x509v3/v3prin.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -56,31 +56,31 @@ | |||
| 56 | * | 56 | * |
| 57 | */ | 57 | */ |
| 58 | 58 | ||
| 59 | |||
| 60 | |||
| 61 | #include <stdio.h> | 59 | #include <stdio.h> |
| 62 | #include <openssl/asn1.h> | 60 | #include <openssl/asn1.h> |
| 63 | #include <openssl/conf.h> | 61 | #include <openssl/conf.h> |
| 64 | #include <openssl/x509.h> | 62 | #include <openssl/x509.h> |
| 65 | #include <openssl/x509v3.h> | 63 | #include <openssl/x509v3.h> |
| 66 | 64 | ||
| 67 | int main(int argc, char **argv) | 65 | int |
| 66 | main(int argc, char **argv) | ||
| 68 | { | 67 | { |
| 69 | X509 *cert; | 68 | X509 *cert; |
| 70 | FILE *inf; | 69 | FILE *inf; |
| 71 | int i, count; | 70 | int i, count; |
| 72 | X509_EXTENSION *ext; | 71 | X509_EXTENSION *ext; |
| 72 | |||
| 73 | X509V3_add_standard_extensions(); | 73 | X509V3_add_standard_extensions(); |
| 74 | ERR_load_crypto_strings(); | 74 | ERR_load_crypto_strings(); |
| 75 | if(!argv[1]) { | 75 | if (!argv[1]) { |
| 76 | fprintf(stderr, "Usage v3prin cert.pem\n"); | 76 | fprintf(stderr, "Usage v3prin cert.pem\n"); |
| 77 | exit(1); | 77 | exit(1); |
| 78 | } | 78 | } |
| 79 | if(!(inf = fopen(argv[1], "r"))) { | 79 | if (!(inf = fopen(argv[1], "r"))) { |
| 80 | fprintf(stderr, "Can't open %s\n", argv[1]); | 80 | fprintf(stderr, "Can't open %s\n", argv[1]); |
| 81 | exit(1); | 81 | exit(1); |
| 82 | } | 82 | } |
| 83 | if(!(cert = PEM_read_X509(inf, NULL, NULL))) { | 83 | if (!(cert = PEM_read_X509(inf, NULL, NULL))) { |
| 84 | fprintf(stderr, "Can't read certificate %s\n", argv[1]); | 84 | fprintf(stderr, "Can't read certificate %s\n", argv[1]); |
| 85 | ERR_print_errors_fp(stderr); | 85 | ERR_print_errors_fp(stderr); |
| 86 | exit(1); | 86 | exit(1); |
| @@ -88,12 +88,13 @@ int main(int argc, char **argv) | |||
| 88 | fclose(inf); | 88 | fclose(inf); |
| 89 | count = X509_get_ext_count(cert); | 89 | count = X509_get_ext_count(cert); |
| 90 | printf("%d extensions\n", count); | 90 | printf("%d extensions\n", count); |
| 91 | for(i = 0; i < count; i++) { | 91 | for (i = 0; i < count; i++) { |
| 92 | ext = X509_get_ext(cert, i); | 92 | ext = X509_get_ext(cert, i); |
| 93 | printf("%s\n", OBJ_nid2ln(OBJ_obj2nid(ext->object))); | 93 | printf("%s\n", OBJ_nid2ln(OBJ_obj2nid(ext->object))); |
| 94 | if(!X509V3_EXT_print_fp(stdout, ext, 0, 0)) ERR_print_errors_fp(stderr); | 94 | if (!X509V3_EXT_print_fp(stdout, ext, 0, 0)) |
| 95 | ERR_print_errors_fp(stderr); | ||
| 95 | printf("\n"); | 96 | printf("\n"); |
| 96 | 97 | ||
| 97 | } | 98 | } |
| 98 | return 0; | 99 | return 0; |
| 99 | } | 100 | } |
diff --git a/src/lib/libssl/src/crypto/x509v3/v3_ia5.c b/src/lib/libssl/src/crypto/x509v3/v3_ia5.c index 98789b36e9..090fe49b20 100644 --- a/src/lib/libssl/src/crypto/x509v3/v3_ia5.c +++ b/src/lib/libssl/src/crypto/x509v3/v3_ia5.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -64,26 +64,29 @@ | |||
| 64 | #include <openssl/x509v3.h> | 64 | #include <openssl/x509v3.h> |
| 65 | 65 | ||
| 66 | static char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); | 66 | static char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); |
| 67 | static ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str); | 67 | static ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, |
| 68 | const X509V3_EXT_METHOD v3_ns_ia5_list[] = { | 68 | X509V3_CTX *ctx, char *str); |
| 69 | EXT_IA5STRING(NID_netscape_base_url), | ||
| 70 | EXT_IA5STRING(NID_netscape_revocation_url), | ||
| 71 | EXT_IA5STRING(NID_netscape_ca_revocation_url), | ||
| 72 | EXT_IA5STRING(NID_netscape_renewal_url), | ||
| 73 | EXT_IA5STRING(NID_netscape_ca_policy_url), | ||
| 74 | EXT_IA5STRING(NID_netscape_ssl_server_name), | ||
| 75 | EXT_IA5STRING(NID_netscape_comment), | ||
| 76 | EXT_END | ||
| 77 | }; | ||
| 78 | 69 | ||
| 70 | const X509V3_EXT_METHOD v3_ns_ia5_list[] = { | ||
| 71 | EXT_IA5STRING(NID_netscape_base_url), | ||
| 72 | EXT_IA5STRING(NID_netscape_revocation_url), | ||
| 73 | EXT_IA5STRING(NID_netscape_ca_revocation_url), | ||
| 74 | EXT_IA5STRING(NID_netscape_renewal_url), | ||
| 75 | EXT_IA5STRING(NID_netscape_ca_policy_url), | ||
| 76 | EXT_IA5STRING(NID_netscape_ssl_server_name), | ||
| 77 | EXT_IA5STRING(NID_netscape_comment), | ||
| 78 | EXT_END | ||
| 79 | }; | ||
| 79 | 80 | ||
| 80 | static char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, | 81 | static char * |
| 81 | ASN1_IA5STRING *ia5) | 82 | i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5) |
| 82 | { | 83 | { |
| 83 | char *tmp; | 84 | char *tmp; |
| 84 | if(!ia5 || !ia5->length) return NULL; | 85 | |
| 85 | if(!(tmp = malloc(ia5->length + 1))) { | 86 | if (!ia5 || !ia5->length) |
| 86 | X509V3err(X509V3_F_I2S_ASN1_IA5STRING,ERR_R_MALLOC_FAILURE); | 87 | return NULL; |
| 88 | if (!(tmp = malloc(ia5->length + 1))) { | ||
| 89 | X509V3err(X509V3_F_I2S_ASN1_IA5STRING, ERR_R_MALLOC_FAILURE); | ||
| 87 | return NULL; | 90 | return NULL; |
| 88 | } | 91 | } |
| 89 | memcpy(tmp, ia5->data, ia5->length); | 92 | memcpy(tmp, ia5->data, ia5->length); |
| @@ -91,23 +94,25 @@ static char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, | |||
| 91 | return tmp; | 94 | return tmp; |
| 92 | } | 95 | } |
| 93 | 96 | ||
| 94 | static ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, | 97 | static ASN1_IA5STRING * |
| 95 | X509V3_CTX *ctx, char *str) | 98 | s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str) |
| 96 | { | 99 | { |
| 97 | ASN1_IA5STRING *ia5; | 100 | ASN1_IA5STRING *ia5; |
| 98 | if(!str) { | 101 | if (!str) { |
| 99 | X509V3err(X509V3_F_S2I_ASN1_IA5STRING,X509V3_R_INVALID_NULL_ARGUMENT); | 102 | X509V3err(X509V3_F_S2I_ASN1_IA5STRING, |
| 103 | X509V3_R_INVALID_NULL_ARGUMENT); | ||
| 100 | return NULL; | 104 | return NULL; |
| 101 | } | 105 | } |
| 102 | if(!(ia5 = M_ASN1_IA5STRING_new())) goto err; | 106 | if (!(ia5 = M_ASN1_IA5STRING_new())) |
| 103 | if(!ASN1_STRING_set((ASN1_STRING *)ia5, (unsigned char*)str, | 107 | goto err; |
| 104 | strlen(str))) { | 108 | if (!ASN1_STRING_set((ASN1_STRING *)ia5, (unsigned char*)str, |
| 109 | strlen(str))) { | ||
| 105 | M_ASN1_IA5STRING_free(ia5); | 110 | M_ASN1_IA5STRING_free(ia5); |
| 106 | goto err; | 111 | goto err; |
| 107 | } | 112 | } |
| 108 | return ia5; | 113 | return ia5; |
| 109 | err: | 114 | |
| 110 | X509V3err(X509V3_F_S2I_ASN1_IA5STRING,ERR_R_MALLOC_FAILURE); | 115 | err: |
| 116 | X509V3err(X509V3_F_S2I_ASN1_IA5STRING, ERR_R_MALLOC_FAILURE); | ||
| 111 | return NULL; | 117 | return NULL; |
| 112 | } | 118 | } |
| 113 | |||
diff --git a/src/lib/libssl/src/crypto/x509v3/v3_info.c b/src/lib/libssl/src/crypto/x509v3/v3_info.c index c9d6c97b51..7853e3e23b 100644 --- a/src/lib/libssl/src/crypto/x509v3/v3_info.c +++ b/src/lib/libssl/src/crypto/x509v3/v3_info.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -63,29 +63,33 @@ | |||
| 63 | #include <openssl/asn1t.h> | 63 | #include <openssl/asn1t.h> |
| 64 | #include <openssl/x509v3.h> | 64 | #include <openssl/x509v3.h> |
| 65 | 65 | ||
| 66 | static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, | 66 | static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS( |
| 67 | AUTHORITY_INFO_ACCESS *ainfo, | 67 | X509V3_EXT_METHOD *method, AUTHORITY_INFO_ACCESS *ainfo, |
| 68 | STACK_OF(CONF_VALUE) *ret); | 68 | STACK_OF(CONF_VALUE) *ret); |
| 69 | static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, | 69 | static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS( |
| 70 | X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); | 70 | X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); |
| 71 | 71 | ||
| 72 | const X509V3_EXT_METHOD v3_info = | 72 | const X509V3_EXT_METHOD v3_info = { |
| 73 | { NID_info_access, X509V3_EXT_MULTILINE, ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), | 73 | NID_info_access, X509V3_EXT_MULTILINE, |
| 74 | 0,0,0,0, | 74 | ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), |
| 75 | 0,0, | 75 | 0, 0, 0, 0, |
| 76 | (X509V3_EXT_I2V)i2v_AUTHORITY_INFO_ACCESS, | 76 | 0, 0, |
| 77 | (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS, | 77 | (X509V3_EXT_I2V)i2v_AUTHORITY_INFO_ACCESS, |
| 78 | 0,0, | 78 | (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS, |
| 79 | NULL}; | 79 | 0, 0, |
| 80 | 80 | NULL | |
| 81 | const X509V3_EXT_METHOD v3_sinfo = | 81 | }; |
| 82 | { NID_sinfo_access, X509V3_EXT_MULTILINE, ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), | 82 | |
| 83 | 0,0,0,0, | 83 | const X509V3_EXT_METHOD v3_sinfo = { |
| 84 | 0,0, | 84 | NID_sinfo_access, X509V3_EXT_MULTILINE, |
| 85 | (X509V3_EXT_I2V)i2v_AUTHORITY_INFO_ACCESS, | 85 | ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), |
| 86 | (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS, | 86 | 0, 0, 0, 0, |
| 87 | 0,0, | 87 | 0, 0, |
| 88 | NULL}; | 88 | (X509V3_EXT_I2V)i2v_AUTHORITY_INFO_ACCESS, |
| 89 | (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS, | ||
| 90 | 0, 0, | ||
| 91 | NULL | ||
| 92 | }; | ||
| 89 | 93 | ||
| 90 | ASN1_SEQUENCE(ACCESS_DESCRIPTION) = { | 94 | ASN1_SEQUENCE(ACCESS_DESCRIPTION) = { |
| 91 | ASN1_SIMPLE(ACCESS_DESCRIPTION, method, ASN1_OBJECT), | 95 | ASN1_SIMPLE(ACCESS_DESCRIPTION, method, ASN1_OBJECT), |
| @@ -94,31 +98,34 @@ ASN1_SEQUENCE(ACCESS_DESCRIPTION) = { | |||
| 94 | 98 | ||
| 95 | IMPLEMENT_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) | 99 | IMPLEMENT_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) |
| 96 | 100 | ||
| 97 | ASN1_ITEM_TEMPLATE(AUTHORITY_INFO_ACCESS) = | 101 | ASN1_ITEM_TEMPLATE(AUTHORITY_INFO_ACCESS) = |
| 98 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, GeneralNames, ACCESS_DESCRIPTION) | 102 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, GeneralNames, |
| 103 | ACCESS_DESCRIPTION) | ||
| 99 | ASN1_ITEM_TEMPLATE_END(AUTHORITY_INFO_ACCESS) | 104 | ASN1_ITEM_TEMPLATE_END(AUTHORITY_INFO_ACCESS) |
| 100 | 105 | ||
| 101 | IMPLEMENT_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) | 106 | IMPLEMENT_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) |
| 102 | 107 | ||
| 103 | static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, | 108 | static STACK_OF(CONF_VALUE) * |
| 104 | AUTHORITY_INFO_ACCESS *ainfo, | 109 | i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, |
| 105 | STACK_OF(CONF_VALUE) *ret) | 110 | AUTHORITY_INFO_ACCESS *ainfo, STACK_OF(CONF_VALUE) *ret) |
| 106 | { | 111 | { |
| 107 | ACCESS_DESCRIPTION *desc; | 112 | ACCESS_DESCRIPTION *desc; |
| 108 | int i,nlen; | 113 | int i, nlen; |
| 109 | char objtmp[80], *ntmp; | 114 | char objtmp[80], *ntmp; |
| 110 | CONF_VALUE *vtmp; | 115 | CONF_VALUE *vtmp; |
| 111 | for(i = 0; i < sk_ACCESS_DESCRIPTION_num(ainfo); i++) { | 116 | |
| 117 | for (i = 0; i < sk_ACCESS_DESCRIPTION_num(ainfo); i++) { | ||
| 112 | desc = sk_ACCESS_DESCRIPTION_value(ainfo, i); | 118 | desc = sk_ACCESS_DESCRIPTION_value(ainfo, i); |
| 113 | ret = i2v_GENERAL_NAME(method, desc->location, ret); | 119 | ret = i2v_GENERAL_NAME(method, desc->location, ret); |
| 114 | if(!ret) break; | 120 | if (!ret) |
| 121 | break; | ||
| 115 | vtmp = sk_CONF_VALUE_value(ret, i); | 122 | vtmp = sk_CONF_VALUE_value(ret, i); |
| 116 | i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method); | 123 | i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method); |
| 117 | nlen = strlen(objtmp) + strlen(vtmp->name) + 5; | 124 | nlen = strlen(objtmp) + strlen(vtmp->name) + 5; |
| 118 | ntmp = malloc(nlen); | 125 | ntmp = malloc(nlen); |
| 119 | if(!ntmp) { | 126 | if (!ntmp) { |
| 120 | X509V3err(X509V3_F_I2V_AUTHORITY_INFO_ACCESS, | 127 | X509V3err(X509V3_F_I2V_AUTHORITY_INFO_ACCESS, |
| 121 | ERR_R_MALLOC_FAILURE); | 128 | ERR_R_MALLOC_FAILURE); |
| 122 | return NULL; | 129 | return NULL; |
| 123 | } | 130 | } |
| 124 | strlcpy(ntmp, objtmp, nlen); | 131 | strlcpy(ntmp, objtmp, nlen); |
| @@ -126,49 +133,57 @@ static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method | |||
| 126 | strlcat(ntmp, vtmp->name, nlen); | 133 | strlcat(ntmp, vtmp->name, nlen); |
| 127 | free(vtmp->name); | 134 | free(vtmp->name); |
| 128 | vtmp->name = ntmp; | 135 | vtmp->name = ntmp; |
| 129 | 136 | ||
| 130 | } | 137 | } |
| 131 | if(!ret) return sk_CONF_VALUE_new_null(); | 138 | if (!ret) |
| 139 | return sk_CONF_VALUE_new_null(); | ||
| 132 | return ret; | 140 | return ret; |
| 133 | } | 141 | } |
| 134 | 142 | ||
| 135 | static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, | 143 | static AUTHORITY_INFO_ACCESS * |
| 136 | X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) | 144 | v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, |
| 145 | STACK_OF(CONF_VALUE) *nval) | ||
| 137 | { | 146 | { |
| 138 | AUTHORITY_INFO_ACCESS *ainfo = NULL; | 147 | AUTHORITY_INFO_ACCESS *ainfo = NULL; |
| 139 | CONF_VALUE *cnf, ctmp; | 148 | CONF_VALUE *cnf, ctmp; |
| 140 | ACCESS_DESCRIPTION *acc; | 149 | ACCESS_DESCRIPTION *acc; |
| 141 | int i, objlen; | 150 | int i, objlen; |
| 142 | char *objtmp, *ptmp; | 151 | char *objtmp, *ptmp; |
| 143 | if(!(ainfo = sk_ACCESS_DESCRIPTION_new_null())) { | 152 | |
| 144 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS,ERR_R_MALLOC_FAILURE); | 153 | if (!(ainfo = sk_ACCESS_DESCRIPTION_new_null())) { |
| 154 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, | ||
| 155 | ERR_R_MALLOC_FAILURE); | ||
| 145 | return NULL; | 156 | return NULL; |
| 146 | } | 157 | } |
| 147 | for(i = 0; i < sk_CONF_VALUE_num(nval); i++) { | 158 | for (i = 0; i < sk_CONF_VALUE_num(nval); i++) { |
| 148 | cnf = sk_CONF_VALUE_value(nval, i); | 159 | cnf = sk_CONF_VALUE_value(nval, i); |
| 149 | if(!(acc = ACCESS_DESCRIPTION_new()) | 160 | if (!(acc = ACCESS_DESCRIPTION_new()) || |
| 150 | || !sk_ACCESS_DESCRIPTION_push(ainfo, acc)) { | 161 | !sk_ACCESS_DESCRIPTION_push(ainfo, acc)) { |
| 151 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS,ERR_R_MALLOC_FAILURE); | 162 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, |
| 163 | ERR_R_MALLOC_FAILURE); | ||
| 152 | goto err; | 164 | goto err; |
| 153 | } | 165 | } |
| 154 | ptmp = strchr(cnf->name, ';'); | 166 | ptmp = strchr(cnf->name, ';'); |
| 155 | if(!ptmp) { | 167 | if (!ptmp) { |
| 156 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS,X509V3_R_INVALID_SYNTAX); | 168 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, |
| 169 | X509V3_R_INVALID_SYNTAX); | ||
| 157 | goto err; | 170 | goto err; |
| 158 | } | 171 | } |
| 159 | objlen = ptmp - cnf->name; | 172 | objlen = ptmp - cnf->name; |
| 160 | ctmp.name = ptmp + 1; | 173 | ctmp.name = ptmp + 1; |
| 161 | ctmp.value = cnf->value; | 174 | ctmp.value = cnf->value; |
| 162 | if(!v2i_GENERAL_NAME_ex(acc->location, method, ctx, &ctmp, 0)) | 175 | if (!v2i_GENERAL_NAME_ex(acc->location, method, ctx, &ctmp, 0)) |
| 163 | goto err; | 176 | goto err; |
| 164 | if(!(objtmp = malloc(objlen + 1))) { | 177 | if (!(objtmp = malloc(objlen + 1))) { |
| 165 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS,ERR_R_MALLOC_FAILURE); | 178 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, |
| 179 | ERR_R_MALLOC_FAILURE); | ||
| 166 | goto err; | 180 | goto err; |
| 167 | } | 181 | } |
| 168 | strlcpy(objtmp, cnf->name, objlen + 1); | 182 | strlcpy(objtmp, cnf->name, objlen + 1); |
| 169 | acc->method = OBJ_txt2obj(objtmp, 0); | 183 | acc->method = OBJ_txt2obj(objtmp, 0); |
| 170 | if(!acc->method) { | 184 | if (!acc->method) { |
| 171 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS,X509V3_R_BAD_OBJECT); | 185 | X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, |
| 186 | X509V3_R_BAD_OBJECT); | ||
| 172 | ERR_add_error_data(2, "value=", objtmp); | 187 | ERR_add_error_data(2, "value=", objtmp); |
| 173 | free(objtmp); | 188 | free(objtmp); |
| 174 | goto err; | 189 | goto err; |
| @@ -177,16 +192,18 @@ static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *metho | |||
| 177 | 192 | ||
| 178 | } | 193 | } |
| 179 | return ainfo; | 194 | return ainfo; |
| 180 | err: | 195 | |
| 196 | err: | ||
| 181 | sk_ACCESS_DESCRIPTION_pop_free(ainfo, ACCESS_DESCRIPTION_free); | 197 | sk_ACCESS_DESCRIPTION_pop_free(ainfo, ACCESS_DESCRIPTION_free); |
| 182 | return NULL; | 198 | return NULL; |
| 183 | } | 199 | } |
| 184 | 200 | ||
| 185 | int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION* a) | 201 | int |
| 186 | { | 202 | i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION* a) |
| 203 | { | ||
| 187 | i2a_ASN1_OBJECT(bp, a->method); | 204 | i2a_ASN1_OBJECT(bp, a->method); |
| 188 | #ifdef UNDEF | 205 | #ifdef UNDEF |
| 189 | i2a_GENERAL_NAME(bp, a->location); | 206 | i2a_GENERAL_NAME(bp, a->location); |
| 190 | #endif | 207 | #endif |
| 191 | return 2; | 208 | return 2; |
| 192 | } | 209 | } |
diff --git a/src/lib/libssl/src/crypto/x509v3/v3_int.c b/src/lib/libssl/src/crypto/x509v3/v3_int.c index 4bfd14cf46..51f9e5cdc6 100644 --- a/src/lib/libssl/src/crypto/x509v3/v3_int.c +++ b/src/lib/libssl/src/crypto/x509v3/v3_int.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -60,30 +60,35 @@ | |||
| 60 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
| 61 | #include <openssl/x509v3.h> | 61 | #include <openssl/x509v3.h> |
| 62 | 62 | ||
| 63 | const X509V3_EXT_METHOD v3_crl_num = { | 63 | const X509V3_EXT_METHOD v3_crl_num = { |
| 64 | NID_crl_number, 0, ASN1_ITEM_ref(ASN1_INTEGER), | 64 | NID_crl_number, 0, ASN1_ITEM_ref(ASN1_INTEGER), |
| 65 | 0,0,0,0, | 65 | 0, 0, 0, 0, |
| 66 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, | 66 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, |
| 67 | 0, | 67 | 0, |
| 68 | 0,0,0,0, NULL}; | 68 | 0, 0, 0, 0, |
| 69 | NULL | ||
| 70 | }; | ||
| 69 | 71 | ||
| 70 | const X509V3_EXT_METHOD v3_delta_crl = { | 72 | const X509V3_EXT_METHOD v3_delta_crl = { |
| 71 | NID_delta_crl, 0, ASN1_ITEM_ref(ASN1_INTEGER), | 73 | NID_delta_crl, 0, ASN1_ITEM_ref(ASN1_INTEGER), |
| 72 | 0,0,0,0, | 74 | 0, 0, 0, 0, |
| 73 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, | 75 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, |
| 74 | 0, | 76 | 0, |
| 75 | 0,0,0,0, NULL}; | 77 | 0, 0, 0, 0, |
| 78 | NULL | ||
| 79 | }; | ||
| 76 | 80 | ||
| 77 | static void * s2i_asn1_int(X509V3_EXT_METHOD *meth, X509V3_CTX *ctx, char *value) | 81 | static void * |
| 78 | { | 82 | s2i_asn1_int(X509V3_EXT_METHOD *meth, X509V3_CTX *ctx, char *value) |
| 83 | { | ||
| 79 | return s2i_ASN1_INTEGER(meth, value); | 84 | return s2i_ASN1_INTEGER(meth, value); |
| 80 | } | 85 | } |
| 81 | 86 | ||
| 82 | const X509V3_EXT_METHOD v3_inhibit_anyp = { | 87 | const X509V3_EXT_METHOD v3_inhibit_anyp = { |
| 83 | NID_inhibit_any_policy, 0, ASN1_ITEM_ref(ASN1_INTEGER), | 88 | NID_inhibit_any_policy, 0, ASN1_ITEM_ref(ASN1_INTEGER), |
| 84 | 0,0,0,0, | 89 | 0, 0, 0, 0, |
| 85 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, | 90 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, |
| 86 | (X509V3_EXT_S2I)s2i_asn1_int, | 91 | (X509V3_EXT_S2I)s2i_asn1_int, |
| 87 | 0,0,0,0, NULL}; | 92 | 0, 0, 0, 0, |
| 88 | 93 | NULL | |
| 89 | 94 | }; | |
diff --git a/src/lib/libssl/src/crypto/x509v3/v3_lib.c b/src/lib/libssl/src/crypto/x509v3/v3_lib.c index 8d5e6ee911..3f610cdaa3 100644 --- a/src/lib/libssl/src/crypto/x509v3/v3_lib.c +++ b/src/lib/libssl/src/crypto/x509v3/v3_lib.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -67,74 +67,87 @@ | |||
| 67 | static STACK_OF(X509V3_EXT_METHOD) *ext_list = NULL; | 67 | static STACK_OF(X509V3_EXT_METHOD) *ext_list = NULL; |
| 68 | 68 | ||
| 69 | static int ext_cmp(const X509V3_EXT_METHOD * const *a, | 69 | static int ext_cmp(const X509V3_EXT_METHOD * const *a, |
| 70 | const X509V3_EXT_METHOD * const *b); | 70 | const X509V3_EXT_METHOD * const *b); |
| 71 | static void ext_list_free(X509V3_EXT_METHOD *ext); | 71 | static void ext_list_free(X509V3_EXT_METHOD *ext); |
| 72 | 72 | ||
| 73 | int X509V3_EXT_add(X509V3_EXT_METHOD *ext) | 73 | int |
| 74 | X509V3_EXT_add(X509V3_EXT_METHOD *ext) | ||
| 74 | { | 75 | { |
| 75 | if(!ext_list && !(ext_list = sk_X509V3_EXT_METHOD_new(ext_cmp))) { | 76 | if (!ext_list && !(ext_list = sk_X509V3_EXT_METHOD_new(ext_cmp))) { |
| 76 | X509V3err(X509V3_F_X509V3_EXT_ADD,ERR_R_MALLOC_FAILURE); | 77 | X509V3err(X509V3_F_X509V3_EXT_ADD, ERR_R_MALLOC_FAILURE); |
| 77 | return 0; | 78 | return 0; |
| 78 | } | 79 | } |
| 79 | if(!sk_X509V3_EXT_METHOD_push(ext_list, ext)) { | 80 | if (!sk_X509V3_EXT_METHOD_push(ext_list, ext)) { |
| 80 | X509V3err(X509V3_F_X509V3_EXT_ADD,ERR_R_MALLOC_FAILURE); | 81 | X509V3err(X509V3_F_X509V3_EXT_ADD, ERR_R_MALLOC_FAILURE); |
| 81 | return 0; | 82 | return 0; |
| 82 | } | 83 | } |
| 83 | return 1; | 84 | return 1; |
| 84 | } | 85 | } |
| 85 | 86 | ||
| 86 | static int ext_cmp(const X509V3_EXT_METHOD * const *a, | 87 | static int |
| 87 | const X509V3_EXT_METHOD * const *b) | 88 | ext_cmp(const X509V3_EXT_METHOD * const *a, const X509V3_EXT_METHOD * const *b) |
| 88 | { | 89 | { |
| 89 | return ((*a)->ext_nid - (*b)->ext_nid); | 90 | return ((*a)->ext_nid - (*b)->ext_nid); |
| 90 | } | 91 | } |
| 91 | 92 | ||
| 92 | DECLARE_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, const X509V3_EXT_METHOD *, | 93 | DECLARE_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, |
| 93 | ext); | 94 | const X509V3_EXT_METHOD *, ext); |
| 94 | IMPLEMENT_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, | 95 | IMPLEMENT_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, |
| 95 | const X509V3_EXT_METHOD *, ext); | 96 | const X509V3_EXT_METHOD *, ext); |
| 96 | 97 | ||
| 97 | const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid) | 98 | const X509V3_EXT_METHOD * |
| 99 | X509V3_EXT_get_nid(int nid) | ||
| 98 | { | 100 | { |
| 99 | X509V3_EXT_METHOD tmp; | 101 | X509V3_EXT_METHOD tmp; |
| 100 | const X509V3_EXT_METHOD *t = &tmp, * const *ret; | 102 | const X509V3_EXT_METHOD *t = &tmp, * const *ret; |
| 101 | int idx; | 103 | int idx; |
| 102 | if(nid < 0) return NULL; | 104 | |
| 105 | if (nid < 0) | ||
| 106 | return NULL; | ||
| 103 | tmp.ext_nid = nid; | 107 | tmp.ext_nid = nid; |
| 104 | ret = OBJ_bsearch_ext(&t, standard_exts, STANDARD_EXTENSION_COUNT); | 108 | ret = OBJ_bsearch_ext(&t, standard_exts, STANDARD_EXTENSION_COUNT); |
| 105 | if(ret) return *ret; | 109 | if (ret) |
| 106 | if(!ext_list) return NULL; | 110 | return *ret; |
| 111 | if (!ext_list) | ||
| 112 | return NULL; | ||
| 107 | idx = sk_X509V3_EXT_METHOD_find(ext_list, &tmp); | 113 | idx = sk_X509V3_EXT_METHOD_find(ext_list, &tmp); |
| 108 | if(idx == -1) return NULL; | 114 | if (idx == -1) |
| 115 | return NULL; | ||
| 109 | return sk_X509V3_EXT_METHOD_value(ext_list, idx); | 116 | return sk_X509V3_EXT_METHOD_value(ext_list, idx); |
| 110 | } | 117 | } |
| 111 | 118 | ||
| 112 | const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext) | 119 | const X509V3_EXT_METHOD * |
| 120 | X509V3_EXT_get(X509_EXTENSION *ext) | ||
| 113 | { | 121 | { |
| 114 | int nid; | 122 | int nid; |
| 115 | if((nid = OBJ_obj2nid(ext->object)) == NID_undef) return NULL; | 123 | |
| 124 | if ((nid = OBJ_obj2nid(ext->object)) == NID_undef) | ||
| 125 | return NULL; | ||
| 116 | return X509V3_EXT_get_nid(nid); | 126 | return X509V3_EXT_get_nid(nid); |
| 117 | } | 127 | } |
| 118 | 128 | ||
| 119 | 129 | int | |
| 120 | int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist) | 130 | X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist) |
| 121 | { | 131 | { |
| 122 | for(;extlist->ext_nid!=-1;extlist++) | 132 | for (; extlist->ext_nid!=-1; extlist++) |
| 123 | if(!X509V3_EXT_add(extlist)) return 0; | 133 | if (!X509V3_EXT_add(extlist)) |
| 134 | return 0; | ||
| 124 | return 1; | 135 | return 1; |
| 125 | } | 136 | } |
| 126 | 137 | ||
| 127 | int X509V3_EXT_add_alias(int nid_to, int nid_from) | 138 | int |
| 139 | X509V3_EXT_add_alias(int nid_to, int nid_from) | ||
| 128 | { | 140 | { |
| 129 | const X509V3_EXT_METHOD *ext; | 141 | const X509V3_EXT_METHOD *ext; |
| 130 | X509V3_EXT_METHOD *tmpext; | 142 | X509V3_EXT_METHOD *tmpext; |
| 131 | 143 | ||
| 132 | if(!(ext = X509V3_EXT_get_nid(nid_from))) { | 144 | if (!(ext = X509V3_EXT_get_nid(nid_from))) { |
| 133 | X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS,X509V3_R_EXTENSION_NOT_FOUND); | 145 | X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS, |
| 146 | X509V3_R_EXTENSION_NOT_FOUND); | ||
| 134 | return 0; | 147 | return 0; |
| 135 | } | 148 | } |
| 136 | if(!(tmpext = malloc(sizeof(X509V3_EXT_METHOD)))) { | 149 | if (!(tmpext = malloc(sizeof(X509V3_EXT_METHOD)))) { |
| 137 | X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS,ERR_R_MALLOC_FAILURE); | 150 | X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS, ERR_R_MALLOC_FAILURE); |
| 138 | return 0; | 151 | return 0; |
| 139 | } | 152 | } |
| 140 | *tmpext = *ext; | 153 | *tmpext = *ext; |
| @@ -143,36 +156,44 @@ int X509V3_EXT_add_alias(int nid_to, int nid_from) | |||
| 143 | return X509V3_EXT_add(tmpext); | 156 | return X509V3_EXT_add(tmpext); |
| 144 | } | 157 | } |
| 145 | 158 | ||
| 146 | void X509V3_EXT_cleanup(void) | 159 | void |
| 160 | X509V3_EXT_cleanup(void) | ||
| 147 | { | 161 | { |
| 148 | sk_X509V3_EXT_METHOD_pop_free(ext_list, ext_list_free); | 162 | sk_X509V3_EXT_METHOD_pop_free(ext_list, ext_list_free); |
| 149 | ext_list = NULL; | 163 | ext_list = NULL; |
| 150 | } | 164 | } |
| 151 | 165 | ||
| 152 | static void ext_list_free(X509V3_EXT_METHOD *ext) | 166 | static void |
| 167 | ext_list_free(X509V3_EXT_METHOD *ext) | ||
| 153 | { | 168 | { |
| 154 | if(ext->ext_flags & X509V3_EXT_DYNAMIC) free(ext); | 169 | if (ext->ext_flags & X509V3_EXT_DYNAMIC) |
| 170 | free(ext); | ||
| 155 | } | 171 | } |
| 156 | 172 | ||
| 157 | /* Legacy function: we don't need to add standard extensions | 173 | /* Legacy function: we don't need to add standard extensions |
| 158 | * any more because they are now kept in ext_dat.h. | 174 | * any more because they are now kept in ext_dat.h. |
| 159 | */ | 175 | */ |
| 160 | 176 | ||
| 161 | int X509V3_add_standard_extensions(void) | 177 | int |
| 178 | X509V3_add_standard_extensions(void) | ||
| 162 | { | 179 | { |
| 163 | return 1; | 180 | return 1; |
| 164 | } | 181 | } |
| 165 | 182 | ||
| 166 | /* Return an extension internal structure */ | 183 | /* Return an extension internal structure */ |
| 167 | 184 | ||
| 168 | void *X509V3_EXT_d2i(X509_EXTENSION *ext) | 185 | void * |
| 186 | X509V3_EXT_d2i(X509_EXTENSION *ext) | ||
| 169 | { | 187 | { |
| 170 | const X509V3_EXT_METHOD *method; | 188 | const X509V3_EXT_METHOD *method; |
| 171 | const unsigned char *p; | 189 | const unsigned char *p; |
| 172 | 190 | ||
| 173 | if(!(method = X509V3_EXT_get(ext))) return NULL; | 191 | if (!(method = X509V3_EXT_get(ext))) |
| 192 | return NULL; | ||
| 174 | p = ext->value->data; | 193 | p = ext->value->data; |
| 175 | if(method->it) return ASN1_item_d2i(NULL, &p, ext->value->length, ASN1_ITEM_ptr(method->it)); | 194 | if (method->it) |
| 195 | return ASN1_item_d2i(NULL, &p, ext->value->length, | ||
| 196 | ASN1_ITEM_ptr(method->it)); | ||
| 176 | return method->d2i(NULL, &p, ext->value->length); | 197 | return method->d2i(NULL, &p, ext->value->length); |
| 177 | } | 198 | } |
| 178 | 199 | ||
| @@ -191,43 +212,53 @@ void *X509V3_EXT_d2i(X509_EXTENSION *ext) | |||
| 191 | * -2 extension occurs more than once. | 212 | * -2 extension occurs more than once. |
| 192 | */ | 213 | */ |
| 193 | 214 | ||
| 194 | void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx) | 215 | void * |
| 216 | X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx) | ||
| 195 | { | 217 | { |
| 196 | int lastpos, i; | 218 | int lastpos, i; |
| 197 | X509_EXTENSION *ex, *found_ex = NULL; | 219 | X509_EXTENSION *ex, *found_ex = NULL; |
| 198 | if(!x) { | 220 | |
| 199 | if(idx) *idx = -1; | 221 | if (!x) { |
| 200 | if(crit) *crit = -1; | 222 | if (idx) |
| 223 | *idx = -1; | ||
| 224 | if (crit) | ||
| 225 | *crit = -1; | ||
| 201 | return NULL; | 226 | return NULL; |
| 202 | } | 227 | } |
| 203 | if(idx) lastpos = *idx + 1; | 228 | if (idx) |
| 204 | else lastpos = 0; | 229 | lastpos = *idx + 1; |
| 205 | if(lastpos < 0) lastpos = 0; | 230 | else |
| 206 | for(i = lastpos; i < sk_X509_EXTENSION_num(x); i++) | 231 | lastpos = 0; |
| 207 | { | 232 | if (lastpos < 0) |
| 233 | lastpos = 0; | ||
| 234 | for (i = lastpos; i < sk_X509_EXTENSION_num(x); i++) { | ||
| 208 | ex = sk_X509_EXTENSION_value(x, i); | 235 | ex = sk_X509_EXTENSION_value(x, i); |
| 209 | if(OBJ_obj2nid(ex->object) == nid) { | 236 | if (OBJ_obj2nid(ex->object) == nid) { |
| 210 | if(idx) { | 237 | if (idx) { |
| 211 | *idx = i; | 238 | *idx = i; |
| 212 | found_ex = ex; | 239 | found_ex = ex; |
| 213 | break; | 240 | break; |
| 214 | } else if(found_ex) { | 241 | } else if (found_ex) { |
| 215 | /* Found more than one */ | 242 | /* Found more than one */ |
| 216 | if(crit) *crit = -2; | 243 | if (crit) |
| 244 | *crit = -2; | ||
| 217 | return NULL; | 245 | return NULL; |
| 218 | } | 246 | } |
| 219 | found_ex = ex; | 247 | found_ex = ex; |
| 220 | } | 248 | } |
| 221 | } | 249 | } |
| 222 | if(found_ex) { | 250 | if (found_ex) { |
| 223 | /* Found it */ | 251 | /* Found it */ |
| 224 | if(crit) *crit = X509_EXTENSION_get_critical(found_ex); | 252 | if (crit) |
| 253 | *crit = X509_EXTENSION_get_critical(found_ex); | ||
| 225 | return X509V3_EXT_d2i(found_ex); | 254 | return X509V3_EXT_d2i(found_ex); |
| 226 | } | 255 | } |
| 227 | 256 | ||
| 228 | /* Extension not found */ | 257 | /* Extension not found */ |
| 229 | if(idx) *idx = -1; | 258 | if (idx) |
| 230 | if(crit) *crit = -1; | 259 | *idx = -1; |
| 260 | if (crit) | ||
| 261 | *crit = -1; | ||
| 231 | return NULL; | 262 | return NULL; |
| 232 | } | 263 | } |
| 233 | 264 | ||
| @@ -236,8 +267,9 @@ void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx) | |||
| 236 | * 'value' arguments (if relevant) are the extensions internal structure. | 267 | * 'value' arguments (if relevant) are the extensions internal structure. |
| 237 | */ | 268 | */ |
| 238 | 269 | ||
| 239 | int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, | 270 | int |
| 240 | int crit, unsigned long flags) | 271 | X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, |
| 272 | int crit, unsigned long flags) | ||
| 241 | { | 273 | { |
| 242 | int extidx = -1; | 274 | int extidx = -1; |
| 243 | int errcode; | 275 | int errcode; |
| @@ -247,30 +279,31 @@ int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, | |||
| 247 | /* If appending we don't care if it exists, otherwise | 279 | /* If appending we don't care if it exists, otherwise |
| 248 | * look for existing extension. | 280 | * look for existing extension. |
| 249 | */ | 281 | */ |
| 250 | if(ext_op != X509V3_ADD_APPEND) | 282 | if (ext_op != X509V3_ADD_APPEND) |
| 251 | extidx = X509v3_get_ext_by_NID(*x, nid, -1); | 283 | extidx = X509v3_get_ext_by_NID(*x, nid, -1); |
| 252 | 284 | ||
| 253 | /* See if extension exists */ | 285 | /* See if extension exists */ |
| 254 | if(extidx >= 0) { | 286 | if (extidx >= 0) { |
| 255 | /* If keep existing, nothing to do */ | 287 | /* If keep existing, nothing to do */ |
| 256 | if(ext_op == X509V3_ADD_KEEP_EXISTING) | 288 | if (ext_op == X509V3_ADD_KEEP_EXISTING) |
| 257 | return 1; | 289 | return 1; |
| 258 | /* If default then its an error */ | 290 | /* If default then its an error */ |
| 259 | if(ext_op == X509V3_ADD_DEFAULT) { | 291 | if (ext_op == X509V3_ADD_DEFAULT) { |
| 260 | errcode = X509V3_R_EXTENSION_EXISTS; | 292 | errcode = X509V3_R_EXTENSION_EXISTS; |
| 261 | goto err; | 293 | goto err; |
| 262 | } | 294 | } |
| 263 | /* If delete, just delete it */ | 295 | /* If delete, just delete it */ |
| 264 | if(ext_op == X509V3_ADD_DELETE) { | 296 | if (ext_op == X509V3_ADD_DELETE) { |
| 265 | if(!sk_X509_EXTENSION_delete(*x, extidx)) return -1; | 297 | if (!sk_X509_EXTENSION_delete(*x, extidx)) |
| 298 | return -1; | ||
| 266 | return 1; | 299 | return 1; |
| 267 | } | 300 | } |
| 268 | } else { | 301 | } else { |
| 269 | /* If replace existing or delete, error since | 302 | /* If replace existing or delete, error since |
| 270 | * extension must exist | 303 | * extension must exist |
| 271 | */ | 304 | */ |
| 272 | if((ext_op == X509V3_ADD_REPLACE_EXISTING) || | 305 | if ((ext_op == X509V3_ADD_REPLACE_EXISTING) || |
| 273 | (ext_op == X509V3_ADD_DELETE)) { | 306 | (ext_op == X509V3_ADD_DELETE)) { |
| 274 | errcode = X509V3_R_EXTENSION_NOT_FOUND; | 307 | errcode = X509V3_R_EXTENSION_NOT_FOUND; |
| 275 | goto err; | 308 | goto err; |
| 276 | } | 309 | } |
| @@ -282,26 +315,30 @@ int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, | |||
| 282 | 315 | ||
| 283 | ext = X509V3_EXT_i2d(nid, crit, value); | 316 | ext = X509V3_EXT_i2d(nid, crit, value); |
| 284 | 317 | ||
| 285 | if(!ext) { | 318 | if (!ext) { |
| 286 | X509V3err(X509V3_F_X509V3_ADD1_I2D, X509V3_R_ERROR_CREATING_EXTENSION); | 319 | X509V3err(X509V3_F_X509V3_ADD1_I2D, |
| 320 | X509V3_R_ERROR_CREATING_EXTENSION); | ||
| 287 | return 0; | 321 | return 0; |
| 288 | } | 322 | } |
| 289 | 323 | ||
| 290 | /* If extension exists replace it.. */ | 324 | /* If extension exists replace it.. */ |
| 291 | if(extidx >= 0) { | 325 | if (extidx >= 0) { |
| 292 | extmp = sk_X509_EXTENSION_value(*x, extidx); | 326 | extmp = sk_X509_EXTENSION_value(*x, extidx); |
| 293 | X509_EXTENSION_free(extmp); | 327 | X509_EXTENSION_free(extmp); |
| 294 | if(!sk_X509_EXTENSION_set(*x, extidx, ext)) return -1; | 328 | if (!sk_X509_EXTENSION_set(*x, extidx, ext)) |
| 329 | return -1; | ||
| 295 | return 1; | 330 | return 1; |
| 296 | } | 331 | } |
| 297 | 332 | ||
| 298 | if(!*x && !(*x = sk_X509_EXTENSION_new_null())) return -1; | 333 | if (!*x && !(*x = sk_X509_EXTENSION_new_null())) |
| 299 | if(!sk_X509_EXTENSION_push(*x, ext)) return -1; | 334 | return -1; |
| 335 | if (!sk_X509_EXTENSION_push(*x, ext)) | ||
| 336 | return -1; | ||
| 300 | 337 | ||
| 301 | return 1; | 338 | return 1; |
| 302 | 339 | ||
| 303 | err: | 340 | err: |
| 304 | if(!(flags & X509V3_ADD_SILENT)) | 341 | if (!(flags & X509V3_ADD_SILENT)) |
| 305 | X509V3err(X509V3_F_X509V3_ADD1_I2D, errcode); | 342 | X509V3err(X509V3_F_X509V3_ADD1_I2D, errcode); |
| 306 | return 0; | 343 | return 0; |
| 307 | } | 344 | } |
diff --git a/src/lib/libssl/src/crypto/x509v3/v3conf.c b/src/lib/libssl/src/crypto/x509v3/v3conf.c index a9e6ca3542..cfa5fce75c 100644 --- a/src/lib/libssl/src/crypto/x509v3/v3conf.c +++ b/src/lib/libssl/src/crypto/x509v3/v3conf.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -66,7 +66,8 @@ | |||
| 66 | 66 | ||
| 67 | /* Test application to add extensions from a config file */ | 67 | /* Test application to add extensions from a config file */ |
| 68 | 68 | ||
| 69 | int main(int argc, char **argv) | 69 | int |
| 70 | main(int argc, char **argv) | ||
| 70 | { | 71 | { |
| 71 | LHASH *conf; | 72 | LHASH *conf; |
| 72 | X509 *cert; | 73 | X509 *cert; |
| @@ -75,28 +76,30 @@ int main(int argc, char **argv) | |||
| 75 | int i; | 76 | int i; |
| 76 | int count; | 77 | int count; |
| 77 | X509_EXTENSION *ext; | 78 | X509_EXTENSION *ext; |
| 79 | |||
| 78 | X509V3_add_standard_extensions(); | 80 | X509V3_add_standard_extensions(); |
| 79 | ERR_load_crypto_strings(); | 81 | ERR_load_crypto_strings(); |
| 80 | if(!argv[1]) { | 82 | if (!argv[1]) { |
| 81 | fprintf(stderr, "Usage: v3conf cert.pem [file.cnf]\n"); | 83 | fprintf(stderr, "Usage: v3conf cert.pem [file.cnf]\n"); |
| 82 | exit(1); | 84 | exit(1); |
| 83 | } | 85 | } |
| 84 | conf_file = argv[2]; | 86 | conf_file = argv[2]; |
| 85 | if(!conf_file) conf_file = "test.cnf"; | 87 | if (!conf_file) |
| 88 | conf_file = "test.cnf"; | ||
| 86 | conf = CONF_load(NULL, "test.cnf", NULL); | 89 | conf = CONF_load(NULL, "test.cnf", NULL); |
| 87 | if(!conf) { | 90 | if (!conf) { |
| 88 | fprintf(stderr, "Error opening Config file %s\n", conf_file); | 91 | fprintf(stderr, "Error opening Config file %s\n", conf_file); |
| 89 | ERR_print_errors_fp(stderr); | 92 | ERR_print_errors_fp(stderr); |
| 90 | exit(1); | 93 | exit(1); |
| 91 | } | 94 | } |
| 92 | 95 | ||
| 93 | inf = fopen(argv[1], "r"); | 96 | inf = fopen(argv[1], "r"); |
| 94 | if(!inf) { | 97 | if (!inf) { |
| 95 | fprintf(stderr, "Can't open certificate file %s\n", argv[1]); | 98 | fprintf(stderr, "Can't open certificate file %s\n", argv[1]); |
| 96 | exit(1); | 99 | exit(1); |
| 97 | } | 100 | } |
| 98 | cert = PEM_read_X509(inf, NULL, NULL); | 101 | cert = PEM_read_X509(inf, NULL, NULL); |
| 99 | if(!cert) { | 102 | if (!cert) { |
| 100 | fprintf(stderr, "Error reading certificate file %s\n", argv[1]); | 103 | fprintf(stderr, "Error reading certificate file %s\n", argv[1]); |
| 101 | exit(1); | 104 | exit(1); |
| 102 | } | 105 | } |
| @@ -105,7 +108,7 @@ int main(int argc, char **argv) | |||
| 105 | sk_pop_free(cert->cert_info->extensions, X509_EXTENSION_free); | 108 | sk_pop_free(cert->cert_info->extensions, X509_EXTENSION_free); |
| 106 | cert->cert_info->extensions = NULL; | 109 | cert->cert_info->extensions = NULL; |
| 107 | 110 | ||
| 108 | if(!X509V3_EXT_add_conf(conf, NULL, "test_section", cert)) { | 111 | if (!X509V3_EXT_add_conf(conf, NULL, "test_section", cert)) { |
| 109 | fprintf(stderr, "Error adding extensions\n"); | 112 | fprintf(stderr, "Error adding extensions\n"); |
| 110 | ERR_print_errors_fp(stderr); | 113 | ERR_print_errors_fp(stderr); |
| 111 | exit(1); | 114 | exit(1); |
| @@ -113,15 +116,16 @@ int main(int argc, char **argv) | |||
| 113 | 116 | ||
| 114 | count = X509_get_ext_count(cert); | 117 | count = X509_get_ext_count(cert); |
| 115 | printf("%d extensions\n", count); | 118 | printf("%d extensions\n", count); |
| 116 | for(i = 0; i < count; i++) { | 119 | for (i = 0; i < count; i++) { |
| 117 | ext = X509_get_ext(cert, i); | 120 | ext = X509_get_ext(cert, i); |
| 118 | printf("%s", OBJ_nid2ln(OBJ_obj2nid(ext->object))); | 121 | printf("%s", OBJ_nid2ln(OBJ_obj2nid(ext->object))); |
| 119 | if(ext->critical) printf(",critical:\n"); | 122 | if (ext->critical) |
| 120 | else printf(":\n"); | 123 | printf(",critical:\n"); |
| 124 | else | ||
| 125 | printf(":\n"); | ||
| 121 | X509V3_EXT_print_fp(stdout, ext, 0, 0); | 126 | X509V3_EXT_print_fp(stdout, ext, 0, 0); |
| 122 | printf("\n"); | 127 | printf("\n"); |
| 123 | 128 | ||
| 124 | } | 129 | } |
| 125 | return 0; | 130 | return 0; |
| 126 | } | 131 | } |
| 127 | |||
diff --git a/src/lib/libssl/src/crypto/x509v3/v3err.c b/src/lib/libssl/src/crypto/x509v3/v3err.c index f9f6f1f91f..c0b8b0e262 100644 --- a/src/lib/libssl/src/crypto/x509v3/v3err.c +++ b/src/lib/libssl/src/crypto/x509v3/v3err.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * are met: | 7 | * are met: |
| 8 | * | 8 | * |
| 9 | * 1. Redistributions of source code must retain the above copyright | 9 | * 1. Redistributions of source code must retain the above copyright |
| 10 | * notice, this list of conditions and the following disclaimer. | 10 | * notice, this list of conditions and the following disclaimer. |
| 11 | * | 11 | * |
| 12 | * 2. Redistributions in binary form must reproduce the above copyright | 12 | * 2. Redistributions in binary form must reproduce the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer in | 13 | * notice, this list of conditions and the following disclaimer in |
| @@ -68,159 +68,156 @@ | |||
| 68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_X509V3,func,0) | 68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_X509V3,func,0) |
| 69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_X509V3,0,reason) | 69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_X509V3,0,reason) |
| 70 | 70 | ||
| 71 | static ERR_STRING_DATA X509V3_str_functs[]= | 71 | static ERR_STRING_DATA X509V3_str_functs[] = { |
| 72 | { | 72 | {ERR_FUNC(X509V3_F_A2I_GENERAL_NAME), "A2I_GENERAL_NAME"}, |
| 73 | {ERR_FUNC(X509V3_F_A2I_GENERAL_NAME), "A2I_GENERAL_NAME"}, | 73 | {ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_CANONIZE), "ASIDENTIFIERCHOICE_CANONIZE"}, |
| 74 | {ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_CANONIZE), "ASIDENTIFIERCHOICE_CANONIZE"}, | 74 | {ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL), "ASIDENTIFIERCHOICE_IS_CANONICAL"}, |
| 75 | {ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL), "ASIDENTIFIERCHOICE_IS_CANONICAL"}, | 75 | {ERR_FUNC(X509V3_F_COPY_EMAIL), "COPY_EMAIL"}, |
| 76 | {ERR_FUNC(X509V3_F_COPY_EMAIL), "COPY_EMAIL"}, | 76 | {ERR_FUNC(X509V3_F_COPY_ISSUER), "COPY_ISSUER"}, |
| 77 | {ERR_FUNC(X509V3_F_COPY_ISSUER), "COPY_ISSUER"}, | 77 | {ERR_FUNC(X509V3_F_DO_DIRNAME), "DO_DIRNAME"}, |
| 78 | {ERR_FUNC(X509V3_F_DO_DIRNAME), "DO_DIRNAME"}, | 78 | {ERR_FUNC(X509V3_F_DO_EXT_CONF), "DO_EXT_CONF"}, |
| 79 | {ERR_FUNC(X509V3_F_DO_EXT_CONF), "DO_EXT_CONF"}, | 79 | {ERR_FUNC(X509V3_F_DO_EXT_I2D), "DO_EXT_I2D"}, |
| 80 | {ERR_FUNC(X509V3_F_DO_EXT_I2D), "DO_EXT_I2D"}, | 80 | {ERR_FUNC(X509V3_F_DO_EXT_NCONF), "DO_EXT_NCONF"}, |
| 81 | {ERR_FUNC(X509V3_F_DO_EXT_NCONF), "DO_EXT_NCONF"}, | 81 | {ERR_FUNC(X509V3_F_DO_I2V_NAME_CONSTRAINTS), "DO_I2V_NAME_CONSTRAINTS"}, |
| 82 | {ERR_FUNC(X509V3_F_DO_I2V_NAME_CONSTRAINTS), "DO_I2V_NAME_CONSTRAINTS"}, | 82 | {ERR_FUNC(X509V3_F_GNAMES_FROM_SECTNAME), "GNAMES_FROM_SECTNAME"}, |
| 83 | {ERR_FUNC(X509V3_F_GNAMES_FROM_SECTNAME), "GNAMES_FROM_SECTNAME"}, | 83 | {ERR_FUNC(X509V3_F_HEX_TO_STRING), "hex_to_string"}, |
| 84 | {ERR_FUNC(X509V3_F_HEX_TO_STRING), "hex_to_string"}, | 84 | {ERR_FUNC(X509V3_F_I2S_ASN1_ENUMERATED), "i2s_ASN1_ENUMERATED"}, |
| 85 | {ERR_FUNC(X509V3_F_I2S_ASN1_ENUMERATED), "i2s_ASN1_ENUMERATED"}, | 85 | {ERR_FUNC(X509V3_F_I2S_ASN1_IA5STRING), "I2S_ASN1_IA5STRING"}, |
| 86 | {ERR_FUNC(X509V3_F_I2S_ASN1_IA5STRING), "I2S_ASN1_IA5STRING"}, | 86 | {ERR_FUNC(X509V3_F_I2S_ASN1_INTEGER), "i2s_ASN1_INTEGER"}, |
| 87 | {ERR_FUNC(X509V3_F_I2S_ASN1_INTEGER), "i2s_ASN1_INTEGER"}, | 87 | {ERR_FUNC(X509V3_F_I2V_AUTHORITY_INFO_ACCESS), "I2V_AUTHORITY_INFO_ACCESS"}, |
| 88 | {ERR_FUNC(X509V3_F_I2V_AUTHORITY_INFO_ACCESS), "I2V_AUTHORITY_INFO_ACCESS"}, | 88 | {ERR_FUNC(X509V3_F_NOTICE_SECTION), "NOTICE_SECTION"}, |
| 89 | {ERR_FUNC(X509V3_F_NOTICE_SECTION), "NOTICE_SECTION"}, | 89 | {ERR_FUNC(X509V3_F_NREF_NOS), "NREF_NOS"}, |
| 90 | {ERR_FUNC(X509V3_F_NREF_NOS), "NREF_NOS"}, | 90 | {ERR_FUNC(X509V3_F_POLICY_SECTION), "POLICY_SECTION"}, |
| 91 | {ERR_FUNC(X509V3_F_POLICY_SECTION), "POLICY_SECTION"}, | 91 | {ERR_FUNC(X509V3_F_PROCESS_PCI_VALUE), "PROCESS_PCI_VALUE"}, |
| 92 | {ERR_FUNC(X509V3_F_PROCESS_PCI_VALUE), "PROCESS_PCI_VALUE"}, | 92 | {ERR_FUNC(X509V3_F_R2I_CERTPOL), "R2I_CERTPOL"}, |
| 93 | {ERR_FUNC(X509V3_F_R2I_CERTPOL), "R2I_CERTPOL"}, | 93 | {ERR_FUNC(X509V3_F_R2I_PCI), "R2I_PCI"}, |
| 94 | {ERR_FUNC(X509V3_F_R2I_PCI), "R2I_PCI"}, | 94 | {ERR_FUNC(X509V3_F_S2I_ASN1_IA5STRING), "S2I_ASN1_IA5STRING"}, |
| 95 | {ERR_FUNC(X509V3_F_S2I_ASN1_IA5STRING), "S2I_ASN1_IA5STRING"}, | 95 | {ERR_FUNC(X509V3_F_S2I_ASN1_INTEGER), "s2i_ASN1_INTEGER"}, |
| 96 | {ERR_FUNC(X509V3_F_S2I_ASN1_INTEGER), "s2i_ASN1_INTEGER"}, | 96 | {ERR_FUNC(X509V3_F_S2I_ASN1_OCTET_STRING), "s2i_ASN1_OCTET_STRING"}, |
| 97 | {ERR_FUNC(X509V3_F_S2I_ASN1_OCTET_STRING), "s2i_ASN1_OCTET_STRING"}, | 97 | {ERR_FUNC(X509V3_F_S2I_ASN1_SKEY_ID), "S2I_ASN1_SKEY_ID"}, |
| 98 | {ERR_FUNC(X509V3_F_S2I_ASN1_SKEY_ID), "S2I_ASN1_SKEY_ID"}, | 98 | {ERR_FUNC(X509V3_F_S2I_SKEY_ID), "S2I_SKEY_ID"}, |
| 99 | {ERR_FUNC(X509V3_F_S2I_SKEY_ID), "S2I_SKEY_ID"}, | 99 | {ERR_FUNC(X509V3_F_SET_DIST_POINT_NAME), "SET_DIST_POINT_NAME"}, |
| 100 | {ERR_FUNC(X509V3_F_SET_DIST_POINT_NAME), "SET_DIST_POINT_NAME"}, | 100 | {ERR_FUNC(X509V3_F_STRING_TO_HEX), "string_to_hex"}, |
| 101 | {ERR_FUNC(X509V3_F_STRING_TO_HEX), "string_to_hex"}, | 101 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_ASC), "SXNET_add_id_asc"}, |
| 102 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_ASC), "SXNET_add_id_asc"}, | 102 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_INTEGER), "SXNET_add_id_INTEGER"}, |
| 103 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_INTEGER), "SXNET_add_id_INTEGER"}, | 103 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_ULONG), "SXNET_add_id_ulong"}, |
| 104 | {ERR_FUNC(X509V3_F_SXNET_ADD_ID_ULONG), "SXNET_add_id_ulong"}, | 104 | {ERR_FUNC(X509V3_F_SXNET_GET_ID_ASC), "SXNET_get_id_asc"}, |
| 105 | {ERR_FUNC(X509V3_F_SXNET_GET_ID_ASC), "SXNET_get_id_asc"}, | 105 | {ERR_FUNC(X509V3_F_SXNET_GET_ID_ULONG), "SXNET_get_id_ulong"}, |
| 106 | {ERR_FUNC(X509V3_F_SXNET_GET_ID_ULONG), "SXNET_get_id_ulong"}, | 106 | {ERR_FUNC(X509V3_F_V2I_ASIDENTIFIERS), "V2I_ASIDENTIFIERS"}, |
| 107 | {ERR_FUNC(X509V3_F_V2I_ASIDENTIFIERS), "V2I_ASIDENTIFIERS"}, | 107 | {ERR_FUNC(X509V3_F_V2I_ASN1_BIT_STRING), "v2i_ASN1_BIT_STRING"}, |
| 108 | {ERR_FUNC(X509V3_F_V2I_ASN1_BIT_STRING), "v2i_ASN1_BIT_STRING"}, | 108 | {ERR_FUNC(X509V3_F_V2I_AUTHORITY_INFO_ACCESS), "V2I_AUTHORITY_INFO_ACCESS"}, |
| 109 | {ERR_FUNC(X509V3_F_V2I_AUTHORITY_INFO_ACCESS), "V2I_AUTHORITY_INFO_ACCESS"}, | 109 | {ERR_FUNC(X509V3_F_V2I_AUTHORITY_KEYID), "V2I_AUTHORITY_KEYID"}, |
| 110 | {ERR_FUNC(X509V3_F_V2I_AUTHORITY_KEYID), "V2I_AUTHORITY_KEYID"}, | 110 | {ERR_FUNC(X509V3_F_V2I_BASIC_CONSTRAINTS), "V2I_BASIC_CONSTRAINTS"}, |
| 111 | {ERR_FUNC(X509V3_F_V2I_BASIC_CONSTRAINTS), "V2I_BASIC_CONSTRAINTS"}, | 111 | {ERR_FUNC(X509V3_F_V2I_CRLD), "V2I_CRLD"}, |
| 112 | {ERR_FUNC(X509V3_F_V2I_CRLD), "V2I_CRLD"}, | 112 | {ERR_FUNC(X509V3_F_V2I_EXTENDED_KEY_USAGE), "V2I_EXTENDED_KEY_USAGE"}, |
| 113 | {ERR_FUNC(X509V3_F_V2I_EXTENDED_KEY_USAGE), "V2I_EXTENDED_KEY_USAGE"}, | 113 | {ERR_FUNC(X509V3_F_V2I_GENERAL_NAMES), "v2i_GENERAL_NAMES"}, |
| 114 | {ERR_FUNC(X509V3_F_V2I_GENERAL_NAMES), "v2i_GENERAL_NAMES"}, | 114 | {ERR_FUNC(X509V3_F_V2I_GENERAL_NAME_EX), "v2i_GENERAL_NAME_ex"}, |
| 115 | {ERR_FUNC(X509V3_F_V2I_GENERAL_NAME_EX), "v2i_GENERAL_NAME_ex"}, | 115 | {ERR_FUNC(X509V3_F_V2I_IDP), "V2I_IDP"}, |
| 116 | {ERR_FUNC(X509V3_F_V2I_IDP), "V2I_IDP"}, | 116 | {ERR_FUNC(X509V3_F_V2I_IPADDRBLOCKS), "V2I_IPADDRBLOCKS"}, |
| 117 | {ERR_FUNC(X509V3_F_V2I_IPADDRBLOCKS), "V2I_IPADDRBLOCKS"}, | 117 | {ERR_FUNC(X509V3_F_V2I_ISSUER_ALT), "V2I_ISSUER_ALT"}, |
| 118 | {ERR_FUNC(X509V3_F_V2I_ISSUER_ALT), "V2I_ISSUER_ALT"}, | 118 | {ERR_FUNC(X509V3_F_V2I_NAME_CONSTRAINTS), "V2I_NAME_CONSTRAINTS"}, |
| 119 | {ERR_FUNC(X509V3_F_V2I_NAME_CONSTRAINTS), "V2I_NAME_CONSTRAINTS"}, | 119 | {ERR_FUNC(X509V3_F_V2I_POLICY_CONSTRAINTS), "V2I_POLICY_CONSTRAINTS"}, |
| 120 | {ERR_FUNC(X509V3_F_V2I_POLICY_CONSTRAINTS), "V2I_POLICY_CONSTRAINTS"}, | 120 | {ERR_FUNC(X509V3_F_V2I_POLICY_MAPPINGS), "V2I_POLICY_MAPPINGS"}, |
| 121 | {ERR_FUNC(X509V3_F_V2I_POLICY_MAPPINGS), "V2I_POLICY_MAPPINGS"}, | 121 | {ERR_FUNC(X509V3_F_V2I_SUBJECT_ALT), "V2I_SUBJECT_ALT"}, |
| 122 | {ERR_FUNC(X509V3_F_V2I_SUBJECT_ALT), "V2I_SUBJECT_ALT"}, | 122 | {ERR_FUNC(X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL), "V3_ADDR_VALIDATE_PATH_INTERNAL"}, |
| 123 | {ERR_FUNC(X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL), "V3_ADDR_VALIDATE_PATH_INTERNAL"}, | 123 | {ERR_FUNC(X509V3_F_V3_GENERIC_EXTENSION), "V3_GENERIC_EXTENSION"}, |
| 124 | {ERR_FUNC(X509V3_F_V3_GENERIC_EXTENSION), "V3_GENERIC_EXTENSION"}, | 124 | {ERR_FUNC(X509V3_F_X509V3_ADD1_I2D), "X509V3_add1_i2d"}, |
| 125 | {ERR_FUNC(X509V3_F_X509V3_ADD1_I2D), "X509V3_add1_i2d"}, | 125 | {ERR_FUNC(X509V3_F_X509V3_ADD_VALUE), "X509V3_add_value"}, |
| 126 | {ERR_FUNC(X509V3_F_X509V3_ADD_VALUE), "X509V3_add_value"}, | 126 | {ERR_FUNC(X509V3_F_X509V3_EXT_ADD), "X509V3_EXT_add"}, |
| 127 | {ERR_FUNC(X509V3_F_X509V3_EXT_ADD), "X509V3_EXT_add"}, | 127 | {ERR_FUNC(X509V3_F_X509V3_EXT_ADD_ALIAS), "X509V3_EXT_add_alias"}, |
| 128 | {ERR_FUNC(X509V3_F_X509V3_EXT_ADD_ALIAS), "X509V3_EXT_add_alias"}, | 128 | {ERR_FUNC(X509V3_F_X509V3_EXT_CONF), "X509V3_EXT_conf"}, |
| 129 | {ERR_FUNC(X509V3_F_X509V3_EXT_CONF), "X509V3_EXT_conf"}, | 129 | {ERR_FUNC(X509V3_F_X509V3_EXT_I2D), "X509V3_EXT_i2d"}, |
| 130 | {ERR_FUNC(X509V3_F_X509V3_EXT_I2D), "X509V3_EXT_i2d"}, | 130 | {ERR_FUNC(X509V3_F_X509V3_EXT_NCONF), "X509V3_EXT_nconf"}, |
| 131 | {ERR_FUNC(X509V3_F_X509V3_EXT_NCONF), "X509V3_EXT_nconf"}, | 131 | {ERR_FUNC(X509V3_F_X509V3_GET_SECTION), "X509V3_get_section"}, |
| 132 | {ERR_FUNC(X509V3_F_X509V3_GET_SECTION), "X509V3_get_section"}, | 132 | {ERR_FUNC(X509V3_F_X509V3_GET_STRING), "X509V3_get_string"}, |
| 133 | {ERR_FUNC(X509V3_F_X509V3_GET_STRING), "X509V3_get_string"}, | 133 | {ERR_FUNC(X509V3_F_X509V3_GET_VALUE_BOOL), "X509V3_get_value_bool"}, |
| 134 | {ERR_FUNC(X509V3_F_X509V3_GET_VALUE_BOOL), "X509V3_get_value_bool"}, | 134 | {ERR_FUNC(X509V3_F_X509V3_PARSE_LIST), "X509V3_parse_list"}, |
| 135 | {ERR_FUNC(X509V3_F_X509V3_PARSE_LIST), "X509V3_parse_list"}, | 135 | {ERR_FUNC(X509V3_F_X509_PURPOSE_ADD), "X509_PURPOSE_add"}, |
| 136 | {ERR_FUNC(X509V3_F_X509_PURPOSE_ADD), "X509_PURPOSE_add"}, | 136 | {ERR_FUNC(X509V3_F_X509_PURPOSE_SET), "X509_PURPOSE_set"}, |
| 137 | {ERR_FUNC(X509V3_F_X509_PURPOSE_SET), "X509_PURPOSE_set"}, | 137 | {0, NULL} |
| 138 | {0,NULL} | 138 | }; |
| 139 | }; | ||
| 140 | 139 | ||
| 141 | static ERR_STRING_DATA X509V3_str_reasons[]= | 140 | static ERR_STRING_DATA X509V3_str_reasons[] = { |
| 142 | { | 141 | {ERR_REASON(X509V3_R_BAD_IP_ADDRESS) , "bad ip address"}, |
| 143 | {ERR_REASON(X509V3_R_BAD_IP_ADDRESS) ,"bad ip address"}, | 142 | {ERR_REASON(X509V3_R_BAD_OBJECT) , "bad object"}, |
| 144 | {ERR_REASON(X509V3_R_BAD_OBJECT) ,"bad object"}, | 143 | {ERR_REASON(X509V3_R_BN_DEC2BN_ERROR) , "bn dec2bn error"}, |
| 145 | {ERR_REASON(X509V3_R_BN_DEC2BN_ERROR) ,"bn dec2bn error"}, | 144 | {ERR_REASON(X509V3_R_BN_TO_ASN1_INTEGER_ERROR), "bn to asn1 integer error"}, |
| 146 | {ERR_REASON(X509V3_R_BN_TO_ASN1_INTEGER_ERROR),"bn to asn1 integer error"}, | 145 | {ERR_REASON(X509V3_R_DIRNAME_ERROR) , "dirname error"}, |
| 147 | {ERR_REASON(X509V3_R_DIRNAME_ERROR) ,"dirname error"}, | 146 | {ERR_REASON(X509V3_R_DISTPOINT_ALREADY_SET), "distpoint already set"}, |
| 148 | {ERR_REASON(X509V3_R_DISTPOINT_ALREADY_SET),"distpoint already set"}, | 147 | {ERR_REASON(X509V3_R_DUPLICATE_ZONE_ID) , "duplicate zone id"}, |
| 149 | {ERR_REASON(X509V3_R_DUPLICATE_ZONE_ID) ,"duplicate zone id"}, | 148 | {ERR_REASON(X509V3_R_ERROR_CONVERTING_ZONE), "error converting zone"}, |
| 150 | {ERR_REASON(X509V3_R_ERROR_CONVERTING_ZONE),"error converting zone"}, | 149 | {ERR_REASON(X509V3_R_ERROR_CREATING_EXTENSION), "error creating extension"}, |
| 151 | {ERR_REASON(X509V3_R_ERROR_CREATING_EXTENSION),"error creating extension"}, | 150 | {ERR_REASON(X509V3_R_ERROR_IN_EXTENSION) , "error in extension"}, |
| 152 | {ERR_REASON(X509V3_R_ERROR_IN_EXTENSION) ,"error in extension"}, | 151 | {ERR_REASON(X509V3_R_EXPECTED_A_SECTION_NAME), "expected a section name"}, |
| 153 | {ERR_REASON(X509V3_R_EXPECTED_A_SECTION_NAME),"expected a section name"}, | 152 | {ERR_REASON(X509V3_R_EXTENSION_EXISTS) , "extension exists"}, |
| 154 | {ERR_REASON(X509V3_R_EXTENSION_EXISTS) ,"extension exists"}, | 153 | {ERR_REASON(X509V3_R_EXTENSION_NAME_ERROR), "extension name error"}, |
| 155 | {ERR_REASON(X509V3_R_EXTENSION_NAME_ERROR),"extension name error"}, | 154 | {ERR_REASON(X509V3_R_EXTENSION_NOT_FOUND), "extension not found"}, |
| 156 | {ERR_REASON(X509V3_R_EXTENSION_NOT_FOUND),"extension not found"}, | 155 | {ERR_REASON(X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED), "extension setting not supported"}, |
| 157 | {ERR_REASON(X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED),"extension setting not supported"}, | 156 | {ERR_REASON(X509V3_R_EXTENSION_VALUE_ERROR), "extension value error"}, |
| 158 | {ERR_REASON(X509V3_R_EXTENSION_VALUE_ERROR),"extension value error"}, | 157 | {ERR_REASON(X509V3_R_ILLEGAL_EMPTY_EXTENSION), "illegal empty extension"}, |
| 159 | {ERR_REASON(X509V3_R_ILLEGAL_EMPTY_EXTENSION),"illegal empty extension"}, | 158 | {ERR_REASON(X509V3_R_ILLEGAL_HEX_DIGIT) , "illegal hex digit"}, |
| 160 | {ERR_REASON(X509V3_R_ILLEGAL_HEX_DIGIT) ,"illegal hex digit"}, | 159 | {ERR_REASON(X509V3_R_INCORRECT_POLICY_SYNTAX_TAG), "incorrect policy syntax tag"}, |
| 161 | {ERR_REASON(X509V3_R_INCORRECT_POLICY_SYNTAX_TAG),"incorrect policy syntax tag"}, | 160 | {ERR_REASON(X509V3_R_INVALID_MULTIPLE_RDNS), "invalid multiple rdns"}, |
| 162 | {ERR_REASON(X509V3_R_INVALID_MULTIPLE_RDNS),"invalid multiple rdns"}, | 161 | {ERR_REASON(X509V3_R_INVALID_ASNUMBER) , "invalid asnumber"}, |
| 163 | {ERR_REASON(X509V3_R_INVALID_ASNUMBER) ,"invalid asnumber"}, | 162 | {ERR_REASON(X509V3_R_INVALID_ASRANGE) , "invalid asrange"}, |
| 164 | {ERR_REASON(X509V3_R_INVALID_ASRANGE) ,"invalid asrange"}, | 163 | {ERR_REASON(X509V3_R_INVALID_BOOLEAN_STRING), "invalid boolean string"}, |
| 165 | {ERR_REASON(X509V3_R_INVALID_BOOLEAN_STRING),"invalid boolean string"}, | 164 | {ERR_REASON(X509V3_R_INVALID_EXTENSION_STRING), "invalid extension string"}, |
| 166 | {ERR_REASON(X509V3_R_INVALID_EXTENSION_STRING),"invalid extension string"}, | 165 | {ERR_REASON(X509V3_R_INVALID_INHERITANCE), "invalid inheritance"}, |
| 167 | {ERR_REASON(X509V3_R_INVALID_INHERITANCE),"invalid inheritance"}, | 166 | {ERR_REASON(X509V3_R_INVALID_IPADDRESS) , "invalid ipaddress"}, |
| 168 | {ERR_REASON(X509V3_R_INVALID_IPADDRESS) ,"invalid ipaddress"}, | 167 | {ERR_REASON(X509V3_R_INVALID_NAME) , "invalid name"}, |
| 169 | {ERR_REASON(X509V3_R_INVALID_NAME) ,"invalid name"}, | 168 | {ERR_REASON(X509V3_R_INVALID_NULL_ARGUMENT), "invalid null argument"}, |
| 170 | {ERR_REASON(X509V3_R_INVALID_NULL_ARGUMENT),"invalid null argument"}, | 169 | {ERR_REASON(X509V3_R_INVALID_NULL_NAME) , "invalid null name"}, |
| 171 | {ERR_REASON(X509V3_R_INVALID_NULL_NAME) ,"invalid null name"}, | 170 | {ERR_REASON(X509V3_R_INVALID_NULL_VALUE) , "invalid null value"}, |
| 172 | {ERR_REASON(X509V3_R_INVALID_NULL_VALUE) ,"invalid null value"}, | 171 | {ERR_REASON(X509V3_R_INVALID_NUMBER) , "invalid number"}, |
| 173 | {ERR_REASON(X509V3_R_INVALID_NUMBER) ,"invalid number"}, | 172 | {ERR_REASON(X509V3_R_INVALID_NUMBERS) , "invalid numbers"}, |
| 174 | {ERR_REASON(X509V3_R_INVALID_NUMBERS) ,"invalid numbers"}, | 173 | {ERR_REASON(X509V3_R_INVALID_OBJECT_IDENTIFIER), "invalid object identifier"}, |
| 175 | {ERR_REASON(X509V3_R_INVALID_OBJECT_IDENTIFIER),"invalid object identifier"}, | 174 | {ERR_REASON(X509V3_R_INVALID_OPTION) , "invalid option"}, |
| 176 | {ERR_REASON(X509V3_R_INVALID_OPTION) ,"invalid option"}, | 175 | {ERR_REASON(X509V3_R_INVALID_POLICY_IDENTIFIER), "invalid policy identifier"}, |
| 177 | {ERR_REASON(X509V3_R_INVALID_POLICY_IDENTIFIER),"invalid policy identifier"}, | 176 | {ERR_REASON(X509V3_R_INVALID_PROXY_POLICY_SETTING), "invalid proxy policy setting"}, |
| 178 | {ERR_REASON(X509V3_R_INVALID_PROXY_POLICY_SETTING),"invalid proxy policy setting"}, | 177 | {ERR_REASON(X509V3_R_INVALID_PURPOSE) , "invalid purpose"}, |
| 179 | {ERR_REASON(X509V3_R_INVALID_PURPOSE) ,"invalid purpose"}, | 178 | {ERR_REASON(X509V3_R_INVALID_SAFI) , "invalid safi"}, |
| 180 | {ERR_REASON(X509V3_R_INVALID_SAFI) ,"invalid safi"}, | 179 | {ERR_REASON(X509V3_R_INVALID_SECTION) , "invalid section"}, |
| 181 | {ERR_REASON(X509V3_R_INVALID_SECTION) ,"invalid section"}, | 180 | {ERR_REASON(X509V3_R_INVALID_SYNTAX) , "invalid syntax"}, |
| 182 | {ERR_REASON(X509V3_R_INVALID_SYNTAX) ,"invalid syntax"}, | 181 | {ERR_REASON(X509V3_R_ISSUER_DECODE_ERROR), "issuer decode error"}, |
| 183 | {ERR_REASON(X509V3_R_ISSUER_DECODE_ERROR),"issuer decode error"}, | 182 | {ERR_REASON(X509V3_R_MISSING_VALUE) , "missing value"}, |
| 184 | {ERR_REASON(X509V3_R_MISSING_VALUE) ,"missing value"}, | 183 | {ERR_REASON(X509V3_R_NEED_ORGANIZATION_AND_NUMBERS), "need organization and numbers"}, |
| 185 | {ERR_REASON(X509V3_R_NEED_ORGANIZATION_AND_NUMBERS),"need organization and numbers"}, | 184 | {ERR_REASON(X509V3_R_NO_CONFIG_DATABASE) , "no config database"}, |
| 186 | {ERR_REASON(X509V3_R_NO_CONFIG_DATABASE) ,"no config database"}, | 185 | {ERR_REASON(X509V3_R_NO_ISSUER_CERTIFICATE), "no issuer certificate"}, |
| 187 | {ERR_REASON(X509V3_R_NO_ISSUER_CERTIFICATE),"no issuer certificate"}, | 186 | {ERR_REASON(X509V3_R_NO_ISSUER_DETAILS) , "no issuer details"}, |
| 188 | {ERR_REASON(X509V3_R_NO_ISSUER_DETAILS) ,"no issuer details"}, | 187 | {ERR_REASON(X509V3_R_NO_POLICY_IDENTIFIER), "no policy identifier"}, |
| 189 | {ERR_REASON(X509V3_R_NO_POLICY_IDENTIFIER),"no policy identifier"}, | 188 | {ERR_REASON(X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED), "no proxy cert policy language defined"}, |
| 190 | {ERR_REASON(X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED),"no proxy cert policy language defined"}, | 189 | {ERR_REASON(X509V3_R_NO_PUBLIC_KEY) , "no public key"}, |
| 191 | {ERR_REASON(X509V3_R_NO_PUBLIC_KEY) ,"no public key"}, | 190 | {ERR_REASON(X509V3_R_NO_SUBJECT_DETAILS) , "no subject details"}, |
| 192 | {ERR_REASON(X509V3_R_NO_SUBJECT_DETAILS) ,"no subject details"}, | 191 | {ERR_REASON(X509V3_R_ODD_NUMBER_OF_DIGITS), "odd number of digits"}, |
| 193 | {ERR_REASON(X509V3_R_ODD_NUMBER_OF_DIGITS),"odd number of digits"}, | 192 | {ERR_REASON(X509V3_R_OPERATION_NOT_DEFINED), "operation not defined"}, |
| 194 | {ERR_REASON(X509V3_R_OPERATION_NOT_DEFINED),"operation not defined"}, | 193 | {ERR_REASON(X509V3_R_OTHERNAME_ERROR) , "othername error"}, |
| 195 | {ERR_REASON(X509V3_R_OTHERNAME_ERROR) ,"othername error"}, | 194 | {ERR_REASON(X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED), "policy language already defined"}, |
| 196 | {ERR_REASON(X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED),"policy language already defined"}, | 195 | {ERR_REASON(X509V3_R_POLICY_PATH_LENGTH) , "policy path length"}, |
| 197 | {ERR_REASON(X509V3_R_POLICY_PATH_LENGTH) ,"policy path length"}, | 196 | {ERR_REASON(X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED), "policy path length already defined"}, |
| 198 | {ERR_REASON(X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED),"policy path length already defined"}, | 197 | {ERR_REASON(X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED), "policy syntax not currently supported"}, |
| 199 | {ERR_REASON(X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED),"policy syntax not currently supported"}, | 198 | {ERR_REASON(X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY), "policy when proxy language requires no policy"}, |
| 200 | {ERR_REASON(X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY),"policy when proxy language requires no policy"}, | 199 | {ERR_REASON(X509V3_R_SECTION_NOT_FOUND) , "section not found"}, |
| 201 | {ERR_REASON(X509V3_R_SECTION_NOT_FOUND) ,"section not found"}, | 200 | {ERR_REASON(X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS), "unable to get issuer details"}, |
| 202 | {ERR_REASON(X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS),"unable to get issuer details"}, | 201 | {ERR_REASON(X509V3_R_UNABLE_TO_GET_ISSUER_KEYID), "unable to get issuer keyid"}, |
| 203 | {ERR_REASON(X509V3_R_UNABLE_TO_GET_ISSUER_KEYID),"unable to get issuer keyid"}, | 202 | {ERR_REASON(X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT), "unknown bit string argument"}, |
| 204 | {ERR_REASON(X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT),"unknown bit string argument"}, | 203 | {ERR_REASON(X509V3_R_UNKNOWN_EXTENSION) , "unknown extension"}, |
| 205 | {ERR_REASON(X509V3_R_UNKNOWN_EXTENSION) ,"unknown extension"}, | 204 | {ERR_REASON(X509V3_R_UNKNOWN_EXTENSION_NAME), "unknown extension name"}, |
| 206 | {ERR_REASON(X509V3_R_UNKNOWN_EXTENSION_NAME),"unknown extension name"}, | 205 | {ERR_REASON(X509V3_R_UNKNOWN_OPTION) , "unknown option"}, |
| 207 | {ERR_REASON(X509V3_R_UNKNOWN_OPTION) ,"unknown option"}, | 206 | {ERR_REASON(X509V3_R_UNSUPPORTED_OPTION) , "unsupported option"}, |
| 208 | {ERR_REASON(X509V3_R_UNSUPPORTED_OPTION) ,"unsupported option"}, | 207 | {ERR_REASON(X509V3_R_UNSUPPORTED_TYPE) , "unsupported type"}, |
| 209 | {ERR_REASON(X509V3_R_UNSUPPORTED_TYPE) ,"unsupported type"}, | 208 | {ERR_REASON(X509V3_R_USER_TOO_LONG) , "user too long"}, |
| 210 | {ERR_REASON(X509V3_R_USER_TOO_LONG) ,"user too long"}, | 209 | {0, NULL} |
| 211 | {0,NULL} | 210 | }; |
| 212 | }; | ||
| 213 | 211 | ||
| 214 | #endif | 212 | #endif |
| 215 | 213 | ||
| 216 | void ERR_load_X509V3_strings(void) | 214 | void |
| 217 | { | 215 | ERR_load_X509V3_strings(void) |
| 216 | { | ||
| 218 | #ifndef OPENSSL_NO_ERR | 217 | #ifndef OPENSSL_NO_ERR |
| 219 | 218 | if (ERR_func_error_string(X509V3_str_functs[0].error) == NULL) { | |
| 220 | if (ERR_func_error_string(X509V3_str_functs[0].error) == NULL) | 219 | ERR_load_strings(0, X509V3_str_functs); |
| 221 | { | 220 | ERR_load_strings(0, X509V3_str_reasons); |
| 222 | ERR_load_strings(0,X509V3_str_functs); | ||
| 223 | ERR_load_strings(0,X509V3_str_reasons); | ||
| 224 | } | ||
| 225 | #endif | ||
| 226 | } | 221 | } |
| 222 | #endif | ||
| 223 | } | ||
diff --git a/src/lib/libssl/src/crypto/x509v3/v3prin.c b/src/lib/libssl/src/crypto/x509v3/v3prin.c index d5ff268296..da701de132 100644 --- a/src/lib/libssl/src/crypto/x509v3/v3prin.c +++ b/src/lib/libssl/src/crypto/x509v3/v3prin.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -56,31 +56,31 @@ | |||
| 56 | * | 56 | * |
| 57 | */ | 57 | */ |
| 58 | 58 | ||
| 59 | |||
| 60 | |||
| 61 | #include <stdio.h> | 59 | #include <stdio.h> |
| 62 | #include <openssl/asn1.h> | 60 | #include <openssl/asn1.h> |
| 63 | #include <openssl/conf.h> | 61 | #include <openssl/conf.h> |
| 64 | #include <openssl/x509.h> | 62 | #include <openssl/x509.h> |
| 65 | #include <openssl/x509v3.h> | 63 | #include <openssl/x509v3.h> |
| 66 | 64 | ||
| 67 | int main(int argc, char **argv) | 65 | int |
| 66 | main(int argc, char **argv) | ||
| 68 | { | 67 | { |
| 69 | X509 *cert; | 68 | X509 *cert; |
| 70 | FILE *inf; | 69 | FILE *inf; |
| 71 | int i, count; | 70 | int i, count; |
| 72 | X509_EXTENSION *ext; | 71 | X509_EXTENSION *ext; |
| 72 | |||
| 73 | X509V3_add_standard_extensions(); | 73 | X509V3_add_standard_extensions(); |
| 74 | ERR_load_crypto_strings(); | 74 | ERR_load_crypto_strings(); |
| 75 | if(!argv[1]) { | 75 | if (!argv[1]) { |
| 76 | fprintf(stderr, "Usage v3prin cert.pem\n"); | 76 | fprintf(stderr, "Usage v3prin cert.pem\n"); |
| 77 | exit(1); | 77 | exit(1); |
| 78 | } | 78 | } |
| 79 | if(!(inf = fopen(argv[1], "r"))) { | 79 | if (!(inf = fopen(argv[1], "r"))) { |
| 80 | fprintf(stderr, "Can't open %s\n", argv[1]); | 80 | fprintf(stderr, "Can't open %s\n", argv[1]); |
| 81 | exit(1); | 81 | exit(1); |
| 82 | } | 82 | } |
| 83 | if(!(cert = PEM_read_X509(inf, NULL, NULL))) { | 83 | if (!(cert = PEM_read_X509(inf, NULL, NULL))) { |
| 84 | fprintf(stderr, "Can't read certificate %s\n", argv[1]); | 84 | fprintf(stderr, "Can't read certificate %s\n", argv[1]); |
| 85 | ERR_print_errors_fp(stderr); | 85 | ERR_print_errors_fp(stderr); |
| 86 | exit(1); | 86 | exit(1); |
| @@ -88,12 +88,13 @@ int main(int argc, char **argv) | |||
| 88 | fclose(inf); | 88 | fclose(inf); |
| 89 | count = X509_get_ext_count(cert); | 89 | count = X509_get_ext_count(cert); |
| 90 | printf("%d extensions\n", count); | 90 | printf("%d extensions\n", count); |
| 91 | for(i = 0; i < count; i++) { | 91 | for (i = 0; i < count; i++) { |
| 92 | ext = X509_get_ext(cert, i); | 92 | ext = X509_get_ext(cert, i); |
| 93 | printf("%s\n", OBJ_nid2ln(OBJ_obj2nid(ext->object))); | 93 | printf("%s\n", OBJ_nid2ln(OBJ_obj2nid(ext->object))); |
| 94 | if(!X509V3_EXT_print_fp(stdout, ext, 0, 0)) ERR_print_errors_fp(stderr); | 94 | if (!X509V3_EXT_print_fp(stdout, ext, 0, 0)) |
| 95 | ERR_print_errors_fp(stderr); | ||
| 95 | printf("\n"); | 96 | printf("\n"); |
| 96 | 97 | ||
| 97 | } | 98 | } |
| 98 | return 0; | 99 | return 0; |
| 99 | } | 100 | } |
