]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
refuse .exit addresses immediately if the requested node would
authorRoger Dingledine <arma@torproject.org>
Tue, 30 Nov 2004 08:15:09 +0000 (08:15 +0000)
committerRoger Dingledine <arma@torproject.org>
Tue, 30 Nov 2004 08:15:09 +0000 (08:15 +0000)
refuse the request (e.g. due to exit policy or wrong version)

svn:r3038

src/or/connection_edge.c

index 31bc9ba35108abc5a6256b1cbf37581d7022a765..01b4810b0d0f1529872443611abfcdea99a11534 100644 (file)
@@ -354,6 +354,7 @@ static int connection_ap_handshake_process_socks(connection_t *conn) {
   socks_request_t *socks;
   int sockshere;
   hostname_type_t addresstype;
+  routerinfo_t *router;
 
   tor_assert(conn);
   tor_assert(conn->type == CONN_TYPE_AP);
@@ -411,16 +412,16 @@ static int connection_ap_handshake_process_socks(connection_t *conn) {
       log_fn(LOG_WARN,"Malformed address '%s.exit'. Refusing.", socks->address);
       return -1;
     }
-    if (strlen(s+1) == HEX_DIGEST_LEN) {
-      conn->chosen_exit_name = tor_malloc(HEX_DIGEST_LEN+2);
-      *(conn->chosen_exit_name) = '$';
-      strlcpy(conn->chosen_exit_name+1, s+1, HEX_DIGEST_LEN+1);
-    } else {
-      conn->chosen_exit_name = tor_strdup(s+1);
-    }
+    conn->chosen_exit_name = tor_strdup(s+1);
     *s = 0;
-    if (!is_legal_nickname_or_hexdigest(conn->chosen_exit_name)) {
-      log_fn(LOG_WARN, "%s is not a legal exit node nickname; rejecting.",
+    router = router_get_by_nickname(conn->chosen_exit_name);
+    if(!router) {
+      log_fn(LOG_WARN,"Requested exit point '%s' is not known. Closing.",
+             conn->chosen_exit_name);
+      return -1;
+    }
+    if (!connection_ap_can_use_exit(conn, router)) {
+      log_fn(LOG_WARN, "Requested exit point '%s' would refuse request. Closing.",
              conn->chosen_exit_name);
       return -1;
     }