]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Patch from roger for 752, but with more comments: When we get an A.B.exit:P address...
authorNick Mathewson <nickm@torproject.org>
Tue, 23 Sep 2008 20:25:01 +0000 (20:25 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 23 Sep 2008 20:25:01 +0000 (20:25 +0000)
svn:r16944

ChangeLog
src/or/connection_edge.c

index 704893ae98116a01f356ec4ee9c1c30d6f57c695..f2815589207945bb6b614b277627ce55ccd520bf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -35,7 +35,12 @@ Changes in version 0.2.1.6-alpha - 2008-09-xx
       still pending. Fixes bug 814. Bugfix on 0.2.0.10-alpha.
     - Avoid a bug where the FistFirstHopPK 0 option would keep Tor from
       bootstrapping with tunneled directory connections.  Bugfix on
-      0.1.2.5-alpha.  Fixes bug 797.
+      0.1.2.5-alpha.  Fixes bug 797.  Found by Erwin Lam.
+    - When asked to connect to A.B.exit:80, if we don't know the IP for A
+      and we know that server B most-but-not all connections to port 80,
+      we would previously reject the connection.  Now, we assume the user
+      knows what they were asking for.  Fixes bug 752.  Bugfix on 0.0.9rc5.
+      Diagnosed by BarkerJr.
 
   o Minor features:
     - Update to the "September 1 2008" ip-to-country file.
index f799090de1e07415968dafcb8b1173bbe033c907..6b4c691474e8d6705e7d4eb6019a1b124748d384 100644 (file)
@@ -2857,8 +2857,12 @@ connection_ap_can_use_exit(edge_connection_t *conn, routerinfo_t *exit)
       addr = ntohl(in.s_addr);
     r = compare_addr_to_addr_policy(addr, conn->socks_request->port,
                                     exit->exit_policy);
-    if (r == ADDR_POLICY_REJECTED || r == ADDR_POLICY_PROBABLY_REJECTED)
-      return 0;
+    if (r == ADDR_POLICY_REJECTED)
+      return 0; /* We know the address, and the exit policy rejects it. */
+    if (r == ADDR_POLICY_PROBABLY_REJECTED && !conn->chosen_exit_name)
+      return 0; /* We don't know the addr, but the exit policy rejects most
+                 * addresses with this port. Since the user didn't ask for
+                 * this node, err on the side of caution. */
   } else if (SOCKS_COMMAND_IS_RESOLVE(conn->socks_request->command)) {
     /* Can't support reverse lookups without eventdns. */
     if (conn->socks_request->command == SOCKS_COMMAND_RESOLVE_PTR &&