Teach connection_ap_can_use_exit about Exclude*Nodes

To further attempt to fix bug 1090, make sure connection_ap_can_use_exit
always returns 0 when the chosen exit router is excluded. This should fix
bug1090.
This commit is contained in:
Sebastian Hahn 2009-09-16 02:23:04 +02:00
parent 24c740e5fd
commit dc3229313b
2 changed files with 9 additions and 1 deletions

View File

@ -40,6 +40,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

View File

@ -2851,11 +2851,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);
@ -2901,6 +2903,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;
} }