提交 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 { ...@@ -746,7 +746,8 @@ typedef enum PROTOCOL_choice {
PROTO_CONNECT, PROTO_CONNECT,
PROTO_IRC, PROTO_IRC,
PROTO_POSTGRES, PROTO_POSTGRES,
PROTO_LMTP PROTO_LMTP,
PROTO_NNTP
} PROTOCOL_CHOICE; } PROTOCOL_CHOICE;
static const OPT_PAIR services[] = { static const OPT_PAIR services[] = {
...@@ -760,6 +761,7 @@ static const OPT_PAIR services[] = { ...@@ -760,6 +761,7 @@ static const OPT_PAIR services[] = {
{"irc", PROTO_IRC}, {"irc", PROTO_IRC},
{"postgres", PROTO_POSTGRES}, {"postgres", PROTO_POSTGRES},
{"lmtp", PROTO_LMTP}, {"lmtp", PROTO_LMTP},
{"nntp", PROTO_NNTP},
{NULL, 0} {NULL, 0}
}; };
...@@ -2172,6 +2174,33 @@ int s_client_main(int argc, char **argv) ...@@ -2172,6 +2174,33 @@ int s_client_main(int argc, char **argv)
goto shut; goto shut;
} }
break; 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 (;;) { for (;;) {
......
...@@ -437,7 +437,7 @@ command for more information. ...@@ -437,7 +437,7 @@ command for more information.
send the protocol-specific message(s) to switch to TLS for communication. send the protocol-specific message(s) to switch to TLS for communication.
B<protocol> is a keyword for the intended protocol. Currently, the only B<protocol> is a keyword for the intended protocol. Currently, the only
supported keywords are "smtp", "pop3", "imap", "ftp", "xmpp", "xmpp-server", supported keywords are "smtp", "pop3", "imap", "ftp", "xmpp", "xmpp-server",
"irc", "postgres" and "lmtp". "irc", "postgres", "lmtp" and "nntp".
=item B<-xmpphost hostname> =item B<-xmpphost hostname>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册