From 37d40c01ba0f01ed0e711ffc4935e0acc02ae2d8 Mon Sep 17 00:00:00 2001 From: Sean Whalen Date: Sun, 7 Oct 2018 17:54:25 -0400 Subject: [PATCH] Still parse if spf is missing from auth_results --- parsedmarc/__init__.py | 35 ++++++++------- ...ample.com!1536105600!1536191999.xml.sample | 44 +++++++++++++++++++ 2 files changed, 64 insertions(+), 15 deletions(-) create mode 100644 samples/addisonfoods.com!example.com!1536105600!1536191999.xml.sample diff --git a/parsedmarc/__init__.py b/parsedmarc/__init__.py index 0ca2bee..411bb11 100644 --- a/parsedmarc/__init__.py +++ b/parsedmarc/__init__.py @@ -393,23 +393,28 @@ def _parse_report_record(record, nameservers=None, timeout=2.0): new_record["auth_results"] = OrderedDict([("dkim", []), ("spf", [])]) if record["auth_results"] is not None: auth_results = record["auth_results"].copy() + if "spf" not in auth_results: + auth_results["spf"] = [] + if "dkim" not in auth_results: + auth_results["dkim"] = [] else: auth_results = new_record["auth_results"].copy() - if "dkim" in auth_results: - if type(auth_results["dkim"]) != list: - auth_results["dkim"] = [auth_results["dkim"]] - for result in auth_results["dkim"]: - if "domain" in result and result["domain"] is not None: - new_result = OrderedDict([("domain", result["domain"])]) - if "selector" in result and result["selector"] is not None: - new_result["selector"] = result["selector"] - else: - new_result["selector"] = "none" - if "result" in result and result["result"] is not None: - new_result["result"] = result["result"] - else: - new_result["result"] = "none" - new_record["auth_results"]["dkim"].append(new_result) + + if type(auth_results["dkim"]) != list: + auth_results["dkim"] = [auth_results["dkim"]] + for result in auth_results["dkim"]: + if "domain" in result and result["domain"] is not None: + new_result = OrderedDict([("domain", result["domain"])]) + if "selector" in result and result["selector"] is not None: + new_result["selector"] = result["selector"] + else: + new_result["selector"] = "none" + if "result" in result and result["result"] is not None: + new_result["result"] = result["result"] + else: + new_result["result"] = "none" + new_record["auth_results"]["dkim"].append(new_result) + if type(auth_results["spf"]) != list: auth_results["spf"] = [auth_results["spf"]] for result in auth_results["spf"]: diff --git a/samples/addisonfoods.com!example.com!1536105600!1536191999.xml.sample b/samples/addisonfoods.com!example.com!1536105600!1536191999.xml.sample new file mode 100644 index 0000000..8b7b0fe --- /dev/null +++ b/samples/addisonfoods.com!example.com!1536105600!1536191999.xml.sample @@ -0,0 +1,44 @@ + + + 1.0 + + addisonfoods.com + postmaster@addisonfoods.com + 3ceb5548498640beaeb47327e202b0b9 + + 1536105600 + 1536191999 + + + + example.com + r + r +

none

+ none + 100 + 0 +
+ + + 109.203.100.17 + 1 + + none + fail + fail + + + + example.com + example.com + + + + toptierhighticket.club + default + pass + + + +