summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_srvr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_srvr.c')
-rw-r--r--src/lib/libssl/ssl_srvr.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c
index d665a568d1..acdcb15398 100644
--- a/src/lib/libssl/ssl_srvr.c
+++ b/src/lib/libssl/ssl_srvr.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_srvr.c,v 1.148 2022/07/03 14:58:00 jsing Exp $ */ 1/* $OpenBSD: ssl_srvr.c,v 1.149 2022/08/17 07:39:19 jsing 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 *
@@ -2175,6 +2175,11 @@ ssl3_get_client_certificate(SSL *s)
2175 al = SSL_AD_HANDSHAKE_FAILURE; 2175 al = SSL_AD_HANDSHAKE_FAILURE;
2176 goto fatal_err; 2176 goto fatal_err;
2177 } 2177 }
2178
2179 /*
2180 * If we asked for a client certificate and the client has none,
2181 * it must respond with a certificate list of length zero.
2182 */
2178 if (s->s3->hs.tls12.cert_request != 0) { 2183 if (s->s3->hs.tls12.cert_request != 0) {
2179 SSLerror(s, SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST); 2184 SSLerror(s, SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST);
2180 al = SSL_AD_UNEXPECTED_MESSAGE; 2185 al = SSL_AD_UNEXPECTED_MESSAGE;
@@ -2244,19 +2249,11 @@ ssl3_get_client_certificate(SSL *s)
2244 SSLerror(s, SSL_R_NO_CERTIFICATE_RETURNED); 2249 SSLerror(s, SSL_R_NO_CERTIFICATE_RETURNED);
2245 goto fatal_err; 2250 goto fatal_err;
2246 } 2251 }
2247
2248 X509_free(s->session->peer_cert);
2249 s->session->peer_cert = sk_X509_shift(certs);
2250
2251 /*
2252 * Inconsistency alert: cert_chain does *not* include the
2253 * peer's own certificate, while we do include it in s3_clnt.c
2254 */
2255 sk_X509_pop_free(s->session->cert_chain, X509_free);
2256 s->session->cert_chain = certs;
2257 certs = NULL;
2258
2259 s->session->verify_result = s->verify_result; 2252 s->session->verify_result = s->verify_result;
2253 ERR_clear_error();
2254
2255 if (!tls_process_peer_certs(s, certs))
2256 goto err;
2260 2257
2261 done: 2258 done:
2262 ret = 1; 2259 ret = 1;