[tor-commits] [tor/release-0.2.2] If we're excluded, and StrictNodes is set, do not do self-tests.

arma at torproject.org arma at torproject.org
Wed Apr 27 18:06:27 UTC 2011


commit ca74badbe95be77bd990c9c4f9c1b26052d4159e
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon Mar 28 14:14:45 2011 -0400

    If we're excluded, and StrictNodes is set, do not do self-tests.
---
 src/or/router.c |   22 ++++++++++++++++++++--
 1 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/or/router.c b/src/or/router.c
index 6993e1e..64cb079 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -850,14 +850,33 @@ consider_testing_reachability(int test_or, int test_dir)
   routerinfo_t *me = router_get_my_routerinfo();
   int orport_reachable = check_whether_orport_reachable();
   tor_addr_t addr;
+  or_options_t *options = get_options();
   if (!me)
     return;
 
+  if (routerset_contains_router(options->ExcludeNodes, me) &&
+      options->StrictNodes) {
+    /* If we've excluded ourself, and StrictNodes is set, we can't test
+     * ourself. */
+    if (test_or || test_dir) {
+#define SELF_EXCLUDED_WARN_INTERVAL 3600
+      static ratelim_t warning_limit=RATELIM_INIT(SELF_EXCLUDED_WARN_INTERVAL);
+      char *msg;
+      if ((msg = rate_limit_log(&warning_limit, approx_time()))) {
+        log_warn(LD_CIRC, "Can't peform self-tests for this relay: we have "
+                 "listed ourself in ExcludeNodes, and StrictNodes is set. "
+                 "We will cannot learn whether we are usable, and will not "
+                 "be able to advertise ourself.%s", msg);
+        tor_free(msg);
+      }
+    }
+    return;
+  }
+
   if (test_or && (!orport_reachable || !circuit_enough_testing_circs())) {
     log_info(LD_CIRC, "Testing %s of my ORPort: %s:%d.",
              !orport_reachable ? "reachability" : "bandwidth",
              me->address, me->or_port);
-    /* XXX022-1090 If we ExcludeNodes ourself, should this fail? -RD */
     circuit_launch_by_router(CIRCUIT_PURPOSE_TESTING, me,
                              CIRCLAUNCH_NEED_CAPACITY|CIRCLAUNCH_IS_INTERNAL);
   }
@@ -868,7 +887,6 @@ consider_testing_reachability(int test_or, int test_dir)
                 CONN_TYPE_DIR, &addr, me->dir_port,
                 DIR_PURPOSE_FETCH_SERVERDESC)) {
     /* ask myself, via tor, for my server descriptor. */
-    /* XXX022-1090 If we ExcludeNodes ourself, should this fail? -RD */
     directory_initiate_command(me->address, &addr,
                                me->or_port, me->dir_port,
                                0, /* does not matter */





More information about the tor-commits mailing list