summaryrefslogtreecommitdiffstats
path: root/main/openssl/0005-s_client-ircv3-starttls.patch
blob: 880cbb651865c6035fd55367180b2b0faf292202 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
--- openssl-1.0.1c/apps/s_client.c
+++ openssl-1.0.1c.mod/apps/s_client.c
@@ -344,7 +344,7 @@
 	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\", \"ftp\" and \"xmpp\"\n");
+	BIO_printf(bio_err,"                 only \"smtp\", \"pop3\", \"imap\", \"ftp\", \"xmpp\" and \"ircv3\"\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");
@@ -546,7 +546,8 @@
 	PROTO_POP3,
 	PROTO_IMAP,
 	PROTO_FTP,
-	PROTO_XMPP
+	PROTO_XMPP,
+	PROTO_IRCV3
 };
 
 int MAIN(int, char **);
@@ -910,6 +911,8 @@
 				starttls_proto = PROTO_FTP;
 			else if (strcmp(*argv, "xmpp") == 0)
 				starttls_proto = PROTO_XMPP;
+			else if (strcmp(*argv, "ircv3") == 0)
+				starttls_proto = PROTO_IRCV3;
 			else
 				goto bad;
 			}
@@ -1484,6 +1487,25 @@
 		sbuf[seen] = 0;
 		if (!strstr(sbuf, "<proceed"))
 			goto shut;
+		mbuf[0] = 0;
+		}
+	if (starttls_proto == PROTO_IRCV3)
+		{
+		int seen = 0;
+		BIO_printf(sbio,"CAP REQ :tls\r\n");
+		while (!strstr(mbuf,"CAP"))
+			{
+			seen = BIO_read(sbio,mbuf,BUFSIZZ);
+			mbuf[seen] = 0;
+			}
+		if (!strstr(mbuf,"ACK"))
+			goto shut;
+		BIO_printf(sbio,"CAP END\r\nSTARTTLS\r\n");
+		while (!strstr(sbuf, "670"))
+			{
+			seen = BIO_read(sbio,sbuf,BUFSIZZ);
+			sbuf[seen] = 0;
+			}
 		mbuf[0] = 0;
 		}