You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/media-sound/edna/files/edna-0.6-daemon.patch

68 lines
2.1 KiB

--- edna.py.orig 2007-01-27 18:49:16.000000000 +0000
+++ edna.py 2007-01-27 18:47:19.000000000 +0000
@@ -36,7 +36,9 @@
import string
import os
import cgi
+import ctypes
import urllib
+import pwd
import socket
import re
import stat
@@ -1149,7 +1151,7 @@
print ' if config-file is not specified, then edna.conf is used'
sys.exit(0)
-def daemonize(stdin='/dev/null', stdout='/dev/null', stderr='/dev/null',pname=''):
+def daemonize(stdin='/dev/null', stdout='/dev/null', stderr='/dev/null', pname='', uid = None):
'''This forks the current process into a daemon.
The stdin, stdout, and stderr arguments are file names that
will be opened and be used to replace the standard file descriptors
@@ -1159,6 +1161,11 @@
if it shares a file with stdout then interleaved output
may not appear in the order that you expect.
'''
+ # Rename process in /proc/<pid>/stat from python to edna
+ # (helps start-stop-daemon find us)
+ libc = ctypes.CDLL('/lib/libc.so.6')
+ libc.prctl(15, 'edna\0', 0, 0, 0)
+
# Do first fork.
try:
pid = os.fork()
@@ -1186,6 +1193,8 @@
sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror) )
sys.exit(1)
# Now I am a daemon!
+ # If specified change the process owner
+ if uid: os.setuid(uid)
# Redirect standard file descriptors.
si = open(stdin, 'r')
so = open(stdout, 'a+')
@@ -1198,9 +1207,16 @@
if __name__ == '__main__':
fname = 'edna.conf'
daemon_mode=0
+ uid = os.getuid()
+ pidfile = '/var/run/edna.pid'
for a in sys.argv[1:]:
if a == "--daemon":
daemon_mode=1
+ elif a.startswith("--user"):
+ uname = a.split("=")[1].strip()
+ uid = pwd.getpwnam(uname)[2]
+ elif a.startswith("--pidfile"):
+ pidfile = a.split("=")[1].strip()
elif a == "--help" or a == "-h" or string.find(a, '--')==0:
usage()
else:
@@ -1211,6 +1227,6 @@
raise SystemExit
if daemon_mode:
- daemonize('/dev/null', '/var/log/edna.log', '/var/log/edna.log', '/var/run/edna.pid')
+ daemonize(uid = uid, pname = pidfile)
run_server(fname)