summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert JW Regeer <bertjw@regeer.org>2020-11-26 21:42:44 -0800
committerBert JW Regeer <bertjw@regeer.org>2020-11-26 21:42:44 -0800
commit2f2972e8349d19cc36472e54fc9969b431ef1413 (patch)
treecbca8ac3f14a6fc6afcd72255e86c2bfee843f3e
parent90148c9ab53c53019055d8ca54ffcbba08b2b284 (diff)
downloadwaitress-2f2972e8349d19cc36472e54fc9969b431ef1413.tar.gz
Remove attempt to resolve IP address to server_name
Instead we just rely on the server_name passed in to the adjustment.
-rw-r--r--src/waitress/server.py57
-rw-r--r--tests/test_server.py29
2 files changed, 6 insertions, 80 deletions
diff --git a/src/waitress/server.py b/src/waitress/server.py
index b37980e..fe7b6da 100644
--- a/src/waitress/server.py
+++ b/src/waitress/server.py
@@ -241,7 +241,7 @@ class BaseWSGIServer(wasyncore.dispatcher):
self.bind_server_socket()
self.effective_host, self.effective_port = self.getsockname()
- self.server_name = self.get_server_name(self.effective_host)
+ self.server_name = adj.server_name
self.active_channels = {}
if _start:
self.accept_connections()
@@ -249,39 +249,6 @@ class BaseWSGIServer(wasyncore.dispatcher):
def bind_server_socket(self):
raise NotImplementedError # pragma: no cover
- def get_server_name(self, ip):
- """Given an IP or hostname, try to determine the server name."""
-
- if not ip:
- raise ValueError("Requires an IP to get the server name")
-
- server_name = str(ip)
-
- # If we are bound to all IP's, just return the current hostname, only
- # fall-back to "localhost" if we fail to get the hostname
- if server_name == "0.0.0.0" or server_name == "::":
- try:
- return str(self.socketmod.gethostname())
- except (OSError, UnicodeDecodeError): # pragma: no cover
- # We also deal with UnicodeDecodeError in case of Windows with
- # non-ascii hostname
- return "localhost"
-
- # Now let's try and convert the IP address to a proper hostname
- try:
- server_name = self.socketmod.gethostbyaddr(server_name)[0]
- except (OSError, UnicodeDecodeError): # pragma: no cover
- # We also deal with UnicodeDecodeError in case of Windows with
- # non-ascii hostname
- pass
-
- # If it contains an IPv6 literal, make sure to surround it with
- # brackets
- if ":" in server_name and "[" not in server_name:
- server_name = "[{}]".format(server_name)
-
- return server_name
-
def getsockname(self):
raise NotImplementedError # pragma: no cover
@@ -391,20 +358,11 @@ class TcpWSGIServer(BaseWSGIServer):
self.bind(sockaddr)
def getsockname(self):
- try:
- return self.socketmod.getnameinfo(
- self.socket.getsockname(), self.socketmod.NI_NUMERICSERV
- )
- except: # pragma: no cover
- # This only happens on Linux because a DNS issue is considered a
- # temporary failure that will raise (even when NI_NAMEREQD is not
- # set). Instead we try again, but this time we just ask for the
- # numerichost and the numericserv (port) and return those. It is
- # better than nothing.
- return self.socketmod.getnameinfo(
- self.socket.getsockname(),
- self.socketmod.NI_NUMERICHOST | self.socketmod.NI_NUMERICSERV,
- )
+ # Return the IP address, port as numeric
+ return self.socketmod.getnameinfo(
+ self.socket.getsockname(),
+ self.socketmod.NI_NUMERICHOST | self.socketmod.NI_NUMERICSERV,
+ )
def set_socket_options(self, conn):
for (level, optname, value) in self.adj.socket_options:
@@ -451,9 +409,6 @@ if hasattr(socket, "AF_UNIX"):
def fix_addr(self, addr):
return ("localhost", None)
- def get_server_name(self, ip):
- return "localhost"
-
# Compatibility alias.
WSGIServer = TcpWSGIServer
diff --git a/tests/test_server.py b/tests/test_server.py
index 508b382..6edc3b2 100644
--- a/tests/test_server.py
+++ b/tests/test_server.py
@@ -113,35 +113,6 @@ class TestWSGIServer(unittest.TestCase):
inst = self._makeOneWithMap(_start=False)
self.assertEqual(inst.accepting, False)
- def test_get_server_name_empty(self):
- inst = self._makeOneWithMap(_start=False)
- self.assertRaises(ValueError, inst.get_server_name, "")
-
- def test_get_server_name_with_ip(self):
- inst = self._makeOneWithMap(_start=False)
- result = inst.get_server_name("127.0.0.1")
- self.assertTrue(result)
-
- def test_get_server_name_with_hostname(self):
- inst = self._makeOneWithMap(_start=False)
- result = inst.get_server_name("fred.flintstone.com")
- self.assertEqual(result, "fred.flintstone.com")
-
- def test_get_server_name_0000(self):
- inst = self._makeOneWithMap(_start=False)
- result = inst.get_server_name("0.0.0.0")
- self.assertTrue(len(result) != 0)
-
- def test_get_server_name_double_colon(self):
- inst = self._makeOneWithMap(_start=False)
- result = inst.get_server_name("::")
- self.assertTrue(len(result) != 0)
-
- def test_get_server_name_ipv6(self):
- inst = self._makeOneWithMap(_start=False)
- result = inst.get_server_name("2001:DB8::ffff")
- self.assertEqual("[2001:DB8::ffff]", result)
-
def test_get_server_multi(self):
inst = self._makeOneWithMulti()
self.assertEqual(inst.__class__.__name__, "MultiSocketServer")