From 7f7bde3145be680916cd2eb35b0f694f7866fc0a Mon Sep 17 00:00:00 2001 From: Sean Whalen Date: Tue, 21 Aug 2018 15:33:07 -0400 Subject: [PATCH] 3.8.0 - Parse forensic reports if they are base64-encoded --- CHANGELOG.md | 3 ++- parsedmarc/__init__.py | 13 ++++++++++--- setup.py | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92b3950..5d91bcc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,9 @@ -3.7.4 +3.8.0 ----- - Use `.` instead of `/` as the IMAP folder hierarchy separator when `/` does not work - fixes dovecot support (#5) +- Fix parsing of base64-encoded forensic report data 3.7.3 ----- diff --git a/parsedmarc/__init__.py b/parsedmarc/__init__.py index 35f50b5..0201aa1 100644 --- a/parsedmarc/__init__.py +++ b/parsedmarc/__init__.py @@ -43,7 +43,7 @@ import imapclient.exceptions import dateparser import mailparser -__version__ = "3.7.4" +__version__ = "3.8.0" logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) @@ -975,7 +975,14 @@ def parse_report_email(input_, nameservers=None, timeout=6.0): if type(payload) == list: payload = payload[0].__str__() if content_type == "message/feedback-report": - feedback_report = payload + try: + feedback_report = b64decode(payload).__str__() + feedback_report = feedback_report.lstrip("b'").rstrip("'") + feedback_report = feedback_report.replace("\\r", "\r") + feedback_report = feedback_report.replace("\\n", "\n") + except (ValueError, TypeError, binascii.Error): + feedback_report = payload + elif content_type == "text/rfc822-headers": sample = payload sample_headers_only = True @@ -1088,7 +1095,7 @@ def get_dmarc_reports_from_inbox(host, user, password, aggregate_report_msg_uids = [] forensic_report_msg_uids = [] aggregate_reports_folder = "{0}/Aggregate".format(archive_folder) - forensic_reports_folder = "{0}Forensic".format(archive_folder) + forensic_reports_folder = "{0}/Forensic".format(archive_folder) try: server = imapclient.IMAPClient(host, use_uid=True) diff --git a/setup.py b/setup.py index e92da9c..688281c 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ from setuptools import setup from codecs import open from os import path -__version__ = "3.7.4" +__version__ = "3.8.0" description = "A Python package and CLI for parsing aggregate and " \ "forensic DMARC reports"