Implement and test PidFile option. Update TODO

This commit is contained in:
Scott Kitterman
2018-02-16 17:12:41 -05:00
parent 2aadaa0f59
commit 2399ee0010
3 changed files with 24 additions and 1 deletions
+2
View File
@@ -37,6 +37,7 @@ from Milter.utils import iniplist,parse_addr,parseaddr
import dkimpy_milter.config as config
from dkimpy_milter.util import drop_privileges
from dkimpy_milter.util import setExceptHook
from dkimpy_milter.util import write_pid
FWS = re.compile(r'\r?\n[ \t]+')
@@ -235,6 +236,7 @@ def main():
if milterconfig.get('Syslog'):
syslog.openlog(os.path.basename(sys.argv[0]), syslog.LOG_PID, syslog.LOG_MAIL)
setExceptHook()
write_pid(milterconfig)
drop_privileges(milterconfig)
Milter.factory = dkimMilter(milterconfig)
Milter.set_flags(Milter.CHGHDRS + Milter.ADDHDRS)
+20
View File
@@ -72,3 +72,23 @@ class ExceptHook:
def setExceptHook():
import sys
sys.excepthook = ExceptHook(useSyslog = 1, useStderr = 1)
####################
def write_pid(milterconfig):
"""Write PID in pidfile. Will not overwrite an existing file."""
import os
import syslog
if not os.path.isfile(milterconfig.get('PidFile')):
pid = str(os.getpid())
try:
f = open(milterconfig.get('PidFile'), 'w')
except IOError as e:
if milterconfig.get('Syslog'):
syslog.syslog('Unable to write pidfle {0}. IOError: {1}'.format(milterconfig.get('PidFile'), e))
raise
f.write(pid)
f.close()
else:
if milterconfig.get('Syslog'):
syslog.syslog('Unable to write pidfle {0}. File exists.'.format(milterconfig.get('PidFile')))
raise RuntimeError('Unable to write pidfle {0}. File exists.'.format(milterconfig.get('PidFile')))