Add NNTP support (RFC 4642) to s_client ("-starttls nntp")

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2310)
This commit is contained in:
Robert Scheck 2017-01-28 00:52:27 +01:00 committed by Rich Salz
parent bc1dba2095
commit 8f85aa6bd3
2 changed files with 31 additions and 2 deletions

View File

@ -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 (;;) {

View File

@ -437,7 +437,7 @@ command for more information.
send the protocol-specific message(s) to switch to TLS for communication.
B<protocol> 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>