diff options
| author | Brian Wellington <bwelling@xbill.org> | 2021-02-25 12:47:02 -0800 |
|---|---|---|
| committer | Brian Wellington <bwelling@xbill.org> | 2021-02-25 12:47:02 -0800 |
| commit | 79d16e7e8845dd8ae9d824d511a7b9c48090bb08 (patch) | |
| tree | 937bcfbdb0821c6c003cdc2997cd5e56aaeeaf33 | |
| parent | 3c278312fbfec85ede7a70215dac3675c520978a (diff) | |
| download | dnspython-79d16e7e8845dd8ae9d824d511a7b9c48090bb08.tar.gz | |
Add custome exceptions.
| -rw-r--r-- | dns/zone.py | 28 | ||||
| -rw-r--r-- | tests/test_zonedigest.py | 12 |
2 files changed, 33 insertions, 7 deletions
diff --git a/dns/zone.py b/dns/zone.py index 3cae802..86f1298 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 9e323a8..f98e5f7 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): |
