summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2022-06-29 21:18:04 +0000
committertb <>2022-06-29 21:18:04 +0000
commit831bfdd11f50ae38c3e5fe343d11393a2e503f51 (patch)
tree473d8a8c4710121d3c89d14c161565036d7a3301
parent4f5e300043721913395d3fbf45b68d4cc92ea802 (diff)
downloadopenbsd-831bfdd11f50ae38c3e5fe343d11393a2e503f51.tar.gz
openbsd-831bfdd11f50ae38c3e5fe343d11393a2e503f51.tar.bz2
openbsd-831bfdd11f50ae38c3e5fe343d11393a2e503f51.zip
Make ssl_cert_add{0,1}_chain_cert() take ssl/ctx
ok beck jsing
-rw-r--r--src/lib/libssl/s3_lib.c10
-rw-r--r--src/lib/libssl/ssl_cert.c28
-rw-r--r--src/lib/libssl/ssl_locl.h6
-rw-r--r--src/lib/libssl/ssl_rsa.c8
4 files changed, 30 insertions, 22 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c
index abc72565fa..4575a141cf 100644
--- a/src/lib/libssl/s3_lib.c
+++ b/src/lib/libssl/s3_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: s3_lib.c,v 1.232 2022/06/29 21:17:22 tb Exp $ */ 1/* $OpenBSD: s3_lib.c,v 1.233 2022/06/29 21:18:04 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 *
@@ -1879,13 +1879,13 @@ SSL_set1_chain(SSL *ssl, STACK_OF(X509) *chain)
1879int 1879int
1880SSL_add0_chain_cert(SSL *ssl, X509 *x509) 1880SSL_add0_chain_cert(SSL *ssl, X509 *x509)
1881{ 1881{
1882 return ssl_cert_add0_chain_cert(ssl->cert, x509); 1882 return ssl_cert_add0_chain_cert(NULL, ssl, x509);
1883} 1883}
1884 1884
1885int 1885int
1886SSL_add1_chain_cert(SSL *ssl, X509 *x509) 1886SSL_add1_chain_cert(SSL *ssl, X509 *x509)
1887{ 1887{
1888 return ssl_cert_add1_chain_cert(ssl->cert, x509); 1888 return ssl_cert_add1_chain_cert(NULL, ssl, x509);
1889} 1889}
1890 1890
1891int 1891int
@@ -2267,13 +2267,13 @@ SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *chain)
2267int 2267int
2268SSL_CTX_add0_chain_cert(SSL_CTX *ctx, X509 *x509) 2268SSL_CTX_add0_chain_cert(SSL_CTX *ctx, X509 *x509)
2269{ 2269{
2270 return ssl_cert_add0_chain_cert(ctx->internal->cert, x509); 2270 return ssl_cert_add0_chain_cert(ctx, NULL, x509);
2271} 2271}
2272 2272
2273int 2273int
2274SSL_CTX_add1_chain_cert(SSL_CTX *ctx, X509 *x509) 2274SSL_CTX_add1_chain_cert(SSL_CTX *ctx, X509 *x509)
2275{ 2275{
2276 return ssl_cert_add1_chain_cert(ctx->internal->cert, x509); 2276 return ssl_cert_add1_chain_cert(ctx, NULL, x509);
2277} 2277}
2278 2278
2279int 2279int
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c
index 102ad66bbb..b5db579489 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.100 2022/06/29 21:17:22 tb Exp $ */ 1/* $OpenBSD: ssl_cert.c,v 1.101 2022/06/29 21:18:04 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 *
@@ -358,25 +358,37 @@ ssl_cert_set1_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain)
358} 358}
359 359
360int 360int
361ssl_cert_add0_chain_cert(SSL_CERT *c, X509 *cert) 361ssl_cert_add0_chain_cert(SSL_CTX *ctx, SSL *ssl, X509 *cert)
362{ 362{
363 if (c->key == NULL) 363 SSL_CERT *ssl_cert;
364 SSL_CERT_PKEY *cpk;
365 int ssl_err;
366
367 if ((ssl_cert = ssl_get0_cert(ctx, ssl)) == NULL)
364 return 0; 368 return 0;
365 369
366 if (c->key->chain == NULL) { 370 if ((cpk = ssl_cert->key) == NULL)
367 if ((c->key->chain = sk_X509_new_null()) == NULL) 371 return 0;
372
373 if (!ssl_security_cert(ctx, ssl, cert, 0, &ssl_err)) {
374 SSLerrorx(ssl_err);
375 return 0;
376 }
377
378 if (cpk->chain == NULL) {
379 if ((cpk->chain = sk_X509_new_null()) == NULL)
368 return 0; 380 return 0;
369 } 381 }
370 if (!sk_X509_push(c->key->chain, cert)) 382 if (!sk_X509_push(cpk->chain, cert))
371 return 0; 383 return 0;
372 384
373 return 1; 385 return 1;
374} 386}
375 387
376int 388int
377ssl_cert_add1_chain_cert(SSL_CERT *c, X509 *cert) 389ssl_cert_add1_chain_cert(SSL_CTX *ctx, SSL *ssl, X509 *cert)
378{ 390{
379 if (!ssl_cert_add0_chain_cert(c, cert)) 391 if (!ssl_cert_add0_chain_cert(ctx, ssl, cert))
380 return 0; 392 return 0;
381 393
382 X509_up_ref(cert); 394 X509_up_ref(cert);
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h
index fd644e5b37..b46e37f5eb 100644
--- a/src/lib/libssl/ssl_locl.h
+++ b/src/lib/libssl/ssl_locl.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_locl.h,v 1.406 2022/06/29 21:17:22 tb Exp $ */ 1/* $OpenBSD: ssl_locl.h,v 1.407 2022/06/29 21:18:04 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 *
@@ -1288,8 +1288,8 @@ void ssl_cert_free(SSL_CERT *c);
1288SSL_CERT *ssl_get0_cert(SSL_CTX *ctx, SSL *ssl); 1288SSL_CERT *ssl_get0_cert(SSL_CTX *ctx, SSL *ssl);
1289int ssl_cert_set0_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain); 1289int ssl_cert_set0_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain);
1290int ssl_cert_set1_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain); 1290int ssl_cert_set1_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain);
1291int ssl_cert_add0_chain_cert(SSL_CERT *c, X509 *cert); 1291int ssl_cert_add0_chain_cert(SSL_CTX *ctx, SSL *ssl, X509 *cert);
1292int ssl_cert_add1_chain_cert(SSL_CERT *c, X509 *cert); 1292int ssl_cert_add1_chain_cert(SSL_CTX *ctx, SSL *ssl, X509 *cert);
1293 1293
1294int ssl_security_default_cb(const SSL *ssl, const SSL_CTX *ctx, int op, 1294int ssl_security_default_cb(const SSL *ssl, const SSL_CTX *ctx, int op,
1295 int bits, int nid, void *other, void *ex_data); 1295 int bits, int nid, void *other, void *ex_data);
diff --git a/src/lib/libssl/ssl_rsa.c b/src/lib/libssl/ssl_rsa.c
index 32634a7f0d..9a1f916e57 100644
--- a/src/lib/libssl/ssl_rsa.c
+++ b/src/lib/libssl/ssl_rsa.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_rsa.c,v 1.43 2022/06/29 21:17:22 tb Exp $ */ 1/* $OpenBSD: ssl_rsa.c,v 1.44 2022/06/29 21:18:04 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 *
@@ -641,7 +641,6 @@ use_certificate_chain_bio(SSL_CTX *ctx, SSL *ssl, BIO *in)
641{ 641{
642 pem_password_cb *passwd_cb; 642 pem_password_cb *passwd_cb;
643 void *passwd_arg; 643 void *passwd_arg;
644 SSL_CERT *cert;
645 X509 *ca, *x = NULL; 644 X509 *ca, *x = NULL;
646 unsigned long err; 645 unsigned long err;
647 int ret = 0; 646 int ret = 0;
@@ -655,9 +654,6 @@ use_certificate_chain_bio(SSL_CTX *ctx, SSL *ssl, BIO *in)
655 goto err; 654 goto err;
656 } 655 }
657 656
658 if ((cert = ssl_get0_cert(ctx, ssl)) == NULL)
659 goto err;
660
661 if (!ssl_set_cert(ctx, ssl, x)) 657 if (!ssl_set_cert(ctx, ssl, x))
662 goto err; 658 goto err;
663 659
@@ -667,7 +663,7 @@ use_certificate_chain_bio(SSL_CTX *ctx, SSL *ssl, BIO *in)
667 /* Process any additional CA certificates. */ 663 /* Process any additional CA certificates. */
668 while ((ca = PEM_read_bio_X509(in, NULL, passwd_cb, passwd_arg)) != 664 while ((ca = PEM_read_bio_X509(in, NULL, passwd_cb, passwd_arg)) !=
669 NULL) { 665 NULL) {
670 if (!ssl_cert_add0_chain_cert(cert, ca)) { 666 if (!ssl_cert_add0_chain_cert(ctx, ssl, ca)) {
671 X509_free(ca); 667 X509_free(ca);
672 goto err; 668 goto err;
673 } 669 }