[tor-commits] [tor/master] Work around nytimes.com's broken hostnames in our SOCKS checks.
nickm at torproject.org
nickm at torproject.org
Wed Jun 24 14:00:01 UTC 2015
commit 3f336966a264d7cd7c6dab08fb85d85273f06d68
Author: Yawning Angel <yawning at schwanenlied.me>
Date: Wed Jun 24 13:52:29 2015 +0000
Work around nytimes.com's broken hostnames in our SOCKS checks.
RFC 952 is approximately 30 years old, and people are failing to comply,
by serving A records with '_' as part of the hostname. Since relaxing
the check is a QOL improvement for our userbase, relax the check to
allow such abominations as destinations, especially since there are
likely to be other similarly misconfigured domains out there.
---
changes/bug16430 | 4 ++++
src/common/util.c | 7 +++++--
src/test/test_util.c | 9 +++++++--
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/changes/bug16430 b/changes/bug16430
new file mode 100644
index 0000000..ca7b874
--- /dev/null
+++ b/changes/bug16430
@@ -0,0 +1,4 @@
+ o Minor features (client):
+ - Relax the validation done to hostnames in SOCKS5 requests, and allow
+ '_' to cope with domains observed in the wild that are serving non-RFC
+ compliant records. Resolves ticket 16430.
diff --git a/src/common/util.c b/src/common/util.c
index 942d0c2..4490150 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -1036,6 +1036,9 @@ string_is_valid_ipv6_address(const char *string)
/** Return true iff <b>string</b> matches a pattern of DNS names
* that we allow Tor clients to connect to.
+ *
+ * Note: This allows certain technically invalid characters ('_') to cope
+ * with misconfigured zones that have been encountered in the wild.
*/
int
string_is_valid_hostname(const char *string)
@@ -1048,7 +1051,7 @@ string_is_valid_hostname(const char *string)
smartlist_split_string(components,string,".",0,0);
SMARTLIST_FOREACH_BEGIN(components, char *, c) {
- if (c[0] == '-') {
+ if ((c[0] == '-') || (*c == '_')) {
result = 0;
break;
}
@@ -1057,7 +1060,7 @@ string_is_valid_hostname(const char *string)
if ((*c >= 'a' && *c <= 'z') ||
(*c >= 'A' && *c <= 'Z') ||
(*c >= '0' && *c <= '9') ||
- (*c == '-'))
+ (*c == '-') || (*c == '_'))
c++;
else
result = 0;
diff --git a/src/test/test_util.c b/src/test/test_util.c
index b0366db..0f64c26 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -4268,18 +4268,23 @@ test_util_hostname_validation(void *arg)
tt_assert(string_is_valid_hostname("stanford.edu"));
tt_assert(string_is_valid_hostname("multiple-words-with-hypens.jp"));
- // Subdomain name cannot start with '-'.
+ // Subdomain name cannot start with '-' or '_'.
tt_assert(!string_is_valid_hostname("-torproject.org"));
tt_assert(!string_is_valid_hostname("subdomain.-domain.org"));
tt_assert(!string_is_valid_hostname("-subdomain.domain.org"));
+ tt_assert(!string_is_valid_hostname("___abc.org"));
// Hostnames cannot contain non-alphanumeric characters.
tt_assert(!string_is_valid_hostname("%%domain.\\org."));
tt_assert(!string_is_valid_hostname("***x.net"));
- tt_assert(!string_is_valid_hostname("___abc.org"));
tt_assert(!string_is_valid_hostname("\xff\xffxyz.org"));
tt_assert(!string_is_valid_hostname("word1 word2.net"));
+ // Test workaround for nytimes.com stupidity, technically invalid,
+ // but we allow it since they are big, even though they are failing to
+ // comply with a ~30 year old standard.
+ tt_assert(string_is_valid_hostname("core3_euw1.fabrik.nytimes.com"));
+
// XXX: do we allow single-label DNS names?
done:
More information about the tor-commits
mailing list