summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkpdev <kinpaa@gmail.com>2021-05-06 06:56:11 +0200
committerErik Olof Gunnar Andersson <eandersson@blizzard.com>2023-03-15 22:04:03 +0000
commit86a8cc5f525f6e2ab5e287c027b3bd18b9fbfbd3 (patch)
treed570b5af0da49c453bb7087d419dd0506dc35dc3
parentd27b006aac5735b334cc27ca8d00ff3f06ad9c0a (diff)
downloaddesignate-14.0.2.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.py3
-rw-r--r--designate/tests/unit/objects/test_mx_object.py13
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'),
])
)