diff options
author | kpdev <kinpaa@gmail.com> | 2021-05-06 06:56:11 +0200 |
---|---|---|
committer | Erik Olof Gunnar Andersson <eandersson@blizzard.com> | 2023-03-15 22:04:03 +0000 |
commit | 86a8cc5f525f6e2ab5e287c027b3bd18b9fbfbd3 (patch) | |
tree | d570b5af0da49c453bb7087d419dd0506dc35dc3 | |
parent | d27b006aac5735b334cc27ca8d00ff3f06ad9c0a (diff) | |
download | designate-86a8cc5f525f6e2ab5e287c027b3bd18b9fbfbd3.tar.gz |
Validate MX records during recordset create or update14.0.2
If invalid MX record is provided during recordset create command or
valid record is updated to invalid record using recordset set command,
causes recordset creation/updation failure. This leads to zone enter
in ERROR state and all further recordset creation calls fail. Validate
the records within recordset during create or update call.
Closes-Bug: #1927304
Change-Id: I0ace4d6c4ad6a6ee236e3af23805b01345d60a42
-rw-r--r-- | designate/objects/rrdata_mx.py | 3 | ||||
-rw-r--r-- | designate/tests/unit/objects/test_mx_object.py | 13 |
2 files changed, 15 insertions, 1 deletions
diff --git a/designate/objects/rrdata_mx.py b/designate/objects/rrdata_mx.py index caf6dedb..2dbd2cab 100644 --- a/designate/objects/rrdata_mx.py +++ b/designate/objects/rrdata_mx.py @@ -38,6 +38,9 @@ class MX(Record): if repr(int(priority)) != priority: raise ValueError('Value is not an integer') + if not exchange.endswith('.'): + raise ValueError('Domain %s does not end with a dot' % exchange) + self.priority = int(priority) self.exchange = exchange diff --git a/designate/tests/unit/objects/test_mx_object.py b/designate/tests/unit/objects/test_mx_object.py index 589e5be8..bd2d77ab 100644 --- a/designate/tests/unit/objects/test_mx_object.py +++ b/designate/tests/unit/objects/test_mx_object.py @@ -34,7 +34,18 @@ class MXRecordTest(oslotest.base.BaseTestCase): record_set = objects.RecordSet( name='www.example.org.', type='MX', records=objects.RecordList(objects=[ - objects.Record(data='-0 mail.example.org.', + objects.Record(data='-0 mail.example.test.', + status='ACTIVE'), + ]) + ) + + self.assertRaises(InvalidObject, record_set.validate) + + def test_validate_mx_not_fqdn(self): + record_set = objects.RecordSet( + name='www.example.org.', type='MX', + records=objects.RecordList(objects=[ + objects.Record(data='10 mail.example.test', status='ACTIVE'), ]) ) |