]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
enable checking the socks policy
authorRoger Dingledine <arma@torproject.org>
Thu, 20 May 2004 04:16:43 +0000 (04:16 +0000)
committerRoger Dingledine <arma@torproject.org>
Thu, 20 May 2004 04:16:43 +0000 (04:16 +0000)
svn:r1906

src/or/connection.c
src/or/connection_edge.c
src/or/or.h

index 49576eba33f382c3e936b4aa6bdd83eceb750df4..e868a43bf9417fa3e68f2fb504d20ac5e44ddc7e 100644 (file)
@@ -429,6 +429,11 @@ static int connection_init_accepted_conn(connection_t *conn) {
     case CONN_TYPE_OR:
       return connection_tls_start_handshake(conn, 1);
     case CONN_TYPE_AP:
+      /* check sockspolicy to see if we should accept it */
+      if(socks_policy_permits_address(conn->addr) == 0) {
+        log_fn(LOG_WARN,"Denying socks connection from untrusted address %s.", conn->address);
+        return -1;
+      }
       conn->state = AP_CONN_STATE_SOCKS_WAIT;
       break;
     case CONN_TYPE_DIR:
index 8de0d6d9bae384d8ca435803a21bb8d71d277db2..82e28e40911be307d9bc89aa8b5c53e3db01321c 100644 (file)
@@ -17,7 +17,6 @@ static struct exit_policy_t *socks_policy = NULL;
 
 static int connection_ap_handshake_process_socks(connection_t *conn);
 static void parse_socks_policy(void);
-static int socks_policy_permits_address(uint32_t addr);
 
 /** Handle new bytes on conn->inbuf, or notification of eof.
  *
@@ -785,6 +784,12 @@ int connection_ap_can_use_exit(connection_t *conn, routerinfo_t *exit)
            conn->socks_request->port, exit->exit_policy);
 }
 
+/** A helper function for socks_policy_permits_address() below.
+ *
+ * Parse options.SocksPolicy in the same way that the exit policy
+ * is parsed, and put the processed version in &socks_policy.
+ * Ignore port specifiers.
+ */
 static void parse_socks_policy(void)
 {
   struct exit_policy_t *n;
@@ -800,6 +805,9 @@ static void parse_socks_policy(void)
   }
 }
 
+/** Return 1 if <b>addr</b> is permitted to connect to our socks port,
+ * based on <b>socks_policy</b>. Else return 0.
+ */
 int socks_policy_permits_address(uint32_t addr)
 {
   int a;
@@ -811,10 +819,9 @@ int socks_policy_permits_address(uint32_t addr)
     return 0;
   else if (a==0)
     return 1;
-  else if (a==1) {
-    log_fn(LOG_WARN, "Got unexpected 'maybe' answer from socks policy");
-    return 1;
-  }
+  tor_assert(a==1);
+  log_fn(LOG_WARN, "Got unexpected 'maybe' answer from socks policy");
+  return 0;
 }
 
 /* ***** Client DNS code ***** */
index db1f58173fc79eadbbfdcdba0c798a92fb795771..149c197d5f325e07901b60c7bffb125785362287 100644 (file)
@@ -1044,6 +1044,8 @@ int connection_ap_can_use_exit(connection_t *conn, routerinfo_t *exit);
 void connection_ap_expire_beginning(void);
 void connection_ap_attach_pending(void);
 
+int socks_policy_permits_address(uint32_t addr);
+
 void client_dns_init(void);
 uint32_t client_dns_lookup_entry(const char *address);
 int client_dns_incr_failures(const char *address);