diff options
author | Rob Crittenden <rcritten@redhat.com> | 2008-03-27 15:33:06 -0400 |
---|---|---|
committer | Rob Crittenden <rcritten@redhat.com> | 2008-03-27 15:33:06 -0400 |
commit | b387570fe6ed46e9eb9223a1c930ac060421f7b0 (patch) | |
tree | 5d78f6a7f30417e0e961d47d2219d7f1b3392932 | |
parent | 382ff1d29e6ac34b72b8e503a2938ae9effe1b72 (diff) | |
download | freeipa-b387570fe6ed46e9eb9223a1c930ac060421f7b0.tar.gz freeipa-b387570fe6ed46e9eb9223a1c930ac060421f7b0.tar.xz freeipa-b387570fe6ed46e9eb9223a1c930ac060421f7b0.zip |
Properly detect when ports are available.
The DS setup program uses Perl and does a similar port available test.
It seems that perl always sets FD_CLOEXEC and python does not. This is
why the port test would pass in python but fail in perl.
439024
-rw-r--r-- | ipa-server/ipaserver/installutils.py | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/ipa-server/ipaserver/installutils.py b/ipa-server/ipaserver/installutils.py index 3d09e85c5..c261e5302 100644 --- a/ipa-server/ipaserver/installutils.py +++ b/ipa-server/ipaserver/installutils.py @@ -27,6 +27,7 @@ import fileinput import sys import time import struct +import fcntl from ipa import ipautil from ipa import dnsclient @@ -104,9 +105,8 @@ def port_available(port): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + fcntl.fcntl(s, fcntl.F_SETFD, fcntl.FD_CLOEXEC) s.bind(('', port)) - s.shutdown(0) s.close() except socket.error, e: if e[0] == errno.EADDRINUSE: @@ -115,9 +115,8 @@ def port_available(port): if rv: try: s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) - s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + fcntl.fcntl(s, fcntl.F_SETFD, fcntl.FD_CLOEXEC) s.bind(('', port)) - s.shutdown(0) s.close() except socket.error, e: if e[0] == errno.EADDRINUSE: |