def testJunkAfterAll(self): """Ignore any mechanisms after the all mechanism, but warn about it""" rec = "v=spf1 ip4:213.5.39.110 -all MS=83859DAEBD1978F9A7A67D3" domain = "avd.dk" parsed_record = checkdmarc.parse_spf_record(rec, domain) self.assertEqual(len(parsed_record["warnings"]), 1)
def testUppercaseSPFMechanism(self): """Treat uppercase SPF"SPF mechanisms as valid""" spf_record = "v=spf1 IP4:147.75.8.208 -ALL" domain = "example.no" results = checkdmarc.parse_spf_record(spf_record, domain) self.assertEqual(len(results["warnings"]), 0)
def testSplitSPFRecord(self): """Split SPF records are parsed properly""" rec = '"v=spf1 ip4:147.75.8.208 " "include:_spf.salesforce.com -all"' parsed_record = checkdmarc.parse_spf_record(rec, "example.com") self.assertEqual(parsed_record["parsed"]["all"], "fail")
def testSPFMissingARecord(self): """A warning is issued if a SPF record contains a mx mechanism pointing to a domain that has no A records""" spf_record = '"v=spf1 include:_spf.bibsyst.no a mx ~all"' domain = "sogne.folkebibl.no" results = checkdmarc.parse_spf_record(spf_record, domain) self.assertIn("sogne.folkebibl.no does not have any A/AAAA records", results["warnings"])
def testSPFMissingMXRecord(self): """A warning is issued if a SPF record contains a mx mechanism pointing to a domain that has no MX records""" spf_record = '"v=spf1 mx ~all"' domain = "seanthegeek.net" results = checkdmarc.parse_spf_record(spf_record, domain) self.assertIn("{0} does not have any MX records".format(domain), results["warnings"])
def testSPFMissingARecord(self): """A warning is issued if a SPF record contains a mx mechanism pointing to a domain that has no A records""" spf_record = '"v=spf1 a ~all"' domain = "cardinalhealth.net" results = checkdmarc.parse_spf_record(spf_record, domain) self.assertIn("cardinalhealth.net does not have any A/AAAA records", results["warnings"])
def testSPFMissingMXRecord(self): """A warning is issued if a SPF record contains a mx mechanism pointing to a domain that has no MX records""" spf_record = '"v=spf1 mx a mx:mail.hhj.no ~all"' domain = "pario.no" results = checkdmarc.parse_spf_record(spf_record, domain) self.assertIn("mail.hhj.no does not have any MX records", results["warnings"])
def fetchSpf(self): result = OrderedDict([("record", ''), ("valid", True), ("dns_lookups", None)]) try: spf_query = checkdmarc.query_spf_record( self.domain, nameservers=self.nameservers, timeout=self.timeout) result["record"] = spf_query["record"] result["warnings"] = spf_query["warnings"] parsed_spf = checkdmarc.parse_spf_record(result["record"], self.domain, parked=self.parked, nameservers=self.nameservers, timeout=self.timeout) result["dns_lookups"] = parsed_spf["dns_lookups"] result["parsed"] = parsed_spf["parsed"] result["warnings"] += parsed_spf["warnings"] except checkdmarc.SPFError as error: # In case of exception records are blank, so fetching it again """ if not result["record"]: records = [] records = self.queryRecords() for record in records: if record.startswith("v=spf1"): result["record"]+=record+'\n' """ result["error"] = str(error) del result["dns_lookups"] result["valid"] = False if hasattr(error, "data") and error.data: for key in error.data: result[key] = error.data[key] return result