Browse Source

Merge remote branch 'public/bug1859_021' into maint-0.2.1

Nick Mathewson 13 years ago
parent
commit
491abbc65e
4 changed files with 14 additions and 5 deletions
  1. 9 0
      changes/bug1859
  2. 1 1
      src/or/connection_edge.c
  3. 4 1
      src/or/rendclient.c
  4. 0 3
      src/or/routerlist.c

+ 9 - 0
changes/bug1859

@@ -0,0 +1,9 @@
+  o Minor bugfixes:
+    - Bring the logic that gathers routerinfos and assesses the
+      acceptability of circuits into line. This prevents a Tor OP from getting
+      locked in a cycle of choosing its local OR as an exit for a path (due to
+      a .exit request) and then rejecting the circuit because its OR is not
+      listed yet. Also prevent Tor clients from using an OR running in the same
+      instance as an exit (due to a .exit request) if the OR does not meet the
+      same requirements expected of an OR running elsewhere.
+      Fixes bug 1859; bugfix on 0.2.0-alpha.

+ 1 - 1
src/or/connection_edge.c

@@ -571,7 +571,7 @@ circuit_discard_optional_exit_enclaves(extend_info_t *info)
         !edge_conn->chosen_exit_retries)
       continue;
     r1 = router_get_by_nickname(edge_conn->chosen_exit_name, 0);
-    r2 = router_get_by_nickname(info->nickname, 0);
+    r2 = router_get_by_digest(info->identity_digest);
     if (!r1 || !r2 || r1 != r2)
       continue;
     tor_assert(edge_conn->socks_request);

+ 4 - 1
src/or/rendclient.c

@@ -814,7 +814,10 @@ rend_client_get_random_intro(const rend_data_t *rend_query)
   intro = smartlist_get(entry->parsed->intro_nodes, i);
   /* Do we need to look up the router or is the extend info complete? */
   if (!intro->extend_info->onion_key) {
-    router = router_get_by_nickname(intro->extend_info->nickname, 0);
+    if (tor_digest_is_zero(intro->extend_info->identity_digest))
+      router = router_get_by_hexdigest(intro->extend_info->nickname);
+    else
+      router = router_get_by_digest(intro->extend_info->identity_digest);
     if (!router) {
       log_info(LD_REND, "Unknown router with nickname '%s'; trying another.",
                intro->extend_info->nickname);

+ 0 - 3
src/or/routerlist.c

@@ -1989,9 +1989,6 @@ router_get_by_nickname(const char *nickname, int warn_if_unnamed)
     return router_get_by_hexdigest(nickname);
   if (!strcasecmp(nickname, UNNAMED_ROUTER_NICKNAME))
     return NULL;
-  if (server_mode(get_options()) &&
-      !strcasecmp(nickname, get_options()->Nickname))
-    return router_get_my_routerinfo();
 
   maybedigest = (strlen(nickname) >= HEX_DIGEST_LEN) &&
     (base16_decode(digest,DIGEST_LEN,nickname,HEX_DIGEST_LEN) == 0);