summaryrefslogtreecommitdiff
path: root/src/lib/libssl/s3_both.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/s3_both.c')
-rw-r--r--src/lib/libssl/s3_both.c25
1 files changed, 7 insertions, 18 deletions
diff --git a/src/lib/libssl/s3_both.c b/src/lib/libssl/s3_both.c
index 64d317b7ac..8864366f59 100644
--- a/src/lib/libssl/s3_both.c
+++ b/src/lib/libssl/s3_both.c
@@ -268,23 +268,16 @@ unsigned long ssl3_output_cert_chain(SSL *s, X509 *x)
268 X509_STORE_CTX xs_ctx; 268 X509_STORE_CTX xs_ctx;
269 X509_OBJECT obj; 269 X509_OBJECT obj;
270 270
271 int no_chain;
272
273 if ((s->mode & SSL_MODE_NO_AUTO_CHAIN) || s->ctx->extra_certs)
274 no_chain = 1;
275 else
276 no_chain = 0;
277
278 /* TLSv1 sends a chain with nothing in it, instead of an alert */ 271 /* TLSv1 sends a chain with nothing in it, instead of an alert */
279 buf=s->init_buf; 272 buf=s->init_buf;
280 if (!BUF_MEM_grow_clean(buf,10)) 273 if (!BUF_MEM_grow(buf,(int)(10)))
281 { 274 {
282 SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_BUF_LIB); 275 SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_BUF_LIB);
283 return(0); 276 return(0);
284 } 277 }
285 if (x != NULL) 278 if (x != NULL)
286 { 279 {
287 if(!no_chain && !X509_STORE_CTX_init(&xs_ctx,s->ctx->cert_store,NULL,NULL)) 280 if(!X509_STORE_CTX_init(&xs_ctx,s->ctx->cert_store,NULL,NULL))
288 { 281 {
289 SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_X509_LIB); 282 SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_X509_LIB);
290 return(0); 283 return(0);
@@ -293,7 +286,7 @@ unsigned long ssl3_output_cert_chain(SSL *s, X509 *x)
293 for (;;) 286 for (;;)
294 { 287 {
295 n=i2d_X509(x,NULL); 288 n=i2d_X509(x,NULL);
296 if (!BUF_MEM_grow_clean(buf,(int)(n+l+3))) 289 if (!BUF_MEM_grow(buf,(int)(n+l+3)))
297 { 290 {
298 SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_BUF_LIB); 291 SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_BUF_LIB);
299 return(0); 292 return(0);
@@ -302,10 +295,6 @@ unsigned long ssl3_output_cert_chain(SSL *s, X509 *x)
302 l2n3(n,p); 295 l2n3(n,p);
303 i2d_X509(x,&p); 296 i2d_X509(x,&p);
304 l+=n+3; 297 l+=n+3;
305
306 if (no_chain)
307 break;
308
309 if (X509_NAME_cmp(X509_get_subject_name(x), 298 if (X509_NAME_cmp(X509_get_subject_name(x),
310 X509_get_issuer_name(x)) == 0) break; 299 X509_get_issuer_name(x)) == 0) break;
311 300
@@ -317,8 +306,8 @@ unsigned long ssl3_output_cert_chain(SSL *s, X509 *x)
317 * ref count */ 306 * ref count */
318 X509_free(x); 307 X509_free(x);
319 } 308 }
320 if (!no_chain) 309
321 X509_STORE_CTX_cleanup(&xs_ctx); 310 X509_STORE_CTX_cleanup(&xs_ctx);
322 } 311 }
323 312
324 /* Thawte special :-) */ 313 /* Thawte special :-) */
@@ -327,7 +316,7 @@ unsigned long ssl3_output_cert_chain(SSL *s, X509 *x)
327 { 316 {
328 x=sk_X509_value(s->ctx->extra_certs,i); 317 x=sk_X509_value(s->ctx->extra_certs,i);
329 n=i2d_X509(x,NULL); 318 n=i2d_X509(x,NULL);
330 if (!BUF_MEM_grow_clean(buf,(int)(n+l+3))) 319 if (!BUF_MEM_grow(buf,(int)(n+l+3)))
331 { 320 {
332 SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_BUF_LIB); 321 SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_BUF_LIB);
333 return(0); 322 return(0);
@@ -450,7 +439,7 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
450 SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_EXCESSIVE_MESSAGE_SIZE); 439 SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_EXCESSIVE_MESSAGE_SIZE);
451 goto f_err; 440 goto f_err;
452 } 441 }
453 if (l && !BUF_MEM_grow_clean(s->init_buf,(int)l+4)) 442 if (l && !BUF_MEM_grow(s->init_buf,(int)l+4))
454 { 443 {
455 SSLerr(SSL_F_SSL3_GET_MESSAGE,ERR_R_BUF_LIB); 444 SSLerr(SSL_F_SSL3_GET_MESSAGE,ERR_R_BUF_LIB);
456 goto err; 445 goto err;