Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
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")
Ejemplo n.º 4
0
    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"])
Ejemplo n.º 5
0
    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"])
Ejemplo n.º 6
0
    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"])
Ejemplo n.º 7
0
    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"])
Ejemplo n.º 8
0
	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