提交 8f85aa6b 编写于 作者: R Robert Scheck 提交者: Rich Salz

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

Reviewed-by: NAndy Polyakov <appro@openssl.org>
Reviewed-by: NRich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2310)
上级 bc1dba20
......@@ -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 (;;) {
......
......@@ -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>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册