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 -1
View File
@@ -7,7 +7,7 @@ Domain implemented
KeyFile implemented KeyFile implemented
KeyFileEd25519 KeyFileEd25519
Mode implemented Mode implemented
PidFile PidFile implemented verified
Selector implemented Selector implemented
Socket implemented verified Socket implemented verified
Syslog implemented partly tested Syslog implemented partly tested
@@ -17,6 +17,7 @@ UserID implemented verified
0.9.5 (Beta) 0.9.5 (Beta)
dkimpy-milter.8 dkimpy-milter.8
dkimpy-milter.service dkimpy-milter.service
remove PidFile on stop
AuthservID AuthservID
Canonicalization Canonicalization
Diagnostics Diagnostics
+2
View File
@@ -37,6 +37,7 @@ from Milter.utils import iniplist,parse_addr,parseaddr
import dkimpy_milter.config as config import dkimpy_milter.config as config
from dkimpy_milter.util import drop_privileges from dkimpy_milter.util import drop_privileges
from dkimpy_milter.util import setExceptHook from dkimpy_milter.util import setExceptHook
from dkimpy_milter.util import write_pid
FWS = re.compile(r'\r?\n[ \t]+') FWS = re.compile(r'\r?\n[ \t]+')
@@ -235,6 +236,7 @@ def main():
if milterconfig.get('Syslog'): if milterconfig.get('Syslog'):
syslog.openlog(os.path.basename(sys.argv[0]), syslog.LOG_PID, syslog.LOG_MAIL) syslog.openlog(os.path.basename(sys.argv[0]), syslog.LOG_PID, syslog.LOG_MAIL)
setExceptHook() setExceptHook()
write_pid(milterconfig)
drop_privileges(milterconfig) drop_privileges(milterconfig)
Milter.factory = dkimMilter(milterconfig) Milter.factory = dkimMilter(milterconfig)
Milter.set_flags(Milter.CHGHDRS + Milter.ADDHDRS) Milter.set_flags(Milter.CHGHDRS + Milter.ADDHDRS)
+20
View File
@@ -72,3 +72,23 @@ class ExceptHook:
def setExceptHook(): def setExceptHook():
import sys import sys
sys.excepthook = ExceptHook(useSyslog = 1, useStderr = 1) 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')))