summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-09-15 13:41:36 -0400
committerNick Mathewson <nickm@torproject.org>2010-07-31 15:00:06 -0400
commit8fca6fb2aa569cf4f09b6b4aaa887f3b434d759e (patch)
treeb0c948478cf99030710d5c7bcb9008d891847c3f
parent15424bf800a56007d802db3a9d3fe40fbdf2bee5 (diff)
downloadtor-8fca6fb2aa569cf4f09b6b4aaa887f3b434d759e.tar.gz
tor-8fca6fb2aa569cf4f09b6b4aaa887f3b434d759e.zip
Make "Nowhere" explicitly listable in torrc.
We already had the country code ?? indicating an unknown country, so all we needed to do to make unknown countries excludable was to make the ?? code discoverable.
-rw-r--r--changes/nowhereland6
-rw-r--r--src/or/geoip.c1
-rw-r--r--src/or/routerlist.c4
3 files changed, 11 insertions, 0 deletions
diff --git a/changes/nowhereland b/changes/nowhereland
new file mode 100644
index 0000000000..5435e965e9
--- /dev/null
+++ b/changes/nowhereland
@@ -0,0 +1,6 @@
+ o Minor features:
+ - Add support for the country code "{??}" in torrc options like
+ ExcludeNodes, to indicate all routers of unknown country. Fixes bug
+ 1094.
+
+
diff --git a/src/or/geoip.c b/src/or/geoip.c
index eae927522a..6bb76ae4da 100644
--- a/src/or/geoip.c
+++ b/src/or/geoip.c
@@ -200,6 +200,7 @@ geoip_load_file(const char *filename, or_options_t *options)
sizeof(geoip_unresolved->countrycode));
smartlist_add(geoip_countries, geoip_unresolved);
country_idxplus1_by_lc_code = strmap_new();
+ strmap_set_lc(country_idxplus1_by_lc_code, "??", (void*)(1));
}
if (geoip_entries) {
SMARTLIST_FOREACH(geoip_entries, geoip_entry_t *, e, tor_free(e));
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 5f98abe01b..7be98bd1a5 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -5335,6 +5335,10 @@ routerset_contains(const routerset_t *set, const tor_addr_t *addr,
if (country < 0 && addr)
country = geoip_get_country_by_ip(tor_addr_to_ipv4h(addr));
+ /* XXXX can we safely move this into geoip_get_country_by_ip? */
+ if (country < 0)
+ country = 0;
+
if (country >= 0 && country < set->n_countries &&
bitarray_is_set(set->countries, country))
return 2;