aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 000000000..5435e965e
--- /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 eae927522..6bb76ae4d 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 5f98abe01..7be98bd1a 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;