From: Roger Dingledine Date: Mon, 4 Feb 2008 17:25:24 +0000 (+0000) Subject: If we're a relay, avoid picking ourselves as an introduction point, X-Git-Tag: tor-0.2.0.19-alpha~63 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fdbefc89342c7a6cefc3feba8ada5107ddbe34df;p=thirdparty%2Ftor.git If we're a relay, avoid picking ourselves as an introduction point, a rendezvous point, or as the final hop for internal circuits. Bug reported by taranis and lodger. Bugfix on 0.1.2.x. svn:r13372 --- diff --git a/ChangeLog b/ChangeLog index 005834ff4a..ec656b9c8e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,9 @@ -Changes in version 0.2.0.19-alpha - 2008-0?-?? +Changes in version 0.2.0.19-alpha - 2008-02-?? + o Major bugfixes: + - If we're a relay, avoid picking ourselves as an introduction point, + a rendezvous point, or as the final hop for internal circuits. Bug + reported by taranis and lodger. Bugfix on 0.1.2.x. + o Minor bugfixes: - Directory caches now fetch certificates from all authorities listed in a networkstatus consensus, even when they do not diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 4f57922160..785926b09b 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -1577,10 +1577,6 @@ choose_good_middle_server(uint8_t purpose, smartlist_add(excluded, r); routerlist_add_family(excluded, r); } - if ((r = routerlist_find_my_routerinfo())) { - smartlist_add(excluded, r); - routerlist_add_family(excluded, r); - } for (i = 0, cpath = head; i < cur_len; ++i, cpath=cpath->next) { if ((r = router_get_by_digest(cpath->extend_info->identity_digest))) { smartlist_add(excluded, r); @@ -1624,10 +1620,6 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state) smartlist_add(excluded, r); routerlist_add_family(excluded, r); } - if ((r = routerlist_find_my_routerinfo())) { - smartlist_add(excluded, r); - routerlist_add_family(excluded, r); - } if (firewall_is_fascist_or()) { /* exclude all ORs that listen on the wrong port */ routerlist_t *rl = router_get_routerlist(); diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 5a347ae4f8..c0d2aaac5f 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -1659,7 +1659,7 @@ router_choose_random_node(const char *preferred, int weight_for_exit) { smartlist_t *sl, *excludednodes; - routerinfo_t *choice = NULL; + routerinfo_t *choice = NULL, *r; bandwidth_weight_rule_t rule; tor_assert(!(weight_for_exit && need_guard)); @@ -1669,6 +1669,11 @@ router_choose_random_node(const char *preferred, excludednodes = smartlist_create(); add_nickname_list_to_smartlist(excludednodes,excluded,0); + if ((r = routerlist_find_my_routerinfo())) { + smartlist_add(excludednodes, r); + routerlist_add_family(excludednodes, r); + } + /* Try the preferred nodes first. Ignore need_uptime and need_capacity * and need_guard, since the user explicitly asked for these nodes. */ if (preferred) {