From 66859e2d4a7823a98a6842e5cf3b09c9fa47c704 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 25 Nov 2011 20:13:55 -0500 Subject: [PATCH] Fix an issue in my mapaddress domains code spotted by arma MapAddress *.torproject.org torproject.org would have been interpreted as a map from a domain to itself, and would have cleared the mapping. Now we require not only a match of domains, but of wildcards. --- src/or/connection_edge.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index f7b24112ce..4f26a6b972 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -1178,15 +1178,18 @@ addressmap_have_mapping(const char *address, int update_expiry) * new_address should be a newly dup'ed string, which we'll use or * free as appropriate. We will leave address alone. * - * If new_address is NULL, or equal to address, remove - * any mappings that exist from address. - * * If wildcard_addr is true, then the mapping will match any address * equal to address, or any address ending with a period followed by * address. If wildcard_addr and wildcard_new_addr are * both true, the mapping will rewrite addresses that end with * ".address" into ones that end with ".new_address." * + * If new_address is NULL, or new_address is equal to + * address and wildcard_addr is equal to + * wildcard_new_addr, remove any mappings that exist from + * address. + * + * * It is an error to set wildcard_new_addr if wildcard_addr is * not set. */ void @@ -1201,7 +1204,8 @@ addressmap_register(const char *address, char *new_address, time_t expires, tor_assert(wildcard_addr); ent = strmap_get(addressmap, address); - if (!new_address || !strcasecmp(address,new_address)) { + if (!new_address || (!strcasecmp(address,new_address) && + wildcard_addr == wildcard_new_addr)) { /* Remove the mapping, if any. */ tor_free(new_address); if (ent) {