[telepathy-gabble/master] socks5: expect the right CONNECT reply

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Fri Apr 3 09:26:01 PDT 2009


---
 src/bytestream-socks5.c |   17 ++++++++++++-----
 1 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/bytestream-socks5.c b/src/bytestream-socks5.c
index 77c73b2..130d553 100644
--- a/src/bytestream-socks5.c
+++ b/src/bytestream-socks5.c
@@ -104,6 +104,7 @@ typedef enum _Socks5State Socks5State;
 
 #define SHA1_LENGTH 40
 #define SOCKS5_CONNECT_LENGTH (7 + SHA1_LENGTH)
+#define SOCKS5_CONNECT_REPLY_LENGTH (7 + SHA1_LENGTH)
 
 struct _Streamhost
 {
@@ -696,13 +697,17 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
         return 2;
 
       case SOCKS5_STATE_CONNECT_REQUESTED:
-        /* We sent an CONNECT request and we are awaiting for a response, the
-         * response is 2 bytes-long */
-        if (string->len < 2)
+        /* We sent a CONNECT request and are awaiting for the response */
+        if (string->len < SOCKS5_CONNECT_REPLY_LENGTH)
           return 0;
 
         if (string->str[0] != SOCKS5_VERSION ||
-            string->str[1] != SOCKS5_STATUS_OK)
+            string->str[1] != SOCKS5_STATUS_OK ||
+            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 */
           {
             DEBUG ("Connection refused");
 
@@ -710,6 +715,8 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
             return string->len;
           }
 
+        /* FIXME: check the domain type */
+
         DEBUG ("Received CONNECT reply. Socks5 stream connected. "
             "Bytestream is now open");
         priv->socks5_state = SOCKS5_STATE_CONNECTED;
@@ -746,7 +753,7 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
             gibber_transport_block_receiving (priv->transport, TRUE);
           }
 
-        return 2;
+        return SOCKS5_CONNECT_REPLY_LENGTH;
 
       case SOCKS5_STATE_AWAITING_AUTH_REQUEST:
         /* A client connected to us and we are awaiting for the authorization
-- 
1.5.6.5




More information about the telepathy-commits mailing list