From 5d9c8d878a3bb6c1f6c2e068cf1f9cbf7ca7174b Mon Sep 17 00:00:00 2001 From: Jeff Engleman Date: Fri, 24 Feb 2023 16:12:36 -0500 Subject: [PATCH 1/2] prepend zone_name with . to ensure it matches on address boundary --- octodns/processor/arpa.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/octodns/processor/arpa.py b/octodns/processor/arpa.py index 491a353..49ffe51 100644 --- a/octodns/processor/arpa.py +++ b/octodns/processor/arpa.py @@ -48,7 +48,7 @@ class AutoArpa(BaseProcessor): zone_name = zone.name n = len(zone_name) + 1 for arpa, fqdns in self._records.items(): - if arpa.endswith(zone_name): + if arpa.endswith(f'.{zone_name}'): name = arpa[:-n] fqdns = sorted(fqdns) record = Record.new( From 3fa9b0ef9dd038394ab58d723f8659ff3e80c698 Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Mon, 27 Feb 2023 09:58:06 -0800 Subject: [PATCH 2/2] Add test for AutoArpa address boundary edge case --- tests/test_octodns_processor_arpa.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/test_octodns_processor_arpa.py b/tests/test_octodns_processor_arpa.py index c2eacbc..b3baa43 100644 --- a/tests/test_octodns_processor_arpa.py +++ b/tests/test_octodns_processor_arpa.py @@ -201,3 +201,29 @@ class TestAutoArpa(TestCase): self.assertEqual('4.3.2.1.in-addr.arpa.', ptr.fqdn) self.assertEqual([record1.fqdn, record2.fqdn], ptr.values) self.assertEqual(3600, ptr.ttl) + + def test_address_boundaries(self): + zone = Zone('unit.tests.', []) + record = Record.new( + zone, 'a', {'ttl': 32, 'type': 'A', 'value': '10.20.3.4'} + ) + zone.add_record(record) + aa = AutoArpa('auto-arpa') + aa.process_source_zone(zone, []) + self.assertEqual( + {'4.3.20.10.in-addr.arpa.': {'a.unit.tests.'}}, aa._records + ) + + # matching zone + arpa = Zone('20.10.in-addr.arpa.', []) + aa.populate(arpa) + self.assertEqual(1, len(arpa.records)) + (ptr,) = arpa.records + self.assertEqual('4.3.20.10.in-addr.arpa.', ptr.fqdn) + self.assertEqual(record.fqdn, ptr.value) + self.assertEqual(3600, ptr.ttl) + + # non-matching boundary edge case + arpa = Zone('0.10.in-addr.arpa.', []) + aa.populate(arpa) + self.assertEqual(0, len(arpa.records))