summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2021-10-23 13:14:38 +0000
committertb <>2021-10-23 13:14:38 +0000
commit3a97113aaac4c71917ea6bcb2f8cf69c939ca55a (patch)
treef7ff37344929f7b6cf77f4d97886e6e9119c1bd2 /src
parent73bf90775184788b1c3a4f8ab69c9e069ffbffa8 (diff)
downloadopenbsd-3a97113aaac4c71917ea6bcb2f8cf69c939ca55a.tar.gz
openbsd-3a97113aaac4c71917ea6bcb2f8cf69c939ca55a.tar.bz2
openbsd-3a97113aaac4c71917ea6bcb2f8cf69c939ca55a.zip
Change ssl_verify_cert_chain() for compatibility with opaque
X509_STORE_CTX and use accessors instead of reaching directly into the struct. ok jsing
Diffstat (limited to 'src')
-rw-r--r--src/lib/libssl/ssl_cert.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c
index a13ee598ce..b7c3718ef5 100644
--- a/src/lib/libssl/ssl_cert.c
+++ b/src/lib/libssl/ssl_cert.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_cert.c,v 1.83 2021/06/11 11:13:53 jsing Exp $ */ 1/* $OpenBSD: ssl_cert.c,v 1.84 2021/10/23 13:14:38 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -408,46 +408,49 @@ ssl_sess_cert_free(SESS_CERT *sc)
408int 408int
409ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk) 409ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk)
410{ 410{
411 X509_STORE_CTX ctx; 411 X509_STORE_CTX *ctx = NULL;
412 X509 *x; 412 X509 *x;
413 int ret; 413 int ret = 0;
414 414
415 if ((sk == NULL) || (sk_X509_num(sk) == 0)) 415 if ((sk == NULL) || (sk_X509_num(sk) == 0))
416 return (0); 416 goto err;
417
418 if ((ctx = X509_STORE_CTX_new()) == NULL)
419 goto err;
417 420
418 x = sk_X509_value(sk, 0); 421 x = sk_X509_value(sk, 0);
419 if (!X509_STORE_CTX_init(&ctx, s->ctx->cert_store, x, sk)) { 422 if (!X509_STORE_CTX_init(ctx, s->ctx->cert_store, x, sk)) {
420 SSLerror(s, ERR_R_X509_LIB); 423 SSLerror(s, ERR_R_X509_LIB);
421 return (0); 424 goto err;
422 } 425 }
423 X509_STORE_CTX_set_ex_data(&ctx, 426 X509_STORE_CTX_set_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx(), s);
424 SSL_get_ex_data_X509_STORE_CTX_idx(), s);
425 427
426 /* 428 /*
427 * We need to inherit the verify parameters. These can be 429 * We need to inherit the verify parameters. These can be
428 * determined by the context: if its a server it will verify 430 * determined by the context: if its a server it will verify
429 * SSL client certificates or vice versa. 431 * SSL client certificates or vice versa.
430 */ 432 */
431 X509_STORE_CTX_set_default(&ctx, 433 X509_STORE_CTX_set_default(ctx, s->server ? "ssl_client" : "ssl_server");
432 s->server ? "ssl_client" : "ssl_server");
433 434
434 /* 435 /*
435 * Anything non-default in "param" should overwrite anything 436 * Anything non-default in "param" should overwrite anything
436 * in the ctx. 437 * in the ctx.
437 */ 438 */
438 X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(&ctx), s->param); 439 X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(ctx), s->param);
439 440
440 if (s->internal->verify_callback) 441 if (s->internal->verify_callback)
441 X509_STORE_CTX_set_verify_cb(&ctx, s->internal->verify_callback); 442 X509_STORE_CTX_set_verify_cb(ctx, s->internal->verify_callback);
442 443
443 if (s->ctx->internal->app_verify_callback != NULL) 444 if (s->ctx->internal->app_verify_callback != NULL)
444 ret = s->ctx->internal->app_verify_callback(&ctx, 445 ret = s->ctx->internal->app_verify_callback(ctx,
445 s->ctx->internal->app_verify_arg); 446 s->ctx->internal->app_verify_arg);
446 else 447 else
447 ret = X509_verify_cert(&ctx); 448 ret = X509_verify_cert(ctx);
448 449
449 s->verify_result = ctx.error; 450 s->verify_result = X509_STORE_CTX_get_error(ctx);
450 X509_STORE_CTX_cleanup(&ctx); 451
452 err:
453 X509_STORE_CTX_free(ctx);
451 454
452 return (ret); 455 return (ret);
453} 456}