]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
fix a bridge edge case similar to 2511
authorRoger Dingledine <arma@torproject.org>
Wed, 1 Jun 2011 00:43:55 +0000 (20:43 -0400)
committerRoger Dingledine <arma@torproject.org>
Wed, 1 Jun 2011 00:43:55 +0000 (20:43 -0400)
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 [new file with mode: 0644]
src/or/circuitbuild.c

diff --git a/changes/bug3321 b/changes/bug3321
new file mode 100644 (file)
index 0000000..3605efc
--- /dev/null
@@ -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.
index 2f70b67d230af4c2fcbb26bbde8e7b7d4f09675f..3f084481597440764c585be7ad8789b92c041fff 100644 (file)
@@ -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;
   }