]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix an issue in my mapaddress domains code spotted by arma
authorNick Mathewson <nickm@torproject.org>
Sat, 26 Nov 2011 01:13:55 +0000 (20:13 -0500)
committerNick Mathewson <nickm@torproject.org>
Wed, 30 Nov 2011 19:08:11 +0000 (14:08 -0500)
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

index f7b24112ce4d16ddf2007f38b6b3213bf7a17310..4f26a6b972446d765757d21d07e1a05522d29b74 100644 (file)
@@ -1178,15 +1178,18 @@ addressmap_have_mapping(const char *address, int update_expiry)
  * <b>new_address</b> should be a newly dup'ed string, which we'll use or
  * free as appropriate. We will leave address alone.
  *
- * If <b>new_address</b> is NULL, or equal to <b>address</b>, remove
- * any mappings that exist from <b>address</b>.
- *
  * If <b>wildcard_addr</b> is true, then the mapping will match any address
  * equal to <b>address</b>, or any address ending with a period followed by
  * <b>address</b>.  If <b>wildcard_addr</b> and <b>wildcard_new_addr</b> are
  * both true, the mapping will rewrite addresses that end with
  * ".<b>address</b>" into ones that end with ".<b>new_address</b>."
  *
+ * If <b>new_address</b> is NULL, or <b>new_address</b> is equal to
+ * <b>address</b> and <b>wildcard_addr</b> is equal to
+ * <b>wildcard_new_addr</b>, remove any mappings that exist from
+ * <b>address</b>.
+ *
+ *
  * It is an error to set <b>wildcard_new_addr</b> if <b>wildcard_addr</b> 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) {