]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
s_client: Support interactive reconnect command
authorSteven Collison <steven@raycoll.com>
Sat, 18 Jun 2022 15:26:20 +0000 (08:26 -0700)
committerPauli <pauli@openssl.org>
Tue, 4 Oct 2022 04:01:36 +0000 (15:01 +1100)
This change adds the 'C' command character to allow a user to drop the
current session and reconnect to the server. It has the same behavior as
the `-reconnect` option except this allows reconnect to be triggered at
an arbitrary point in the session.

The primary use case for this change is to provide a way for the user to
probe a server for TLS1.3 session resumption support. This is not
currently reliably supported by the `-reconnect` option.

Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/18683)

apps/s_client.c

index 1ed5f753e6dc9e63eedfe040f3b9b123386cceae..0b8805a6522be90200036f929fb0338435d8d7e9 100644 (file)
@@ -3081,6 +3081,16 @@ int s_client_main(int argc, char **argv)
                 goto shut;
             }
 
+            if ((!c_ign_eof) && ((i <= 0) || (cbuf[0] == 'C' && cmdletters))) {
+                cbuf_len = 0;
+                BIO_printf(bio_c_out,
+                           "RECONNECTING\n");
+                do_ssl_shutdown(con);
+                SSL_set_connect_state(con);
+                BIO_closesocket(SSL_get_fd(con));
+                goto re_start;
+            }
+
             if ((!c_ign_eof) && (cbuf[0] == 'R' && cmdletters)) {
                 BIO_printf(bio_err, "RENEGOTIATING\n");
                 SSL_renegotiate(con);