diff options
author | Robert Scheck <robert@fedoraproject.org> | 2017-01-28 00:52:27 +0100 |
---|---|---|
committer | Rich Salz <rsalz@openssl.org> | 2017-02-03 09:49:54 -0500 |
commit | 8f85aa6bd3737547634bbbe1e141f728674fb594 (patch) | |
tree | 8b3b00f071c4940a97e4a8e370e82758978451f4 /apps/s_client.c | |
parent | bc1dba209533f2033a4de0d93380fc0f485e6f7e (diff) |
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)
Diffstat (limited to 'apps/s_client.c')
-rw-r--r-- | apps/s_client.c | 31 |
1 files changed, 30 insertions, 1 deletions
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 (;;) { |