summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509v3/v3_info.c
diff options
context:
space:
mode:
authorjsing <>2014-04-21 17:02:33 +0000
committerjsing <>2014-04-21 17:02:33 +0000
commit99afdfe5ba7757a5ea5051f8881b3fe1ac016ece (patch)
tree643695fdb9ba102ffa4879182b0dd9c297d8c0f3 /src/lib/libcrypto/x509v3/v3_info.c
parent1d74853fd0a51591b1a5915391aee920ef15e5eb (diff)
downloadopenbsd-99afdfe5ba7757a5ea5051f8881b3fe1ac016ece.tar.gz
openbsd-99afdfe5ba7757a5ea5051f8881b3fe1ac016ece.tar.bz2
openbsd-99afdfe5ba7757a5ea5051f8881b3fe1ac016ece.zip
KNF.
Diffstat (limited to 'src/lib/libcrypto/x509v3/v3_info.c')
-rw-r--r--src/lib/libcrypto/x509v3/v3_info.c129
1 files changed, 73 insertions, 56 deletions
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
66static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, 66static 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);
69static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, 69static 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
72const X509V3_EXT_METHOD v3_info = 72const 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,
740,0,0,0, 74 ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS),
750,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,
780,0, 78 (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS,
79NULL}; 79 0, 0,
80 80 NULL
81const X509V3_EXT_METHOD v3_sinfo = 81};
82{ NID_sinfo_access, X509V3_EXT_MULTILINE, ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), 82
830,0,0,0, 83const X509V3_EXT_METHOD v3_sinfo = {
840,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,
870,0, 87 0, 0,
88NULL}; 88 (X509V3_EXT_I2V)i2v_AUTHORITY_INFO_ACCESS,
89 (X509V3_EXT_V2I)v2i_AUTHORITY_INFO_ACCESS,
90 0, 0,
91 NULL
92};
89 93
90ASN1_SEQUENCE(ACCESS_DESCRIPTION) = { 94ASN1_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
95IMPLEMENT_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) 99IMPLEMENT_ASN1_FUNCTIONS(ACCESS_DESCRIPTION)
96 100
97ASN1_ITEM_TEMPLATE(AUTHORITY_INFO_ACCESS) = 101ASN1_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)
99ASN1_ITEM_TEMPLATE_END(AUTHORITY_INFO_ACCESS) 104ASN1_ITEM_TEMPLATE_END(AUTHORITY_INFO_ACCESS)
100 105
101IMPLEMENT_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) 106IMPLEMENT_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)
102 107
103static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, 108static STACK_OF(CONF_VALUE) *
104 AUTHORITY_INFO_ACCESS *ainfo, 109i2v_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
135static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method, 143static AUTHORITY_INFO_ACCESS *
136 X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) 144v2i_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
196err:
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
185int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION* a) 201int
186 { 202i2a_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}