Fixup CNAME placement validation
CNAME's may have child records, but may not have sibling records Change-Id: I50ffb37b20691424f5611dfdc2059536b8fd1688
This commit is contained in:
parent
a96e345e7a
commit
ad80f3f6ea
@ -156,25 +156,6 @@ class Service(rpc_service.Service):
|
|||||||
'share a name with any '
|
'share a name with any '
|
||||||
'other records')
|
'other records')
|
||||||
|
|
||||||
if record_type == 'CNAME':
|
|
||||||
# CNAME's may not have children. Ever.
|
|
||||||
criterion = {'name': '%%.%s' % record_name}
|
|
||||||
records = self.storage_api.find_records(context, domain['id'],
|
|
||||||
criterion=criterion)
|
|
||||||
|
|
||||||
if len(records) > 0:
|
|
||||||
raise exceptions.InvalidRecordLocation('CNAME records may not '
|
|
||||||
'have any child '
|
|
||||||
'records')
|
|
||||||
|
|
||||||
else:
|
|
||||||
# No record may have a CNAME as a parent
|
|
||||||
if self._is_subrecord(context, domain, record_name,
|
|
||||||
{'type': 'CNAME'}):
|
|
||||||
raise exceptions.InvalidRecordLocation('CNAME records may not '
|
|
||||||
'have any child '
|
|
||||||
'records')
|
|
||||||
|
|
||||||
# Duplicate PTR's with the same name are not allowed
|
# Duplicate PTR's with the same name are not allowed
|
||||||
if record_type == 'PTR':
|
if record_type == 'PTR':
|
||||||
criterion = {'name': record_name, 'type': 'PTR'}
|
criterion = {'name': record_name, 'type': 'PTR'}
|
||||||
|
@ -800,12 +800,12 @@ class CentralServiceTest(CentralTestCase):
|
|||||||
self.central_service.create_record(context, domain['id'],
|
self.central_service.create_record(context, domain['id'],
|
||||||
values=values)
|
values=values)
|
||||||
|
|
||||||
def test_create_cname_record_alongside_an_a_record(self):
|
def test_create_cname_record_above_an_a_record(self):
|
||||||
context = self.get_admin_context()
|
context = self.get_admin_context()
|
||||||
domain = self.create_domain()
|
domain = self.create_domain()
|
||||||
|
|
||||||
values = dict(
|
values = dict(
|
||||||
name='www.%s' % domain['name'],
|
name='t.www.%s' % domain['name'],
|
||||||
type='A',
|
type='A',
|
||||||
data='127.0.0.1'
|
data='127.0.0.1'
|
||||||
)
|
)
|
||||||
@ -813,23 +813,49 @@ class CentralServiceTest(CentralTestCase):
|
|||||||
self.central_service.create_record(context, domain['id'],
|
self.central_service.create_record(context, domain['id'],
|
||||||
values=values)
|
values=values)
|
||||||
|
|
||||||
# Attempt to create a CNAME record alongside an A record
|
# Create a CNAME record alongside an A record
|
||||||
with self.assertRaises(exceptions.InvalidRecordLocation):
|
values = dict(
|
||||||
values = dict(
|
name='www.%s' % domain['name'],
|
||||||
name='www.%s' % domain['name'],
|
type='CNAME',
|
||||||
type='CNAME',
|
data='example.org.'
|
||||||
data='example.org.'
|
)
|
||||||
)
|
|
||||||
|
|
||||||
self.central_service.create_record(context, domain['id'],
|
record = self.central_service.create_record(context, domain['id'],
|
||||||
values=values)
|
values=values)
|
||||||
|
|
||||||
def test_create_cname_record_above_an_a_record(self):
|
self.assertIn('id', record)
|
||||||
|
|
||||||
|
def test_create_cname_record_below_an_a_record(self):
|
||||||
context = self.get_admin_context()
|
context = self.get_admin_context()
|
||||||
domain = self.create_domain()
|
domain = self.create_domain()
|
||||||
|
|
||||||
values = dict(
|
values = dict(
|
||||||
name='t.www.%s' % domain['name'],
|
name='t.%s' % domain['name'],
|
||||||
|
type='A',
|
||||||
|
data='127.0.0.1'
|
||||||
|
)
|
||||||
|
|
||||||
|
self.central_service.create_record(context, domain['id'],
|
||||||
|
values=values)
|
||||||
|
|
||||||
|
# Create a CNAME record alongside an A record
|
||||||
|
values = dict(
|
||||||
|
name='www.t.%s' % domain['name'],
|
||||||
|
type='CNAME',
|
||||||
|
data='example.org.'
|
||||||
|
)
|
||||||
|
|
||||||
|
record = self.central_service.create_record(context, domain['id'],
|
||||||
|
values=values)
|
||||||
|
|
||||||
|
self.assertIn('id', record)
|
||||||
|
|
||||||
|
def test_create_cname_record_alongside_an_a_record(self):
|
||||||
|
context = self.get_admin_context()
|
||||||
|
domain = self.create_domain()
|
||||||
|
|
||||||
|
values = dict(
|
||||||
|
name='www.%s' % domain['name'],
|
||||||
type='A',
|
type='A',
|
||||||
data='127.0.0.1'
|
data='127.0.0.1'
|
||||||
)
|
)
|
||||||
@ -872,30 +898,6 @@ class CentralServiceTest(CentralTestCase):
|
|||||||
self.central_service.create_record(context, domain['id'],
|
self.central_service.create_record(context, domain['id'],
|
||||||
values=values)
|
values=values)
|
||||||
|
|
||||||
def test_create_an_a_record_below_a_cname_record(self):
|
|
||||||
context = self.get_admin_context()
|
|
||||||
domain = self.create_domain()
|
|
||||||
|
|
||||||
values = dict(
|
|
||||||
name='www.%s' % domain['name'],
|
|
||||||
type='CNAME',
|
|
||||||
data='example.org.'
|
|
||||||
)
|
|
||||||
|
|
||||||
self.central_service.create_record(context, domain['id'],
|
|
||||||
values=values)
|
|
||||||
|
|
||||||
# Attempt to create a CNAME record alongside an A record
|
|
||||||
with self.assertRaises(exceptions.InvalidRecordLocation):
|
|
||||||
values = dict(
|
|
||||||
name='t.www.%s' % domain['name'],
|
|
||||||
type='A',
|
|
||||||
data='127.0.0.1'
|
|
||||||
)
|
|
||||||
|
|
||||||
self.central_service.create_record(context, domain['id'],
|
|
||||||
values=values)
|
|
||||||
|
|
||||||
def test_create_duplicate_ptr_record(self):
|
def test_create_duplicate_ptr_record(self):
|
||||||
context = self.get_admin_context()
|
context = self.get_admin_context()
|
||||||
domain = self.create_domain(values={'name': '2.0.192.in-addr.arpa.'})
|
domain = self.create_domain(values={'name': '2.0.192.in-addr.arpa.'})
|
||||||
|
Loading…
Reference in New Issue
Block a user