Add NNTP support (RFC 4642) to s_client ("-starttls nntp")
authorRobert Scheck <robert@fedoraproject.org>
Fri, 27 Jan 2017 23:52:27 +0000 (00:52 +0100)
committerRich Salz <rsalz@openssl.org>
Fri, 3 Feb 2017 14:49:54 +0000 (09:49 -0500)
Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2310)

apps/s_client.c
doc/man1/s_client.pod

index 99770b9b978a3e62548d952416a4304baaa90880..d9dbe702f9d1020d3bd58a962e9f87162fa7e8a6 100644 (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 (;;) {
index 2ebd6822b83bce32d9b6aac94987b834710c53a2..fb1680a1a53e5833b83725570435a0627ff7734b 100644 (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>