From 4785c095dbfb3630ddf6685f23e3a19c7c804cbc Mon Sep 17 00:00:00 2001 From: William Pitcock <nenolod@dereferenced.org> Date: Thu, 5 Feb 2015 09:02:00 +0200 Subject: [PATCH] add ircv3 tls-3.1 extension support to s_client --- apps/s_client.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/apps/s_client.c b/apps/s_client.c index 8aee02a..0a28b89 100644 --- a/apps/s_client.c +++ b/apps/s_client.c @@ -401,7 +401,7 @@ static void sc_usage(void) BIO_printf(bio_err, " 'prot' defines which one to assume. Currently,\n"); BIO_printf(bio_err, - " only \"smtp\", \"pop3\", \"imap\", \"ftp\" and \"xmpp\"\n"); + " only \"smtp\", \"pop3\", \"imap\", \"ftp\", \"xmpp\" and \"ircv3\"\n"); BIO_printf(bio_err, " are supported.\n"); #ifndef OPENSSL_NO_ENGINE BIO_printf(bio_err, @@ -640,7 +640,8 @@ enum { PROTO_POP3, PROTO_IMAP, PROTO_FTP, - PROTO_XMPP + PROTO_XMPP, + PROTO_IRCV3, }; int MAIN(int, char **); @@ -1062,6 +1063,8 @@ int MAIN(int argc, char **argv) starttls_proto = PROTO_FTP; else if (strcmp(*argv, "xmpp") == 0) starttls_proto = PROTO_XMPP; + else if (strcmp(*argv, "ircv3") == 0) + starttls_proto = PROTO_IRCV3; else goto bad; } @@ -1646,6 +1649,23 @@ int MAIN(int argc, char **argv) goto shut; mbuf[0] = 0; } + if (starttls_proto == PROTO_IRCV3) { + int seen = 0; + BIO_printf(sbio,"CAP REQ :tls\r\n"); + + while (!strstr(mbuf,"CAP")) { + seen = BIO_read(sbio,mbuf,BUFSIZZ); + mbuf[seen] = 0; + } + if (!strstr(mbuf,"ACK")) + goto shut; + BIO_printf(sbio,"CAP END\r\nSTARTTLS\r\n"); + while (!strstr(sbuf, "670")) { + seen = BIO_read(sbio,sbuf,BUFSIZZ); + sbuf[seen] = 0; + } + mbuf[0] = 0; + } for (;;) { FD_ZERO(&readfds); -- 2.2.2