diff options
author | Nick Mathewson <nickm@torproject.org> | 2009-02-16 15:15:06 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2009-02-16 15:15:06 +0000 |
commit | b13496b62adfb3ff7f44b3e9dc5d367d08309c79 (patch) | |
tree | 90e2f0a448d39508ea61b7bc1deef0cfd07c5c1b /src | |
parent | 2d147509d6d1d3641f371728fc79d12ca24d2284 (diff) | |
download | tor-b13496b62adfb3ff7f44b3e9dc5d367d08309c79.tar tor-b13496b62adfb3ff7f44b3e9dc5d367d08309c79.tar.gz |
Possible fix for broken country settings in ExcludeExitNodes.
It turns out that we weren't updating the _ExcludeExitNodesUnion set's
country numbers when we reloaded (or first loaded!) the IP-to-country
file. Spotted by Lark. Bugfix on 0.2.1.6-alpha.
svn:r18575
Diffstat (limited to 'src')
-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 |
4 files changed, 26 insertions, 11 deletions
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) |