From 1cff0fb32018a637080b3be5067510742a4d0a5b Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: May 01 2020 13:54:23 +0000 Subject: Issue 51064 - Unable to install server where IPv6 is disabled Description: When checking if a port is available, first attempt to create a socket using AF_INET6, if that fails then use AF_INET relates: https://pagure.io/389-ds-base/issue/51064 Reviewed by: firstyear(Thanks!) --- diff --git a/src/lib389/lib389/utils.py b/src/lib389/lib389/utils.py index 6afbfe6..9a9260b 100644 --- a/src/lib389/lib389/utils.py +++ b/src/lib389/lib389/utils.py @@ -1143,11 +1143,28 @@ def getDateTime(): def socket_check_open(host, port): - with closing(socket.socket(socket.AF_INET6, socket.SOCK_STREAM)) as sock: - if sock.connect_ex((host, port)) == 0: - return True - else: - return False + """ + Check if a socket can be opened. Need to handle cases where IPv6 is completely + disabled. + """ + try: + # Trying IPv6 first ... + family = socket.AF_INET6 + with closing(socket.socket(family, socket.SOCK_STREAM)) as sock: + if sock.connect_ex((host, port)) == 0: + return True + else: + return False + except OSError: + # No IPv6, adjust hostname, and try IPv4 ... + family = socket.AF_INET + if host == "::1": + host = "127.0.0.1" + with closing(socket.socket(family, socket.SOCK_STREAM)) as sock: + if sock.connect_ex((host, port)) == 0: + return True + else: + return False def ensure_bytes(val):