From: Robert Scheck Date: Fri, 27 Jan 2017 23:52:27 +0000 (+0100) Subject: Add NNTP support (RFC 4642) to s_client ("-starttls nntp") X-Git-Tag: OpenSSL_1_1_1-pre1~2479 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8f85aa6bd3737547634bbbe1e141f728674fb594;p=oweals%2Fopenssl.git Add NNTP support (RFC 4642) to s_client ("-starttls nntp") Reviewed-by: Andy Polyakov Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/2310) --- diff --git a/apps/s_client.c b/apps/s_client.c index 99770b9b97..d9dbe702f9 100644 --- a/apps/s_client.c +++ b/apps/s_client.c @@ -746,7 +746,8 @@ typedef enum PROTOCOL_choice { PROTO_CONNECT, PROTO_IRC, PROTO_POSTGRES, - PROTO_LMTP + PROTO_LMTP, + PROTO_NNTP } PROTOCOL_CHOICE; static const OPT_PAIR services[] = { @@ -760,6 +761,7 @@ static const OPT_PAIR services[] = { {"irc", PROTO_IRC}, {"postgres", PROTO_POSTGRES}, {"lmtp", PROTO_LMTP}, + {"nntp", PROTO_NNTP}, {NULL, 0} }; @@ -2172,6 +2174,33 @@ int s_client_main(int argc, char **argv) goto shut; } break; + case PROTO_NNTP: + { + int foundit = 0; + BIO *fbio = BIO_new(BIO_f_buffer()); + + BIO_push(fbio, sbio); + BIO_gets(fbio, mbuf, BUFSIZZ); + /* STARTTLS command requires CAPABILITIES... */ + BIO_printf(fbio, "CAPABILITIES\r\n"); + (void)BIO_flush(fbio); + /* wait for multi-line CAPABILITIES response */ + do { + mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); + if (strstr(mbuf, "STARTTLS")) + foundit = 1; + } while (mbuf_len > 1 && mbuf[0] != '.'); + (void)BIO_flush(fbio); + BIO_pop(fbio); + BIO_free(fbio); + if (!foundit) + BIO_printf(bio_err, + "Didn't find STARTTLS in server response," + " trying anyway...\n"); + BIO_printf(sbio, "STARTTLS\r\n"); + BIO_read(sbio, sbuf, BUFSIZZ); + } + break; } for (;;) { diff --git a/doc/man1/s_client.pod b/doc/man1/s_client.pod index 2ebd6822b8..fb1680a1a5 100644 --- a/doc/man1/s_client.pod +++ b/doc/man1/s_client.pod @@ -437,7 +437,7 @@ command for more information. send the protocol-specific message(s) to switch to TLS for communication. B is a keyword for the intended protocol. Currently, the only supported keywords are "smtp", "pop3", "imap", "ftp", "xmpp", "xmpp-server", -"irc", "postgres" and "lmtp". +"irc", "postgres", "lmtp" and "nntp". =item B<-xmpphost hostname>