]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-127319: Disable port reuse on HTTP, XMLRPC, and logging TCP servers (GH-135405)
authorJeremy Cline <jeremycline@linux.microsoft.com>
Sun, 15 Jun 2025 05:34:29 +0000 (01:34 -0400)
committerGitHub <noreply@github.com>
Sun, 15 Jun 2025 05:34:29 +0000 (06:34 +0100)
Prior to issue #120485 these servers did not allow port reuse, which
makes sense as the behavior of port reuse is surprising if you're not
expecting it. It's unclear to me why these services were switched to
allow port reuse, but I believe the desired behavior (unless subclasses
opt in) is to not allow port reuse.

See also: https://bugzilla.redhat.com/show_bug.cgi?id=2323170

Lib/http/server.py
Lib/logging/config.py
Lib/test/test_logging.py
Lib/xmlrpc/server.py
Misc/NEWS.d/next/Core_and_Builtins/2025-06-11-15-08-10.gh-issue-127319.OVGFSZ.rst [new file with mode: 0644]

index ef10d1859326339e6269bf42d89cee3b5edbc11e..a2ffbe2e44df640e7b68d7d842223184e46ec05f 100644 (file)
@@ -115,7 +115,7 @@ DEFAULT_ERROR_CONTENT_TYPE = "text/html;charset=utf-8"
 class HTTPServer(socketserver.TCPServer):
 
     allow_reuse_address = True    # Seems to make sense in testing environment
-    allow_reuse_port = True
+    allow_reuse_port = False
 
     def server_bind(self):
         """Override server_bind to store the server name."""
index c994349fd6eee54b3e2c8417c17633d8eac916a4..3d9aa00fa52d1166b3f6fe0ad8fb9511bc3e1057 100644 (file)
@@ -1018,7 +1018,7 @@ def listen(port=DEFAULT_LOGGING_CONFIG_PORT, verify=None):
         """
 
         allow_reuse_address = True
-        allow_reuse_port = True
+        allow_reuse_port = False
 
         def __init__(self, host='localhost', port=DEFAULT_LOGGING_CONFIG_PORT,
                      handler=None, ready=None, verify=None):
index fa5b1e438168bcc20c12e120ab1ac87f3707eded..e672dfcbb465cc599e445823dc869edcc213f588 100644 (file)
@@ -1036,7 +1036,7 @@ class TestTCPServer(ControlMixin, ThreadingTCPServer):
     """
 
     allow_reuse_address = True
-    allow_reuse_port = True
+    allow_reuse_port = False
 
     def __init__(self, addr, handler, poll_interval=0.5,
                  bind_and_activate=True):
index 90a356fbb8eae4575d053a75796f6958e7e682ee..8130c739af2fe889decb23c6af8667f5c7685826 100644 (file)
@@ -578,7 +578,7 @@ class SimpleXMLRPCServer(socketserver.TCPServer,
     """
 
     allow_reuse_address = True
-    allow_reuse_port = True
+    allow_reuse_port = False
 
     # Warning: this is for debugging purposes only! Never set this to True in
     # production code, as will be sending out sensitive information (exception
diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-06-11-15-08-10.gh-issue-127319.OVGFSZ.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-06-11-15-08-10.gh-issue-127319.OVGFSZ.rst
new file mode 100644 (file)
index 0000000..d90153c
--- /dev/null
@@ -0,0 +1,3 @@
+Set the ``allow_reuse_port`` class variable to ``False`` on the XMLRPC,
+logging, and HTTP servers. This matches the behavior in prior Python
+releases, which is to not allow port reuse.