diff --git a/.changelog/464ca6c3ae0d45f3a8ba945276bf6ce2.md b/.changelog/464ca6c3ae0d45f3a8ba945276bf6ce2.md new file mode 100644 index 0000000..39052d2 --- /dev/null +++ b/.changelog/464ca6c3ae0d45f3a8ba945276bf6ce2.md @@ -0,0 +1,4 @@ +--- +type: minor +--- +Quote NAPTR 'flags', 'service' and 'regexp' values as required by RFC2915 \ No newline at end of file diff --git a/octodns/record/naptr.py b/octodns/record/naptr.py index 6469311..7d4a9a3 100644 --- a/octodns/record/naptr.py +++ b/octodns/record/naptr.py @@ -136,7 +136,11 @@ class NaptrValue(EqualityTupleMixin, dict): @property def rdata_text(self): - return f'{self.order} {self.preference} {self.flags} {self.service} {self.regexp} {self.replacement}' + # RFC 3403 requires flags, service, and regexp to be quoted character-strings + flags = self.flags or '' + service = self.service or '' + regexp = self.regexp or '' + return f'{self.order} {self.preference} "{flags}" "{service}" "{regexp}" {self.replacement}' def template(self, params): if ( diff --git a/tests/test_octodns_record_naptr.py b/tests/test_octodns_record_naptr.py index 3c05550..6601b90 100644 --- a/tests/test_octodns_record_naptr.py +++ b/tests/test_octodns_record_naptr.py @@ -382,7 +382,7 @@ class TestRecordNaptr(TestCase): self.assertEqual('service', a.values[0].service) self.assertEqual('regexp', a.values[0].regexp) self.assertEqual('replacement', a.values[0].replacement) - s = '1 2 S service regexp replacement' + s = '1 2 "S" "service" "regexp" replacement' self.assertEqual(s, a.values[0].rdata_text) def test_validation(self):