summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Crittenden <rcritten@redhat.com>2008-03-27 15:33:06 -0400
committerRob Crittenden <rcritten@redhat.com>2008-03-27 15:33:06 -0400
commitb387570fe6ed46e9eb9223a1c930ac060421f7b0 (patch)
tree5d78f6a7f30417e0e961d47d2219d7f1b3392932
parent382ff1d29e6ac34b72b8e503a2938ae9effe1b72 (diff)
downloadfreeipa-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.py7
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: