From 279dbec2722bd9836b1adf76db5136aeb346421e Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Tue, 18 Aug 2020 06:28:21 -0700 Subject: [PATCH] node replace_rdataset() should not permit rrsets --- dns/node.py | 4 ++++ tests/test_zone.py | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/dns/node.py b/dns/node.py index b7e21b54..b1baf27b 100644 --- a/dns/node.py +++ b/dns/node.py @@ -180,6 +180,10 @@ class Node: if not isinstance(replacement, dns.rdataset.Rdataset): raise ValueError('replacement is not an rdataset') + if isinstance(replacement, dns.rrset.RRset): + # RRsets are not good replacements as the match() method + # is not compatible. + replacement = replacement.to_rdataset() self.delete_rdataset(replacement.rdclass, replacement.rdtype, replacement.covers) self.rdatasets.append(replacement) diff --git a/tests/test_zone.py b/tests/test_zone.py index a301cb25..78fbb28c 100644 --- a/tests/test_zone.py +++ b/tests/test_zone.py @@ -792,5 +792,14 @@ class ZoneTestCase(unittest.TestCase): z2 = dns.zone.from_text(out, 'example.', relativize=True) self.assertEqual(z, z2) + def testNodeReplaceRdatasetConvertsRRsets(self): + node = dns.node.Node() + rrs = dns.rrset.from_text('foo', 300, 'in', 'a', '10.0.0.1') + node.replace_rdataset(rrs) + rds = node.find_rdataset(dns.rdataclass.IN, dns.rdatatype.A) + self.assertEqual(rds, rrs) + self.assertTrue(rds is not rrs) + self.assertFalse(isinstance(rds, dns.rrset.RRset)) + if __name__ == '__main__': unittest.main() -- 2.47.3