diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | src/or/config.c | 11 | ||||
-rw-r--r-- | src/or/geoip.c | 5 | ||||
-rw-r--r-- | src/or/or.h | 1 | ||||
-rw-r--r-- | src/or/routerlist.c | 20 |
5 files changed, 31 insertions, 11 deletions
@@ -1,4 +1,9 @@ Changes in version 0.2.1.13-????? - 2009-02-?? + o Major bugfixes: + - Correctly update the list of countries to exclude as exits when + the GeoIP file is loaded or reloaded. Diagnosed by lark. Bugfix + on 0.2.1.6-alpha. + o Minor bugfixes: - Automatically detect MacOSX versions earlier than 10.4.0, and disable kqueue from inside Tor when running with these versions. diff --git a/src/or/config.c b/src/or/config.c index cb624fbd6..6b89eceb5 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -1372,17 +1372,6 @@ options_act(or_options_t *old_options) #endif geoip_load_file(actual_fname, options); tor_free(actual_fname); - - /* XXXX Would iterating through all option_var's routersets be better? */ - if (options->EntryNodes) - routerset_refresh_countries(options->EntryNodes); - if (options->ExitNodes) - routerset_refresh_countries(options->ExitNodes); - if (options->ExcludeNodes) - routerset_refresh_countries(options->ExcludeNodes); - if (options->ExcludeExitNodes) - routerset_refresh_countries(options->ExcludeExitNodes); - routerlist_refresh_countries(); } /* Check if we need to parse and add the EntryNodes config option. */ if (options->EntryNodes && diff --git a/src/or/geoip.c b/src/or/geoip.c index 4c61dd27f..61f1207e5 100644 --- a/src/or/geoip.c +++ b/src/or/geoip.c @@ -206,6 +206,11 @@ geoip_load_file(const char *filename, or_options_t *options) fclose(f); smartlist_sort(geoip_entries, _geoip_compare_entries); + + /* Okay, now we need to maybe change our mind about what is in which + * country. */ + refresh_all_country_info(); + return 0; } diff --git a/src/or/or.h b/src/or/or.h index 7c191eeaf..e55d32428 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4514,6 +4514,7 @@ int routerset_equal(const routerset_t *old, const routerset_t *new); void routerset_free(routerset_t *routerset); void routerinfo_set_country(routerinfo_t *ri); void routerlist_refresh_countries(void); +void refresh_all_country_info(void); int hid_serv_get_responsible_directories(smartlist_t *responsible_dirs, const char *id); diff --git a/src/or/routerlist.c b/src/or/routerlist.c index ecbc32393..080603b7e 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -5020,6 +5020,26 @@ routerset_parse(routerset_t *target, const char *s, const char *description) return r; } +/** DOCDOC */ +void +refresh_all_country_info(void) +{ + or_options_t *options = get_options(); + + if (options->EntryNodes) + routerset_refresh_countries(options->EntryNodes); + if (options->ExitNodes) + routerset_refresh_countries(options->ExitNodes); + if (options->ExcludeNodes) + routerset_refresh_countries(options->ExcludeNodes); + if (options->ExcludeExitNodes) + routerset_refresh_countries(options->ExcludeExitNodes); + if (options->_ExcludeExitNodesUnion) + routerset_refresh_countries(options->_ExcludeExitNodesUnion); + + routerlist_refresh_countries(); +} + /** Add all members of the set <b>source</b> to <b>target</b>. */ void routerset_union(routerset_t *target, const routerset_t *source) |