[Telepathy-commits] [telepathy-gabble/master] socks5: display a debug msg if domain is wrong
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Tue Mar 17 09:43:04 PDT 2009
---
src/bytestream-socks5.c | 30 ++++++++++++++++++++++++++----
1 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/src/bytestream-socks5.c b/src/bytestream-socks5.c
index 130d553..6e358df 100644
--- a/src/bytestream-socks5.c
+++ b/src/bytestream-socks5.c
@@ -632,6 +632,21 @@ compute_domain (const gchar *sid,
return domain;
}
+static gboolean
+check_domain (const gchar *domain,
+ guint8 len,
+ const gchar *expected)
+{
+ if (len != SHA1_LENGTH || strncmp (domain, expected, SHA1_LENGTH) != 0)
+ {
+ DEBUG ("Wrong domain hash: %s (expected: %s). Ignoring to interop "
+ "with buggy implementations", domain, expected);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
/* Process the received data and returns the number of bytes that have been
* used */
static gsize
@@ -647,6 +662,7 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
const gchar *to;
gchar *domain;
LmMessage *iq_result;
+ guint8 domain_len;
switch (priv->socks5_state)
{
@@ -701,6 +717,8 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
if (string->len < SOCKS5_CONNECT_REPLY_LENGTH)
return 0;
+ domain_len = (guint8) string->str[4];
+
if (string->str[0] != SOCKS5_VERSION ||
string->str[1] != SOCKS5_STATUS_OK ||
string->str[2] != SOCKS5_RESERVED ||
@@ -715,7 +733,10 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
return string->len;
}
- /* FIXME: check the domain type */
+ domain = compute_domain(priv->stream_id, priv->self_full_jid,
+ priv->peer_jid);
+
+ check_domain (&string->str[5], domain_len, domain);
DEBUG ("Received CONNECT reply. Socks5 stream connected. "
"Bytestream is now open");
@@ -809,11 +830,12 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
if (string->len < SOCKS5_CONNECT_LENGTH)
return 0;
+ domain_len = (guint8) string->str[4];
+
if (string->str[0] != SOCKS5_VERSION ||
string->str[1] != SOCKS5_CMD_CONNECT ||
string->str[2] != SOCKS5_RESERVED ||
string->str[3] != SOCKS5_ATYP_DOMAIN ||
- string->str[4] != SHA1_LENGTH ||
string->str[45] != 0 || /* first half of the port number */
string->str[46] != 0) /* second half of the port number */
{
@@ -823,11 +845,11 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
return string->len;
}
- /* FIXME: check the domain type */
-
domain = compute_domain(priv->stream_id, priv->self_full_jid,
priv->peer_jid);
+ check_domain (&string->str[5], domain_len, domain);
+
msg[0] = SOCKS5_VERSION;
msg[1] = SOCKS5_STATUS_OK;
msg[2] = SOCKS5_RESERVED;
--
1.5.6.5
More information about the telepathy-commits
mailing list