Merge remote-tracking branch 'asn/bug23862_031' into maint-0.3.1

This commit is contained in:
Nick Mathewson 2017-12-11 16:43:41 -05:00
commit ae608408e9
3 changed files with 16 additions and 11 deletions

5
changes/bug23682 Normal file
View File

@ -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.

View File

@ -2592,11 +2592,11 @@ handle_response_fetch_consensus(dir_connection_t *conn,
/* If we launched other fetches for this consensus, cancel them. */ /* If we launched other fetches for this consensus, cancel them. */
connection_dir_close_consensus_fetches(conn, flavname); 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); routers_update_all_from_networkstatus(now, 3);
update_microdescs_from_networkstatus(now); update_microdescs_from_networkstatus(now);
update_microdesc_downloads(now);
directory_info_has_arrived(now, 0, 0); directory_info_has_arrived(now, 0, 0);
if (authdir_mode_v3(get_options())) { if (authdir_mode_v3(get_options())) {
sr_act_post_consensus( sr_act_post_consensus(
networkstatus_get_latest_consensus_by_flavor(FLAV_NS)); networkstatus_get_latest_consensus_by_flavor(FLAV_NS));

View File

@ -968,6 +968,15 @@ directory_info_has_arrived(time_t now, int from_cache, int suppress_logs)
{ {
const or_options_t *options = get_options(); 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()) { if (!router_have_minimum_dir_info()) {
int quiet = suppress_logs || from_cache || int quiet = suppress_logs || from_cache ||
directory_too_idle_to_fetch_descriptors(options, now); directory_too_idle_to_fetch_descriptors(options, now);
@ -981,15 +990,6 @@ directory_info_has_arrived(time_t now, int from_cache, int suppress_logs)
update_all_descriptor_downloads(now); 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 /* Don't even bother trying to get extrainfo until the rest of our
* directory info is up-to-date */ * directory info is up-to-date */
if (options->DownloadExtraInfo) if (options->DownloadExtraInfo)