summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/x_x509.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/x_x509.c')
-rw-r--r--src/lib/libcrypto/asn1/x_x509.c71
1 files changed, 41 insertions, 30 deletions
diff --git a/src/lib/libcrypto/asn1/x_x509.c b/src/lib/libcrypto/asn1/x_x509.c
index 20448a8e3b..e7d613e20f 100644
--- a/src/lib/libcrypto/asn1/x_x509.c
+++ b/src/lib/libcrypto/asn1/x_x509.c
@@ -5,21 +5,21 @@
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used. 19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or 20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -81,15 +81,15 @@ IMPLEMENT_ASN1_FUNCTIONS(X509_CINF)
81 81
82extern void policy_cache_free(X509_POLICY_CACHE *cache); 82extern void policy_cache_free(X509_POLICY_CACHE *cache);
83 83
84static int x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, 84static int
85 void *exarg) 85x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg)
86{ 86{
87 X509 *ret = (X509 *)*pval; 87 X509 *ret = (X509 *)*pval;
88 88
89 switch(operation) { 89 switch (operation) {
90 90
91 case ASN1_OP_NEW_POST: 91 case ASN1_OP_NEW_POST:
92 ret->valid=0; 92 ret->valid = 0;
93 ret->name = NULL; 93 ret->name = NULL;
94 ret->ex_flags = 0; 94 ret->ex_flags = 0;
95 ret->ex_pathlen = -1; 95 ret->ex_pathlen = -1;
@@ -105,8 +105,9 @@ static int x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
105 break; 105 break;
106 106
107 case ASN1_OP_D2I_POST: 107 case ASN1_OP_D2I_POST:
108 if (ret->name != NULL) free(ret->name); 108 if (ret->name != NULL)
109 ret->name=X509_NAME_oneline(ret->cert_info->subject,NULL,0); 109 free(ret->name);
110 ret->name = X509_NAME_oneline(ret->cert_info->subject, NULL, 0);
110 break; 111 break;
111 112
112 case ASN1_OP_FREE_POST: 113 case ASN1_OP_FREE_POST:
@@ -122,14 +123,12 @@ static int x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
122 sk_IPAddressFamily_pop_free(ret->rfc3779_addr, IPAddressFamily_free); 123 sk_IPAddressFamily_pop_free(ret->rfc3779_addr, IPAddressFamily_free);
123 ASIdentifiers_free(ret->rfc3779_asid); 124 ASIdentifiers_free(ret->rfc3779_asid);
124#endif 125#endif
125 126 if (ret->name != NULL)
126 if (ret->name != NULL) free(ret->name); 127 free(ret->name);
127 break; 128 break;
128
129 } 129 }
130 130
131 return 1; 131 return 1;
132
133} 132}
134 133
135ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { 134ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = {
@@ -141,21 +140,24 @@ ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = {
141IMPLEMENT_ASN1_FUNCTIONS(X509) 140IMPLEMENT_ASN1_FUNCTIONS(X509)
142IMPLEMENT_ASN1_DUP_FUNCTION(X509) 141IMPLEMENT_ASN1_DUP_FUNCTION(X509)
143 142
144int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, 143int
145 CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) 144X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
145 CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
146{ 146{
147 return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, argl, argp, 147 return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, argl, argp,
148 new_func, dup_func, free_func); 148 new_func, dup_func, free_func);
149} 149}
150 150
151int X509_set_ex_data(X509 *r, int idx, void *arg) 151int
152X509_set_ex_data(X509 *r, int idx, void *arg)
152{ 153{
153 return(CRYPTO_set_ex_data(&r->ex_data,idx,arg)); 154 return (CRYPTO_set_ex_data(&r->ex_data, idx, arg));
154} 155}
155 156
156void *X509_get_ex_data(X509 *r, int idx) 157void *
158X509_get_ex_data(X509 *r, int idx)
157{ 159{
158 return(CRYPTO_get_ex_data(&r->ex_data,idx)); 160 return (CRYPTO_get_ex_data(&r->ex_data, idx));
159} 161}
160 162
161/* X509_AUX ASN1 routines. X509_AUX is the name given to 163/* X509_AUX ASN1 routines. X509_AUX is the name given to
@@ -166,29 +168,38 @@ void *X509_get_ex_data(X509 *r, int idx)
166 * 168 *
167 */ 169 */
168 170
169X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length) 171X509 *
172d2i_X509_AUX(X509 **a, const unsigned char **pp, long length)
170{ 173{
171 const unsigned char *q; 174 const unsigned char *q;
172 X509 *ret; 175 X509 *ret;
176
173 /* Save start position */ 177 /* Save start position */
174 q = *pp; 178 q = *pp;
175 ret = d2i_X509(a, pp, length); 179 ret = d2i_X509(a, pp, length);
176 /* If certificate unreadable then forget it */ 180 /* If certificate unreadable then forget it */
177 if(!ret) return NULL; 181 if (!ret)
182 return NULL;
178 /* update length */ 183 /* update length */
179 length -= *pp - q; 184 length -= *pp - q;
180 if(!length) return ret; 185 if (!length)
181 if(!d2i_X509_CERT_AUX(&ret->aux, pp, length)) goto err; 186 return ret;
187 if (!d2i_X509_CERT_AUX(&ret->aux, pp, length))
188 goto err;
182 return ret; 189 return ret;
183 err: 190
191err:
184 X509_free(ret); 192 X509_free(ret);
185 return NULL; 193 return NULL;
186} 194}
187 195
188int i2d_X509_AUX(X509 *a, unsigned char **pp) 196int
197i2d_X509_AUX(X509 *a, unsigned char **pp)
189{ 198{
190 int length; 199 int length;
200
191 length = i2d_X509(a, pp); 201 length = i2d_X509(a, pp);
192 if(a) length += i2d_X509_CERT_AUX(a->aux, pp); 202 if (a)
203 length += i2d_X509_CERT_AUX(a->aux, pp);
193 return length; 204 return length;
194} 205}