summaryrefslogtreecommitdiff
path: root/src/or/addressmap.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2014-04-08 18:02:03 -0400
committerNick Mathewson <nickm@torproject.org>2015-01-13 12:41:15 -0500
commit9d0fab9872807ef212fadb3feb299cf6309a185f (patch)
treee7dcafceb46a841cfe1fe67da22b747ebe3aa675 /src/or/addressmap.c
parentab6bd78eca0f3edc7ed910d8567c409fe3dfdd92 (diff)
downloadtor-9d0fab9872807ef212fadb3feb299cf6309a185f.tar.gz
tor-9d0fab9872807ef212fadb3feb299cf6309a185f.zip
Allow MapAddress and Automap to work together
The trick here is to apply mapaddress first, and only then apply automapping. Otherwise, the automap checks don't get done. Fix for bug 7555; bugfix on all versions of Tor supporting both MapAddress and AutoMap.
Diffstat (limited to 'src/or/addressmap.c')
-rw-r--r--src/or/addressmap.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/src/or/addressmap.c b/src/or/addressmap.c
index 0f417e6369..ea01894634 100644
--- a/src/or/addressmap.c
+++ b/src/or/addressmap.c
@@ -390,13 +390,35 @@ addressmap_rewrite(char *address, size_t maxlen,
goto done;
}
- if (ent && ent->source == ADDRMAPSRC_DNS) {
- sa_family_t f;
- tor_addr_t tmp;
- f = tor_addr_parse(&tmp, ent->new_address);
- if (f == AF_INET && !(flags & AMR_FLAG_USE_IPV4_DNS))
- goto done;
- else if (f == AF_INET6 && !(flags & AMR_FLAG_USE_IPV6_DNS))
+ switch (ent->source) {
+ case ADDRMAPSRC_DNS:
+ {
+ sa_family_t f;
+ tor_addr_t tmp;
+ f = tor_addr_parse(&tmp, ent->new_address);
+ if (f == AF_INET && !(flags & AMR_FLAG_USE_IPV4_DNS))
+ goto done;
+ else if (f == AF_INET6 && !(flags & AMR_FLAG_USE_IPV6_DNS))
+ goto done;
+ }
+ break;
+ case ADDRMAPSRC_CONTROLLER:
+ case ADDRMAPSRC_TORRC:
+ if (!(flags & AMR_FLAG_USE_MAPADDRESS))
+ goto done;
+ break;
+ case ADDRMAPSRC_AUTOMAP:
+ if (!(flags & AMR_FLAG_USE_AUTOMAP))
+ goto done;
+ break;
+ case ADDRMAPSRC_TRACKEXIT:
+ if (!(flags & AMR_FLAG_USE_TRACKEXIT))
+ goto done;
+ break;
+ case ADDRMAPSRC_NONE:
+ default:
+ log_warn(LD_BUG, "Unknown addrmap source value %d. Ignoring it.",
+ (int) ent->source);
goto done;
}