diff options
author | Ben Laurie <ben@openssl.org> | 2008-10-14 19:09:47 +0000 |
---|---|---|
committer | Ben Laurie <ben@openssl.org> | 2008-10-14 19:09:47 +0000 |
commit | 5dffc13f55234f0e30914d8d7d1727afbb8fc675 (patch) | |
tree | b3e6f28285b6b517c9144870c932acc9af2f9357 /apps | |
parent | a5873a8d3d456b0c736caf4fc1d1b80bbc1f3389 (diff) |
Add XMPP STARTTLS support.
Diffstat (limited to 'apps')
-rw-r--r-- | apps/s_client.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/apps/s_client.c b/apps/s_client.c index 60a8d13df1..8922cdcf61 100644 --- a/apps/s_client.c +++ b/apps/s_client.c @@ -234,7 +234,8 @@ static void sc_usage(void) BIO_printf(bio_err," -starttls prot - use the STARTTLS command before starting TLS\n"); BIO_printf(bio_err," for those protocols that support it, where\n"); BIO_printf(bio_err," 'prot' defines which one to assume. Currently,\n"); - BIO_printf(bio_err," only \"smtp\", \"pop3\", \"imap\", and \"ftp\" are supported.\n"); + BIO_printf(bio_err," only \"smtp\", \"pop3\", \"imap\", \"ftp\" and \"xmpp\"\n"); + BIO_printf(bio_err," are supported.\n"); #ifndef OPENSSL_NO_ENGINE BIO_printf(bio_err," -engine id - Initialise and use the specified engine\n"); #endif @@ -276,7 +277,8 @@ enum PROTO_SMTP, PROTO_POP3, PROTO_IMAP, - PROTO_FTP + PROTO_FTP, + PROTO_XMPP, }; int MAIN(int, char **); @@ -547,6 +549,8 @@ int MAIN(int argc, char **argv) starttls_proto = PROTO_IMAP; else if (strcmp(*argv,"ftp") == 0) starttls_proto = PROTO_FTP; + else if (strcmp(*argv, "xmpp") == 0) + starttls_proto = PROTO_XMPP; else goto bad; } @@ -988,6 +992,28 @@ SSL_set_tlsext_status_ids(con, ids); BIO_printf(sbio,"AUTH TLS\r\n"); BIO_read(sbio,sbuf,BUFSIZZ); } + if (starttls_proto == PROTO_XMPP) + { + int seen = 0; + BIO_printf(sbio,"<stream:stream " + "xmlns:stream='http://etherx.jabber.org/streams' " + "xmlns='jabber:client' to='%s' version='1.0'>", host); + seen = BIO_read(sbio,mbuf,BUFSIZZ); + mbuf[seen] = 0; + while (!strstr(mbuf, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'")) + { + if (strstr(mbuf, "/stream:features>")) + goto shut; + seen = BIO_read(sbio,mbuf,BUFSIZZ); + mbuf[seen] = 0; + } + BIO_printf(sbio, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>"); + seen = BIO_read(sbio,sbuf,BUFSIZZ); + sbuf[seen] = 0; + if (!strstr(sbuf, "<proceed")) + goto shut; + mbuf[0] = 0; + } for (;;) { |