]> granicus.if.org Git - python/commitdiff
bpo-30378: Fix the problem that SysLogHandler can't handle IPv6 addresses (#1904...
authorXiang Zhang <angwerzx@126.com>
Thu, 1 Jun 2017 14:22:18 +0000 (22:22 +0800)
committerGitHub <noreply@github.com>
Thu, 1 Jun 2017 14:22:18 +0000 (22:22 +0800)
Lib/logging/handlers.py
Misc/NEWS

index e430ab7b9b6588199116b3cf9e5234438e6ce501..e0b935c878767a99ca2f37495b663aab822f6978 100644 (file)
@@ -760,14 +760,29 @@ class SysLogHandler(logging.Handler):
             self.unixsocket = 1
             self._connect_unixsocket(address)
         else:
-            self.unixsocket = 0
+            self.unixsocket = False
             if socktype is None:
                 socktype = socket.SOCK_DGRAM
-            self.socket = socket.socket(socket.AF_INET, socktype)
-            if socktype == socket.SOCK_STREAM:
-                self.socket.connect(address)
+            host, port = address
+            ress = socket.getaddrinfo(host, port, 0, socktype)
+            if not ress:
+                raise socket.error("getaddrinfo returns an empty list")
+            for res in ress:
+                af, socktype, proto, _, sa = res
+                err = sock = None
+                try:
+                    sock = socket.socket(af, socktype, proto)
+                    if socktype == socket.SOCK_STREAM:
+                        sock.connect(sa)
+                    break
+                except socket.error as exc:
+                    err = exc
+                    if sock is not None:
+                        sock.close()
+            if err is not None:
+                raise err
+            self.socket = sock
             self.socktype = socktype
-        self.formatter = None
 
     def _connect_unixsocket(self, address):
         use_socktype = self.socktype
@@ -812,7 +827,7 @@ class SysLogHandler(logging.Handler):
             priority = self.priority_names[priority]
         return (facility << 3) | priority
 
-    def close (self):
+    def close(self):
         """
         Closes the socket.
         """
index c8ba45abefc581d010643e8752c3a1feac590dd1..12280bd3518f5c4b8a1b11fc6ade1f4c56e16512 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -49,6 +49,9 @@ Extension Modules
 Library
 -------
 
+- bpo-30378: Fix the problem that logging.handlers.SysLogHandler cannot
+  handle IPv6 addresses.
+
 - bpo-29960: Preserve generator state when _random.Random.setstate()
   raises an exception.  Patch by Bryan Olson.