Browse Source

Merge remote-tracking branch 'asn/bug23862_030' into maint-0.3.0

Nick Mathewson 6 years ago
parent
commit
c55a054236
3 changed files with 15 additions and 11 deletions
  1. 5 0
      changes/bug23682
  2. 1 2
      src/or/directory.c
  3. 9 9
      src/or/main.c

+ 5 - 0
changes/bug23682

@@ -0,0 +1,5 @@
+  o Minor bugfixes (entry guards):
+    - Tor now updates its guard state when it reads a consensus regardless of
+      whether it's missing descriptors. That makes tor use its primary guards
+      to fetch descriptors in some edge cases where it would have used fallback
+      directories in the past. Fixes bug 23862; bugfix on 0.3.0.1-alpha.

+ 1 - 2
src/or/directory.c

@@ -2122,10 +2122,9 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
     /* If we launched other fetches for this consensus, cancel them. */
     connection_dir_close_consensus_fetches(conn, flavname);
 
-    /* launches router downloads as needed */
+    /* update the list of routers and directory guards */
     routers_update_all_from_networkstatus(now, 3);
     update_microdescs_from_networkstatus(now);
-    update_microdesc_downloads(now);
     directory_info_has_arrived(now, 0, 0);
     if (authdir_mode_v3(get_options())) {
       sr_act_post_consensus(

+ 9 - 9
src/or/main.c

@@ -965,6 +965,15 @@ directory_info_has_arrived(time_t now, int from_cache, int suppress_logs)
 {
   const or_options_t *options = get_options();
 
+  /* if we have enough dir info, then update our guard status with
+   * whatever we just learned. */
+  int invalidate_circs = guards_update_all();
+
+  if (invalidate_circs) {
+    circuit_mark_all_unused_circs();
+    circuit_mark_all_dirty_circs_as_unusable();
+  }
+
   if (!router_have_minimum_dir_info()) {
     int quiet = suppress_logs || from_cache ||
                 directory_too_idle_to_fetch_descriptors(options, now);
@@ -978,15 +987,6 @@ directory_info_has_arrived(time_t now, int from_cache, int suppress_logs)
       update_all_descriptor_downloads(now);
     }
 
-    /* if we have enough dir info, then update our guard status with
-     * whatever we just learned. */
-    int invalidate_circs = guards_update_all();
-
-    if (invalidate_circs) {
-      circuit_mark_all_unused_circs();
-      circuit_mark_all_dirty_circs_as_unusable();
-    }
-
     /* Don't even bother trying to get extrainfo until the rest of our
      * directory info is up-to-date */
     if (options->DownloadExtraInfo)