From 7039c34519e29a18081a9bc7f3c957c473c70bc4 Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Tue, 31 May 2011 20:43:55 -0400 Subject: [PATCH] fix a bridge edge case similar to 2511 If you had configured a bridge but then switched to a different bridge via the controller, you would still be willing to use the old one. --- changes/bug3321 | 7 +++++++ src/or/circuitbuild.c | 17 ++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 changes/bug3321 diff --git a/changes/bug3321 b/changes/bug3321 new file mode 100644 index 0000000000..3605efce2d --- /dev/null +++ b/changes/bug3321 @@ -0,0 +1,7 @@ + o Minor bugfixes: + - In bug 2511 we fixed a case where you could use an unconfigured + bridge if you had configured it as a bridge the last time you ran + Tor. Now fix another edge case: if you had configured it as a bridge + but then switched to a different bridge via the controller, you + would still be willing to use the old one. Bugfix on 0.2.0.1-alpha; + fixes bug 3321. diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 2f70b67d23..3f08448159 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -3383,6 +3383,8 @@ entry_guard_set_status(entry_guard_t *e, routerinfo_t *ri, *reason = "down"; else if (options->UseBridges && ri->purpose != ROUTER_PURPOSE_BRIDGE) *reason = "not a bridge"; + else if (options->UseBridges && !routerinfo_is_a_configured_bridge(ri)) + *reason = "not a configured bridge"; else if (!options->UseBridges && !ri->is_possible_guard && !routerset_contains_router(options->EntryNodes,ri)) *reason = "not recommended as a guard"; @@ -3467,11 +3469,16 @@ entry_is_live(entry_guard_t *e, int need_uptime, int need_capacity, *msg = "no descriptor"; return NULL; } - if (get_options()->UseBridges && r->purpose != ROUTER_PURPOSE_BRIDGE) { - *msg = "not a bridge"; - return NULL; - } - if (!get_options()->UseBridges && r->purpose != ROUTER_PURPOSE_GENERAL) { + if (options->UseBridges) { + if (r->purpose != ROUTER_PURPOSE_BRIDGE) { + *msg = "not a bridge"; + return NULL; + } + if (!routerinfo_is_a_configured_bridge(r)) { + *msg = "not a configured bridge"; + return NULL; + } + } else if (r->purpose != ROUTER_PURPOSE_GENERAL) { *msg = "not general-purpose"; return NULL; }