From 3612b88e2e30f83fe8b1034de1c41ca3557bc7ee Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Sun, 16 Jul 2017 13:58:02 +0900 Subject: [PATCH] Permit underscores in hostnames. Add tests. --- lib/util.py | 4 +++- tests/lib/test_util.py | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/util.py b/lib/util.py index 2c09127..40e5869 100644 --- a/lib/util.py +++ b/lib/util.py @@ -259,7 +259,9 @@ def address_string(address): return fmt.format(host, port) # See http://stackoverflow.com/questions/2532053/validate-a-hostname-string -SEGMENT_REGEX = re.compile("(?!-)[A-Z\d-]{1,63}(? 255: return False diff --git a/tests/lib/test_util.py b/tests/lib/test_util.py index 4142679..b55e6b6 100644 --- a/tests/lib/test_util.py +++ b/tests/lib/test_util.py @@ -56,3 +56,30 @@ def test_increment_byte_string(): assert util.increment_byte_string(b'1') == b'2' assert util.increment_byte_string(b'\x01\x01') == b'\x01\x02' assert util.increment_byte_string(b'\xff\xff') is None + +def test_is_valid_hostname(): + is_valid_hostname = util.is_valid_hostname + assert not is_valid_hostname('') + assert is_valid_hostname('a') + assert is_valid_hostname('_') + # Hyphens + assert not is_valid_hostname('-b') + assert not is_valid_hostname('a.-b') + assert is_valid_hostname('a-b') + assert not is_valid_hostname('b-') + assert not is_valid_hostname('b-.c') + # Dots + assert is_valid_hostname('a.') + assert is_valid_hostname('foo1.Foo') + assert not is_valid_hostname('foo1..Foo') + assert is_valid_hostname('12Foo.Bar.Bax_') + assert is_valid_hostname('12Foo.Bar.Baz_12') + # 63 octets in part + assert is_valid_hostname('a.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN' + 'OPQRSTUVWXYZ0123456789_.bar') + # Over 63 octets in part + assert not is_valid_hostname('a.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN' + 'OPQRSTUVWXYZ0123456789_1.bar') + len255 = ('a' * 62 + '.') * 4 + 'abc' + assert is_valid_hostname(len255) + assert not is_valid_hostname(len255 + 'd')