summaryrefslogtreecommitdiff
path: root/lib/libssl/ssl_cert.c
diff options
context:
space:
mode:
authorTheo Buehler <tb@cvs.openbsd.org>2021-03-27 17:56:29 +0000
committerTheo Buehler <tb@cvs.openbsd.org>2021-03-27 17:56:29 +0000
commit7b1dcc32faca7ce13e32d2d5c419b293d04e77c4 (patch)
tree81669b4f5c66e754c99370cf7a51c51e98a3223d /lib/libssl/ssl_cert.c
parent8763e95ae4fe262fa44005a567a5482be86d9d46 (diff)
Garbage collect s->internal->type
This variable is used in the legacy stack to decide whether we are a server or a client. That's what s->server is for... The new TLSv1.3 stack failed to set s->internal->type, which resulted in hilarious mishandling of previous_{client,server}_finished. Indeed, both client and server would first store the client's verify_data in previous_server_finished and later overwrite it with the server's verify_data. Consequently, renegotiation has been completely broken for more than a year. In fact, server side renegotiation was broken during the 6.5 release cycle. Clearly, no-one uses this. This commit fixes client side renegotiation and restores the previous behavior of SSL_get_client_CA_list(). Server side renegotiation will be fixed in a later commit. ok jsing
Diffstat (limited to 'lib/libssl/ssl_cert.c')
-rw-r--r--lib/libssl/ssl_cert.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/libssl/ssl_cert.c b/lib/libssl/ssl_cert.c
index 2e0dca58eab..03ef8565ac5 100644
--- a/lib/libssl/ssl_cert.c
+++ b/lib/libssl/ssl_cert.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssl_cert.c,v 1.80 2020/11/20 08:08:02 tb Exp $ */
+/* $OpenBSD: ssl_cert.c,v 1.81 2021/03/27 17:56:28 tb Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@@ -505,7 +505,7 @@ SSL_CTX_get_client_CA_list(const SSL_CTX *ctx)
STACK_OF(X509_NAME) *
SSL_get_client_CA_list(const SSL *s)
{
- if (s->internal->type == SSL_ST_CONNECT) {
+ if (!s->server) {
/* We are in the client. */
if ((s->version >> 8) == SSL3_VERSION_MAJOR)
return (S3I(s)->tmp.ca_names);