From: Brian Wellington Date: Thu, 25 Feb 2021 20:47:02 +0000 (-0800) Subject: Add custome exceptions. X-Git-Tag: v2.2.0rc1~103^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F646%2Fhead;p=thirdparty%2Fdnspython.git Add custome exceptions. --- diff --git a/dns/zone.py b/dns/zone.py index 3cae8025..86f12982 100644 --- a/dns/zone.py +++ b/dns/zone.py @@ -59,6 +59,26 @@ class UnknownOrigin(BadZone): """The DNS zone's origin is unknown.""" +class UnsupportedDigestScheme(dns.exception.DNSException): + + """The zone digest's scheme is unsupported.""" + + +class UnsupportedDigestHashAlgorithm(dns.exception.DNSException): + + """The zone digest's origin is unsupported.""" + + +class NoDigest(dns.exception.DNSException): + + """The DNS zone has no ZONEMD RRset at its origin.""" + + +class DigestVerificationFailure(dns.exception.DNSException): + + """The ZONEMD digest failed to verify.""" + + class DigestScheme(dns.enum.IntEnum): """ZONEMD Scheme""" @@ -676,9 +696,9 @@ class Zone(dns.transaction.TransactionManager): def _compute_digest(self, hash_algorithm, scheme=DigestScheme.SIMPLE): hashinfo = _digest_hashers.get(hash_algorithm) if not hashinfo: - raise ValueError("unknown digest hash algorithm") + raise UnsupportedDigestHashAlgorithm if scheme != DigestScheme.SIMPLE: - raise ValueError("unknown digest scheme") + raise UnsupportedDigestScheme if self.relativize: origin_name = dns.name.empty @@ -718,7 +738,7 @@ class Zone(dns.transaction.TransactionManager): else: digests = self.get_rdataset(self.origin, dns.rdatatype.ZONEMD) if digests is None: - raise ValueError("no ZONEMD records found") + raise NoDigest for digest in digests: try: computed = self._compute_digest(digest.hash_algorithm, @@ -727,7 +747,7 @@ class Zone(dns.transaction.TransactionManager): return except Exception as e: pass - raise ValueError("no digests verified") + raise DigestVerificationFailure # TransactionManager methods diff --git a/tests/test_zonedigest.py b/tests/test_zonedigest.py index 9e323a8f..f98e5f78 100644 --- a/tests/test_zonedigest.py +++ b/tests/test_zonedigest.py @@ -136,9 +136,15 @@ class ZoneDigestTestCase(unittest.TestCase): zone.verify_digest(rr) self.assertEqual(rr, zone.compute_digest(rr.hash_algorithm)) else: - with self.assertRaises(ValueError): + with self.assertRaises(dns.zone.DigestVerificationFailure): zone.verify_digest(rr) + def test_zonemd_no_digest(self): + zone = dns.zone.from_text(self.simple_example, origin='example') + zone.delete_rdataset(dns.name.empty, 'ZONEMD') + with self.assertRaises(dns.zone.NoDigest): + zone.verify_digest() + sha384_hash = 'ab' * 48 sha512_hash = 'ab' * 64 @@ -150,12 +156,12 @@ class ZoneDigestTestCase(unittest.TestCase): def test_zonemd_unknown_scheme(self): zone = dns.zone.from_text(self.simple_example, origin='example') - with self.assertRaises(ValueError): + with self.assertRaises(dns.zone.UnsupportedDigestScheme): zone.compute_digest(dns.zone.DigestHashAlgorithm.SHA384, 2) def test_zonemd_unknown_hash_algorithm(self): zone = dns.zone.from_text(self.simple_example, origin='example') - with self.assertRaises(ValueError): + with self.assertRaises(dns.zone.UnsupportedDigestHashAlgorithm): zone.compute_digest(5) def test_zonemd_invalid_digest_length(self):