summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-07-15 12:44:51 -0400
committerNick Mathewson <nickm@torproject.org>2011-07-15 13:04:06 -0400
commitf40df02f3e26df792b7e364d1b6ea5dab167405c (patch)
tree66e8ea896af15ce33184ca40e786821ba02d585a
parent3380dc9cc0a8cdaae0dbd3e8b7c11e4ccdab504d (diff)
downloadtor-f40df02f3e26df792b7e364d1b6ea5dab167405c.tar.gz
tor-f40df02f3e26df792b7e364d1b6ea5dab167405c.zip
Treat null address as "unknown", not "rejected" in md policy
Previously, we had an issue where we'd treat an unknown address as 0, which turned into "0.0.0.0", which looked like a rejected address. This meant in practice that as soon as we started doing comparisons of unknown uint32 addresses to short policies, we'd get 'rejected' right away. Because of the circumstances under which this would be called, it would only happen when we had local DNS cached entries and we were looking to launch new circuits.
-rw-r--r--changes/shortpolicy_compare4
-rw-r--r--src/or/policies.c4
2 files changed, 7 insertions, 1 deletions
diff --git a/changes/shortpolicy_compare b/changes/shortpolicy_compare
new file mode 100644
index 0000000000..3de0948174
--- /dev/null
+++ b/changes/shortpolicy_compare
@@ -0,0 +1,4 @@
+ o Major bugfixes:
+ - Fix a bug where comparing an unknown address to a microdescriptor's
+ shortened exit policy would always seem to give a "rejected" result.
+ Bugfix on 0.2.3.1-alpha. Fixes bug 3599.
diff --git a/src/or/policies.c b/src/or/policies.c
index 5bd13b5014..93cae768e9 100644
--- a/src/or/policies.c
+++ b/src/or/policies.c
@@ -1415,8 +1415,10 @@ compare_tor_addr_to_short_policy(const tor_addr_t *addr, uint16_t port,
tor_assert(port != 0);
+ if (addr && tor_addr_is_null(addr))
+ addr = NULL; /* Unspec means 'no address at all,' in this context. */
+
if (addr && (tor_addr_is_internal(addr, 0) ||
- tor_addr_is_null(addr) ||
tor_addr_is_loopback(addr)))
return ADDR_POLICY_REJECTED;