aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-02-16 15:15:06 +0000
committerNick Mathewson <nickm@torproject.org>2009-02-16 15:15:06 +0000
commitb13496b62adfb3ff7f44b3e9dc5d367d08309c79 (patch)
tree90e2f0a448d39508ea61b7bc1deef0cfd07c5c1b /src
parent2d147509d6d1d3641f371728fc79d12ca24d2284 (diff)
downloadtor-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.c11
-rw-r--r--src/or/geoip.c5
-rw-r--r--src/or/or.h1
-rw-r--r--src/or/routerlist.c20
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)