From 9d5316ca0e6c573db6a0d3aeaad4e23815e8e301 Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor Date: Thu, 21 Feb 2019 15:41:35 -0500 Subject: [PATCH] Handle defaults for Socket differently We want to be able to select the default for Socket differently in the future. This change augments the API for dkimpy_milter.util.own_socketfile() by adding an optional sockname argument. This is a backward-compatible change. If we aren't committed to API stability for this function, we could make a more invasive change that would probably be a more reasonable API going forward, but this is probably good enough. --- dkimpy_milter/__init__.py | 4 +++- dkimpy_milter/config.py | 2 +- dkimpy_milter/util.py | 7 +++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/dkimpy_milter/__init__.py b/dkimpy_milter/__init__.py index bcdf2a7..3f9eef9 100644 --- a/dkimpy_milter/__init__.py +++ b/dkimpy_milter/__init__.py @@ -354,7 +354,9 @@ def main(): Milter.set_flags(Milter.CHGHDRS + Milter.ADDHDRS) miltername = 'dkimpy-filter' socketname = milterconfig.get('Socket') - own_socketfile(milterconfig) + if socketname is None: + socketname = 'local:/var/run/dkimpy-milter/dkimpy-milter.sock' + own_socketfile(milterconfig, socketname) drop_privileges(milterconfig) sys.stdout.flush() Milter.runmilter(miltername, socketname, 240) diff --git a/dkimpy_milter/config.py b/dkimpy_milter/config.py index bf6551a..c59ce55 100644 --- a/dkimpy_milter/config.py +++ b/dkimpy_milter/config.py @@ -39,7 +39,7 @@ defaultConfigData = { 'SyslogFacility': 'mail', 'UMask': 0o07, 'Mode': 'sv', - 'Socket': 'local:/var/run/dkimpy-milter/dkimpy-milter.sock', + 'Socket': None, 'PidFile': '/var/run/dkimpy-milter/dkimpy-milter.pid', 'UserID': 'dkimpy-milter', 'Canonicalization': 'relaxed/simple', diff --git a/dkimpy_milter/util.py b/dkimpy_milter/util.py index 17857d6..1d5788d 100644 --- a/dkimpy_milter/util.py +++ b/dkimpy_milter/util.py @@ -146,12 +146,15 @@ def write_pid(milterconfig): return pid -def own_socketfile(milterconfig): +def own_socketfile(milterconfig, sockname=None): """If socket is Unix socket, chown to UserID before dropping privileges""" import os user, group = user_group(milterconfig.get('UserID')) offset = None - sockname = milterconfig.get('Socket') + if sockname is None: + sockname = milterconfig.get('Socket') + if sockname is None: + return if sockname[:1] == '/': offset = 0 elif sockname[:6] == "local:":