Do not create PidFile by default
By default, avoid creating a PIDFile. PIDFiles are racy and potentially dangerous. Modern system supervision systems don't need them, because they manage the process groups directly. If the configuration file doesn't specify a PidFile, dkimpy-milter shouldn't try to create one.
This commit is contained in:
@@ -40,7 +40,7 @@ defaultConfigData = {
|
||||
'UMask': 0o07,
|
||||
'Mode': 'sv',
|
||||
'Socket': None,
|
||||
'PidFile': '/var/run/dkimpy-milter/dkimpy-milter.pid',
|
||||
'PidFile': None,
|
||||
'UserID': 'dkimpy-milter',
|
||||
'Canonicalization': 'relaxed/simple',
|
||||
'InternalHosts': '127.0.0.1',
|
||||
|
||||
+11
-8
@@ -115,34 +115,37 @@ 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')):
|
||||
pidfile = milterconfig.get('PidFile')
|
||||
if pidfile is None:
|
||||
return
|
||||
if not os.path.isfile(pidfile):
|
||||
pid = str(os.getpid())
|
||||
try:
|
||||
f = open(milterconfig.get('PidFile'), 'w')
|
||||
f = open(pidfile, 'w')
|
||||
except IOError as e:
|
||||
if str(e)[:35] == '[Errno 2] No such file or directory':
|
||||
piddir = milterconfig.get('PidFile').rsplit('/', 1)[0]
|
||||
piddir = pidfile.rsplit('/', 1)[0]
|
||||
os.mkdir(piddir)
|
||||
user, group = user_group(milterconfig.get('UserID'))
|
||||
os.chown(piddir, user, group)
|
||||
f = open(milterconfig.get('PidFile'), 'w')
|
||||
f = open(pidfile, 'w')
|
||||
if milterconfig.get('Syslog'):
|
||||
syslog.syslog('PID dir created: {0}'.format(piddir))
|
||||
else:
|
||||
if milterconfig.get('Syslog'):
|
||||
syslog.syslog('Unable to write pidfle {0}. IOError: {1}'
|
||||
.format(milterconfig.get('PidFile'), e))
|
||||
.format(pidfile, e))
|
||||
raise
|
||||
f.write(pid)
|
||||
f.close()
|
||||
user, group = user_group(milterconfig.get('UserID'))
|
||||
os.chown(milterconfig.get('PidFile'), user, group)
|
||||
os.chown(pidfile, user, group)
|
||||
else:
|
||||
if milterconfig.get('Syslog'):
|
||||
syslog.syslog('Unable to write pidfle {0}. File exists.'
|
||||
.format(milterconfig.get('PidFile')))
|
||||
.format(pidfile))
|
||||
raise RuntimeError('Unable to write pidfle {0}. File exists.'
|
||||
.format(milterconfig.get('PidFile')))
|
||||
.format(pidfile))
|
||||
return pid
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user