From: Steven Collison Date: Sat, 18 Jun 2022 15:26:20 +0000 (-0700) Subject: s_client: Support interactive reconnect command X-Git-Tag: openssl-3.2.0-alpha1~1976 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=511c49189ef600d41f44cd7c5d204e9ea27b5f48;p=thirdparty%2Fopenssl.git s_client: Support interactive reconnect command 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 Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/18683) --- diff --git a/apps/s_client.c b/apps/s_client.c index 1ed5f753e6d..0b8805a6522 100644 --- a/apps/s_client.c +++ b/apps/s_client.c @@ -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);