Skip IPv6 addresses in cname_lookup middleware.

It already skips IPv4 addresses, and since IPv6 is the future of the
Internet*, we should probably do the right thing with those too.

* IPv6: Just two years away for over fifteen years!

Change-Id: I54f1db4e936fd38d05ac8b5c709efba76525b9d2
This commit is contained in:
Samuel Merritt
2013-05-03 14:08:08 -07:00
parent b61b177a3f
commit e3da6b07a0
2 changed files with 11 additions and 3 deletions

View File

@@ -62,10 +62,14 @@ def lookup_cname(domain): # pragma: no cover
def is_ip(domain): def is_ip(domain):
try: try:
socket.inet_aton(domain) socket.inet_pton(socket.AF_INET, domain)
return True return True
except socket.error: except socket.error:
return False try:
socket.inet_pton(socket.AF_INET6, domain)
return True
except socket.error:
return False
class CNAMELookupMiddleware(object): class CNAMELookupMiddleware(object):

View File

@@ -47,7 +47,6 @@ class TestCNAMELookup(unittest.TestCase):
{'lookup_depth': 2}) {'lookup_depth': 2})
def test_pass_ip_addresses(self): def test_pass_ip_addresses(self):
cname_lookup.lookup_cname = original_lookup cname_lookup.lookup_cname = original_lookup
req = Request.blank('/', environ={'REQUEST_METHOD': 'GET'}, req = Request.blank('/', environ={'REQUEST_METHOD': 'GET'},
@@ -55,6 +54,11 @@ class TestCNAMELookup(unittest.TestCase):
resp = self.app(req.environ, start_response) resp = self.app(req.environ, start_response)
self.assertEquals(resp, 'FAKE APP') self.assertEquals(resp, 'FAKE APP')
req = Request.blank('/', environ={'REQUEST_METHOD': 'GET'},
headers={'Host': 'fc00:7ea1:f155::6321:8841'})
resp = self.app(req.environ, start_response)
self.assertEquals(resp, 'FAKE APP')
def test_passthrough(self): def test_passthrough(self):
def my_lookup(d): def my_lookup(d):