commit 8ef6cdc39f047a7579858a6e23629c1c2718fc0a Author: Nick Mathewson nickm@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
tor-commits@lists.torproject.org