[tor-commits] [tor/master] Prevent changes to other options from removing . from AutomapHostsSuffixes

nickm at torproject.org nickm at torproject.org
Tue Jan 6 19:27:35 UTC 2015


commit 8ef6cdc39f047a7579858a6e23629c1c2718fc0a
Author: Nick Mathewson <nickm at torproject.org>
Date:   Sun Jan 4 17:28:54 2015 -0500

    Prevent changes to other options from removing . from AutomapHostsSuffixes
    
    This happened because we changed AutomapHostsSuffixes to replace "."
    with "", since a suffix of "" means "match everything."  But our
    option handling code for CSV options likes to remove empty entries
    when it re-parses stuff.
    
    Instead, let "." remain ".", and treat it specially when we're
    checking for a match.
    
    Fixes bug 12509; bugfix on 0.2.0.1-alpha.
---
 changes/bug12509    |    4 ++++
 src/or/addressmap.c |    2 ++
 src/or/config.c     |    9 ---------
 src/or/or.h         |    5 +++--
 4 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/changes/bug12509 b/changes/bug12509
new file mode 100644
index 0000000..8d5c1dd
--- /dev/null
+++ b/changes/bug12509
@@ -0,0 +1,4 @@
+
+  o Minor bugfixes (automapping):
+    - Prevent changes to other optoins from removing the wildcard value "."
+      from "AutomapHostsSuffixes".
diff --git a/src/or/addressmap.c b/src/or/addressmap.c
index 998770a..279132e 100644
--- a/src/or/addressmap.c
+++ b/src/or/addressmap.c
@@ -226,6 +226,8 @@ addressmap_address_should_automap(const char *address,
     return 0;
 
   SMARTLIST_FOREACH_BEGIN(suffix_list, const char *, suffix) {
+    if (!strcmp(suffix, "."))
+      return 1;
     if (!strcasecmpend(address, suffix))
       return 1;
   } SMARTLIST_FOREACH_END(suffix);
diff --git a/src/or/config.c b/src/or/config.c
index 8921082..b047b12 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -3398,15 +3398,6 @@ options_validate(or_options_t *old_options, or_options_t *options,
                                  AF_INET6, 1, msg)<0)
     return -1;
 
-  if (options->AutomapHostsSuffixes) {
-    SMARTLIST_FOREACH(options->AutomapHostsSuffixes, char *, suf,
-    {
-      size_t len = strlen(suf);
-      if (len && suf[len-1] == '.')
-        suf[len-1] = '\0';
-    });
-  }
-
   if (options->TestingTorNetwork &&
       !(options->DirAuthorities ||
         (options->AlternateDirAuthority &&
diff --git a/src/or/or.h b/src/or/or.h
index 1609587..66d10ac 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -3646,8 +3646,9 @@ typedef struct {
                               * hostname ending with one of the suffixes in
                               * <b>AutomapHostsSuffixes</b>, map it to a
                               * virtual address. */
-  smartlist_t *AutomapHostsSuffixes; /**< List of suffixes for
-                                      * <b>AutomapHostsOnResolve</b>. */
+  /** List of suffixes for <b>AutomapHostsOnResolve</b>.  The special value
+   * "." means "match everything." */
+  smartlist_t *AutomapHostsSuffixes;
   int RendPostPeriod; /**< How often do we post each rendezvous service
                        * descriptor? Remember to publish them independently. */
   int KeepalivePeriod; /**< How often do we send padding cells to keep





More information about the tor-commits mailing list