From 8dc3ac64743ce87ba3f48af6ce201f898d75f8a1 Mon Sep 17 00:00:00 2001 From: Scott Kitterman Date: Fri, 12 Apr 2019 22:31:24 -0400 Subject: [PATCH] Add option to sign for subdomains - Thanks to Sagi for the patch --- dkimpy_milter/__init__.py | 12 ++++++++++++ dkimpy_milter/config.py | 2 ++ 2 files changed, 14 insertions(+) diff --git a/dkimpy_milter/__init__.py b/dkimpy_milter/__init__.py index b58145b..64f12df 100644 --- a/dkimpy_milter/__init__.py +++ b/dkimpy_milter/__init__.py @@ -183,6 +183,8 @@ class dkimMilter(Milter.Base): domain = milterconfig.get('Domain') else: domain = '' + if milterconfig.get('SubDomains'): + self.fdomain = _get_parent_domain(self.fdomain, domain) if ((self.fdomain in domain) and not milterconfig.get('Mode') == 'v' and not self.external_connection): txt = self.fp.read() @@ -325,6 +327,16 @@ class dkimMilter(Milter.Base): ) return +# get parent domain to be signed for if fdomain is a subdomain +def _get_parent_domain(fdomain, domains): + for domain in domains: + rhs = '.'+domain + # compare right hand side of fdomain against .domain + if fdomain[-len(rhs):] == rhs: + # return parent domain on match + return domain + # or return the fdomain itself + return fdomain def main(): # Ugh, but there's no easy way around this. diff --git a/dkimpy_milter/config.py b/dkimpy_milter/config.py index 6198369..efa1aa1 100644 --- a/dkimpy_milter/config.py +++ b/dkimpy_milter/config.py @@ -49,6 +49,7 @@ defaultConfigData = { 'MacroList': '', 'MacroListVerify': '', 'DNSOverride': None, + 'SubDomains': False, 'debugLevel': 0 # Undocumented config item for developer use } @@ -327,6 +328,7 @@ def _readConfigFile(path, configData=None, configGlobal={}): 'PidFile': 'str', 'UserID': 'str', 'Domain': 'dataset', + 'SubDomains': 'bool', 'KeyFile': 'str', 'KeyFileEd25519': 'str', 'Selector': 'str',