]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Don't use the cache when changing an IP address because of an exit policy
authorNick Mathewson <nickm@torproject.org>
Wed, 28 Nov 2012 01:53:09 +0000 (20:53 -0500)
committerNick Mathewson <nickm@torproject.org>
Mon, 17 Dec 2012 19:50:05 +0000 (14:50 -0500)
src/or/relay.c

index 8955d31bb961bf28f88d2bfec7b079d87bc11c36..2103087ee4aa084d959244cec00fbe446db0e505 100644 (file)
@@ -706,6 +706,7 @@ connection_ap_process_end_not_open(
       case END_STREAM_REASON_EXITPOLICY:
         if (rh->length >= 5) {
           tor_addr_t addr;
+
           int ttl = -1;
           tor_addr_make_unspec(&addr);
           if (rh->length == 5 || rh->length == 9) {
@@ -745,6 +746,16 @@ connection_ap_process_end_not_open(
           client_dns_set_addressmap(conn,
                                     conn->socks_request->address, &addr,
                                     conn->chosen_exit_name, ttl);
+
+          {
+            char new_addr[TOR_ADDR_BUF_LEN];
+            tor_addr_to_str(new_addr, &addr, sizeof(new_addr), 1);
+            if (strcmp(conn->socks_request->address, new_addr)) {
+              strlcpy(conn->socks_request->address, new_addr,
+                      sizeof(conn->socks_request->address));
+              control_event_stream_status(conn, STREAM_EVENT_REMAP, 0);
+            }
+          }
         }
         /* check if he *ought* to have allowed it */
         if (exitrouter &&
@@ -757,19 +768,7 @@ connection_ap_process_end_not_open(
                  node_describe(exitrouter));
           policies_set_node_exitpolicy_to_reject_all(exitrouter);
         }
-        /* rewrite it to an IP if we learned one. */
-        {
-          unsigned rewrite_flags = 0;
-          if (conn->use_cached_ipv4_answers)
-            rewrite_flags |= AMR_FLAG_USE_IPV4_DNS;
-          if (conn->use_cached_ipv6_answers)
-            rewrite_flags |= AMR_FLAG_USE_IPV6_DNS;
-          if (addressmap_rewrite(conn->socks_request->address,
-                                 sizeof(conn->socks_request->address),
-                                 rewrite_flags, NULL, NULL)) {
-            control_event_stream_status(conn, STREAM_EVENT_REMAP, 0);
-          }
-        }
+
         if (conn->chosen_exit_optional ||
             conn->chosen_exit_retries) {
           /* stop wanting a specific exit */