Commit 8f85aa6b authored by Robert Scheck's avatar Robert Scheck Committed by Rich Salz
Browse files

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

parent bc1dba20
Loading
Loading
Loading
Loading
+30 −1
Original line number Diff line number Diff line
@@ -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 (;;) {
+1 −1
Original line number Diff line number Diff line
@@ -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>