aboutsummaryrefslogtreecommitdiff
path: root/dev-libs/libstrophe/files/libstrophe-xmpp-conn-disable-tls.patch
blob: 56a801fb57b95285d4ac8242b4278e87576d2406 (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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
commit 9615a55856ce6f1d0aabb4fb6b7f9a41c27a5391
Author: James Booth <boothj5@gmail.com>
Date:   Sun May 20 01:50:32 2012 +0100

    Added option to disable TLS
    
    The connection object includes a tls_support flag, which can
    be disabled with xmpp_conn_disable_tls().

diff --git a/src/auth.c b/src/auth.c
index d0c33cb..3bbdfec 100644
--- a/src/auth.c
+++ b/src/auth.c
@@ -209,9 +209,13 @@ static int _handle_features(xmpp_conn_t * const conn,
 
     /* check for TLS */
     if (!conn->secured) {
-        child = xmpp_stanza_get_child_by_name(stanza, "starttls");
-        if (child && (strcmp(xmpp_stanza_get_ns(child), XMPP_NS_TLS) == 0))
-            conn->tls_support = 1;
+        if (!conn->tls_disabled) {
+            child = xmpp_stanza_get_child_by_name(stanza, "starttls");
+            if (child && (strcmp(xmpp_stanza_get_ns(child), XMPP_NS_TLS) == 0))
+                conn->tls_support = 1;
+        } else {
+            conn->tls_disabled = 0;
+        }
     }
 
     /* check for SASL */
diff --git a/src/common.h b/src/common.h
index cafcbd4..9434e6f 100644
--- a/src/common.h
+++ b/src/common.h
@@ -163,6 +163,7 @@ struct _xmpp_conn_t {
     tls_t *tls;
 
     int tls_support;
+    int tls_disabled;
     int tls_failed; /* set when tls fails, so we don't try again */
     int sasl_support; /* if true, field is a bitfield of supported 
 			 mechanisms */ 
diff --git a/src/conn.c b/src/conn.c
index 0a4e61c..e53a7f9 100644
--- a/src/conn.c
+++ b/src/conn.c
@@ -109,6 +109,7 @@ xmpp_conn_t *xmpp_conn_new(xmpp_ctx_t * const ctx)
         conn->bound_jid = NULL;
 
 	conn->tls_support = 0;
+    conn->tls_disabled = 0;
 	conn->tls_failed = 0;
 	conn->sasl_support = 0;
         conn->secured = 0;
@@ -666,6 +667,17 @@ void conn_open_stream(xmpp_conn_t * const conn)
 			 XMPP_NS_STREAMS);
 }
 
+/** Disable TLS for this connection, called by users of the library.
+ *  Occasionally a server will be misconfigured to send the starttls
+ *  feature, but wil not support the handshake.
+ *
+ *  @param conn a Strophe connection object
+ */
+void xmpp_conn_disable_tls(xmpp_conn_t * const conn)
+{
+    conn->tls_disabled = 1;
+}
+
 static void _log_open_tag(xmpp_conn_t *conn, char **attrs)
 {
     char buf[4096];
diff --git a/strophe.h b/strophe.h
index 347ff7d..e3a2f4d 100644
--- a/strophe.h
+++ b/strophe.h
@@ -217,6 +217,7 @@ void xmpp_conn_set_jid(xmpp_conn_t * const conn, const char * const jid);
 const char *xmpp_conn_get_pass(const xmpp_conn_t * const conn);
 void xmpp_conn_set_pass(xmpp_conn_t * const conn, const char * const pass);
 xmpp_ctx_t* xmpp_conn_get_context(xmpp_conn_t * const conn);
+void xmpp_conn_disable_tls(xmpp_conn_t * const conn);
 
 int xmpp_connect_client(xmpp_conn_t * const conn, 
 			  const char * const altdomain,