From 7979d3ae3b8c69d5c1c370adee7f588c69467bab Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Sun, 27 Aug 2017 17:29:56 +0200 Subject: [PATCH] Handle new DKIM record format --- src/yunohost/domain.py | 60 +++++++++++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 10 deletions(-) diff --git a/src/yunohost/domain.py b/src/yunohost/domain.py index f17cc75f6..f8c185dba 100644 --- a/src/yunohost/domain.py +++ b/src/yunohost/domain.py @@ -415,17 +415,57 @@ def _get_DKIM(domain): with open(DKIM_file) as f: dkim_content = f.read() - dkim = re.match(( - r'^(?P[a-z_\-\.]+)[\s]+([0-9]+[\s]+)?IN[\s]+TXT[\s]+[^"]*' - '(?=.*(;[\s]*|")v=(?P[^";]+))' - '(?=.*(;[\s]*|")k=(?P[^";]+))' - '(?=.*(;[\s]*|")p=(?P

[^";]+))'), dkim_content, re.M | re.S - ) + # Gotta manage two formats : + # + # Legacy + # ----- + # + # mail._domainkey IN TXT ( "v=DKIM1; k=rsa; " + # "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCYhnvJ+JgF9tfVbUVy6L20b2IVHygZD1GjY6k+/je+3y3C9BzPAlEitL4s2vkQpPfAevw8P6uE7s1usCa/tnTzmq4r6Q/9YRf+Wx5e79XuIY5/ZKJw1YKkDWRlGzpenu8i+6kssaPqPmtmQaYuoOwTlcpXcN9qKNIodDsaWOxBwIDAQAB" ) + # + # New + # ------ + # mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " + # "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxWIw/R6QIL7nbJr+yX4cS8TfFx1POMvnzbsDWAFG5U4aPqLwCkJNqrum1hG9rzCb43pGkNy5JNAh0tTZpxq+S1kBAu+DAOSHgbYVg2Tr6zTm9YNL1n/thjKB9U/dyaCzWnxlMFJYkXNlDICtSSf47ZWqcrurkAOfmtmGYQivoz8ipXMvou4t22W9DbZR+XpPbtc3RkCKK32E8O" + # "02OT9PHbsBCOakb+W1vkocVZpZo78eu5Q2phOntE9Vl2MXtd54+TEdWv6zPcGrHrF9aazEuGcNQwSUgJaHlEceT2u8X+sliwIr0on3Om2NMaTDkPgZzg2poQIDPkyxDQire7jGBwIDAQAB" + # ) + + is_legacy_format = " h=sha256; " not in dkim_content + + # Legacy DKIM format + if is_legacy_format: + dkim = re.match(( + r'^(?P[a-z_\-\.]+)[\s]+([0-9]+[\s]+)?IN[\s]+TXT[\s]+' + '[^"]*"v=(?P[^";]+);' + '[\s"]*k=(?P[^";]+);' + '[\s"]*p=(?P

[^";]+)'), dkim_content, re.M | re.S + ) + else: + dkim = re.match(( + r'^(?P[a-z_\-\.]+)[\s]+([0-9]+[\s]+)?IN[\s]+TXT[\s]+' + '[^"]*"v=(?P[^";]+);' + '[\s"]*h=(?P[^";]+);' + '[\s"]*k=(?P[^";]+);' + '[\s"]*p=(?P

[^";]+)' + '[\s"]*(?P[^";]+)'), dkim_content, re.M | re.S + ) if not dkim: return (None, None) - return ( - dkim.group('host'), - '"v={v}; k={k}; p={p}"'.format(v=dkim.group('v'), k=dkim.group('k'), p=dkim.group('p')) - ) + if is_legacy_format: + return ( + dkim.group('host'), + '"v={v}; k={k}; p={p}"'.format(v=dkim.group('v'), + k=dkim.group('k'), + p=dkim.group('p')) + ) + else: + return ( + dkim.group('host'), + '"v={v}; h={h}; k={k}; p={p}"'.format(v=dkim.group('v'), + h=dkim.group('h'), + k=dkim.group('k'), + p=dkim.group('p') + +dkim.group('p2')) + )