Browse Source

Merge branch 'maint-0.2.1'

Roger Dingledine 16 years ago
parent
commit
926ca5befd
2 changed files with 9 additions and 1 deletions
  1. 2 0
      ChangeLog
  2. 7 1
      src/or/connection_edge.c

+ 2 - 0
ChangeLog

@@ -165,6 +165,8 @@ Changes in version 0.2.1.20 - 2009-??-??
       excluded in ExcludeExitNodes, but the circuit is not used to access
       excluded in ExcludeExitNodes, but the circuit is not used to access
       the outside world. This should help fix bug 1090. Bugfix on
       the outside world. This should help fix bug 1090. Bugfix on
       0.2.1.6-alpha.
       0.2.1.6-alpha.
+    - Teach connection_ap_can_use_exit to respect the Exclude*Nodes config
+      options. Should fix bug 1090. Bugfix on 0.0.2-pre16.
 
 
   o Minor features:
   o Minor features:
     - Add a "getinfo status/accepted-server-descriptor" controller
     - Add a "getinfo status/accepted-server-descriptor" controller

+ 7 - 1
src/or/connection_edge.c

@@ -2838,11 +2838,13 @@ connection_edge_is_rendezvous_stream(edge_connection_t *conn)
 /** Return 1 if router <b>exit</b> is likely to allow stream <b>conn</b>
 /** Return 1 if router <b>exit</b> is likely to allow stream <b>conn</b>
  * to exit from it, or 0 if it probably will not allow it.
  * to exit from it, or 0 if it probably will not allow it.
  * (We might be uncertain if conn's destination address has not yet been
  * (We might be uncertain if conn's destination address has not yet been
- * resolved.)
+ * resolved.) If the router is in the list of excluded nodes, also return 0;
  */
  */
 int
 int
 connection_ap_can_use_exit(edge_connection_t *conn, routerinfo_t *exit)
 connection_ap_can_use_exit(edge_connection_t *conn, routerinfo_t *exit)
 {
 {
+  or_options_t *options = get_options();
+
   tor_assert(conn);
   tor_assert(conn);
   tor_assert(conn->_base.type == CONN_TYPE_AP);
   tor_assert(conn->_base.type == CONN_TYPE_AP);
   tor_assert(conn->socks_request);
   tor_assert(conn->socks_request);
@@ -2888,6 +2890,10 @@ connection_ap_can_use_exit(edge_connection_t *conn, routerinfo_t *exit)
     if (!conn->chosen_exit_name && policy_is_reject_star(exit->exit_policy))
     if (!conn->chosen_exit_name && policy_is_reject_star(exit->exit_policy))
       return 0;
       return 0;
   }
   }
+  if (options->_ExcludeExitNodesUnion &&
+      routerset_contains_router(options->_ExcludeExitNodesUnion, exit))
+    return 0;
+
   return 1;
   return 1;
 }
 }