summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Likins <alikins@redhat.com>2008-09-19 14:52:32 -0400
committerAdrian Likins <alikins@redhat.com>2008-09-19 14:52:32 -0400
commitca0b109bfb78736cb3997b536ac20dadf32485bd (patch)
treec5fba0756fd6475c77476d824a3d8a2b0c9e3b29
parentd7d7203553c024cbddd726d499eb351b460cb9f3 (diff)
downloadcertmaster-ca0b109bfb78736cb3997b536ac20dadf32485bd.zip
certmaster-ca0b109bfb78736cb3997b536ac20dadf32485bd.tar.gz
certmaster-ca0b109bfb78736cb3997b536ac20dadf32485bd.tar.xz
fix for utils.daemonize() as reported in https://fedorahosted.org/func/ticket/58
by goozbach Couple of things wrong, fd's were getting closed in wrong place, the call to os.cwd('/') was supposed to be os.chdir('/') Also try duping the fd's just in case
-rwxr-xr-xcertmaster/utils.py27
1 files changed, 21 insertions, 6 deletions
diff --git a/certmaster/utils.py b/certmaster/utils.py
index 22b0afb..ecebad6 100755
--- a/certmaster/utils.py
+++ b/certmaster/utils.py
@@ -32,6 +32,14 @@ import sub_process
# FIXME: can remove this constant?
REMOTE_ERROR = "REMOTE_ERROR"
+# The standard I/O file descriptors are redirected to /dev/null by default.
+if (hasattr(os, "devnull")):
+ REDIRECT_TO = os.devnull
+else:
+ REDIRECT_TO = "/dev/null"
+
+
+
def trace_me():
x = traceback.extract_stack()
@@ -44,18 +52,26 @@ def daemonize(pidfile=None):
Writes the new PID to the provided file name if not None.
"""
-# print pidfile
pid = os.fork()
if pid > 0:
sys.exit(0)
- os.close(0)
- os.close(1)
- os.close(2)
- os.cwd("/")
+ os.chdir("/")
os.setsid()
os.umask(0)
pid = os.fork()
+ os.close(0)
+ os.close(1)
+ os.close(2)
+
+ # based on http://code.activestate.com/recipes/278731/
+ os.open(REDIRECT_TO, os.O_RDWR) # standard input (0)
+
+ os.dup2(0, 1) # standard output (1)
+ os.dup2(0, 2) # standard error (2)
+
+
+
if pid > 0:
if pidfile is not None:
open(pidfile, "w").write(str(pid))
@@ -116,7 +132,6 @@ def get_hostname(talk_to_certmaster=True):
try:
s = socket.socket()
s.settimeout(5)
- # print "server, port", server, port
s.connect((server, port))
(intf, port) = s.getsockname()
remote_hostname = socket.gethostbyaddr(intf)[0]