Record should work with encoded same as everything else

This commit is contained in:
Ross McFarland
2022-08-20 08:11:24 -07:00
parent 94317879b4
commit 799e1232b3
2 changed files with 13 additions and 9 deletions
+5 -9
View File
@@ -78,7 +78,7 @@ class ValidationError(RecordException):
@classmethod
def build_message(cls, fqdn, reasons):
reasons = '\n - '.join(reasons)
return f'Invalid record {fqdn}\n - {reasons}'
return f'Invalid record {idna_decode(fqdn)}\n - {reasons}'
def __init__(self, fqdn, reasons):
super(Exception, self).__init__(self.build_message(fqdn, reasons))
@@ -105,16 +105,12 @@ class Record(EqualityTupleMixin):
@classmethod
def new(cls, zone, name, data, source=None, lenient=False):
name = str(name).lower()
fqdn = (
f'{idna_decode(name)}.{zone.decoded_name}'
if name
else zone.decoded_name
)
name = idna_encode(str(name))
fqdn = f'{name}.{zone.name}' if name else zone.name
try:
_type = data['type']
except KeyError:
raise Exception(f'Invalid record {fqdn}, missing type')
raise Exception(f'Invalid record {idna_decode(fqdn)}, missing type')
try:
_class = cls._CLASSES[_type]
except KeyError:
@@ -139,7 +135,7 @@ class Record(EqualityTupleMixin):
n = len(fqdn)
if n > 253:
reasons.append(
f'invalid fqdn, "{fqdn}" is too long at {n} '
f'invalid fqdn, "{idna_decode(fqdn)}" is too long at {n} '
'chars, max is 253'
)
for label in name.split('.'):
+8
View File
@@ -59,6 +59,14 @@ class TestIdna(TestCase):
self.assertEqual('zajęzyk.pl.', idna_decode('XN--ZAJZYK-Y4A.PL.'))
self.assertEqual('xn--zajzyk-y4a.pl.', idna_encode('ZajęzyK.Pl.'))
def test_repeated_encode_decoded(self):
self.assertEqual(
'zajęzyk.pl.', idna_decode(idna_decode('xn--zajzyk-y4a.pl.'))
)
self.assertEqual(
'xn--zajzyk-y4a.pl.', idna_encode(idna_encode('zajęzyk.pl.'))
)
class TestIdnaDict(TestCase):
plain = 'testing.tests.'