Commit d5bbead4 authored by Ben Laurie's avatar Ben Laurie
Browse files

Add XMPP STARTTLS support.

parent 0f7efbc8
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -722,6 +722,9 @@


 Changes between 0.9.8i and 0.9.8j  [xx XXX xxxx]
 Changes between 0.9.8i and 0.9.8j  [xx XXX xxxx]


  *) Add support for XMPP STARTTLS in s_client.
     [Philip Paeps <philip@freebsd.org>]

  *) Change the server-side SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG behavior
  *) Change the server-side SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG behavior
     to ensure that even with this option, only ciphersuites in the
     to ensure that even with this option, only ciphersuites in the
     server's preference list will be accepted.  (Note that the option
     server's preference list will be accepted.  (Note that the option
+28 −2
Original line number Original line Diff line number Diff line
@@ -325,7 +325,8 @@ static void sc_usage(void)
	BIO_printf(bio_err," -starttls prot - use the STARTTLS command before starting TLS\n");
	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,"                 for those protocols that support it, where\n");
	BIO_printf(bio_err,"                 'prot' defines which one to assume.  Currently,\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
#ifndef OPENSSL_NO_ENGINE
	BIO_printf(bio_err," -engine id    - Initialise and use the specified engine\n");
	BIO_printf(bio_err," -engine id    - Initialise and use the specified engine\n");
#endif
#endif
@@ -368,7 +369,8 @@ enum
	PROTO_SMTP,
	PROTO_SMTP,
	PROTO_POP3,
	PROTO_POP3,
	PROTO_IMAP,
	PROTO_IMAP,
	PROTO_FTP
	PROTO_FTP,
	PROTO_XMPP,
};
};


int MAIN(int, char **);
int MAIN(int, char **);
@@ -664,6 +666,8 @@ int MAIN(int argc, char **argv)
				starttls_proto = PROTO_IMAP;
				starttls_proto = PROTO_IMAP;
			else if (strcmp(*argv,"ftp") == 0)
			else if (strcmp(*argv,"ftp") == 0)
				starttls_proto = PROTO_FTP;
				starttls_proto = PROTO_FTP;
			else if (strcmp(*argv, "xmpp") == 0)
				starttls_proto = PROTO_XMPP;
			else
			else
				goto bad;
				goto bad;
			}
			}
@@ -1118,6 +1122,28 @@ SSL_set_tlsext_status_ids(con, ids);
		BIO_printf(sbio,"AUTH TLS\r\n");
		BIO_printf(sbio,"AUTH TLS\r\n");
		BIO_read(sbio,sbuf,BUFSIZZ);
		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 (;;)
	for (;;)
		{
		{