summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Kosek <mkosek@redhat.com>2012-02-03 14:25:53 +0100
committerMartin Kosek <mkosek@redhat.com>2012-02-03 16:26:01 +0100
commit4ae3a605de405a6d1aa736da420e5ce28fc31157 (patch)
treec1febafbe91f04917624f65edaeda19523a77f50
parent43c3fbc3b06d5bc453f0178d05f7bc63ee2dc592 (diff)
downloadfreeipa.git-4ae3a605de405a6d1aa736da420e5ce28fc31157.tar.gz
freeipa.git-4ae3a605de405a6d1aa736da420e5ce28fc31157.tar.xz
freeipa.git-4ae3a605de405a6d1aa736da420e5ce28fc31157.zip
Add SRV record target validator
Add missing SRV record target validator to filter out possible user errors. https://fedorahosted.org/freeipa/ticket/2308
-rw-r--r--ipalib/plugins/dns.py7
-rw-r--r--tests/test_xmlrpc/test_dns_plugin.py9
2 files changed, 16 insertions, 0 deletions
diff --git a/ipalib/plugins/dns.py b/ipalib/plugins/dns.py
index d296f66d..a975d4db 100644
--- a/ipalib/plugins/dns.py
+++ b/ipalib/plugins/dns.py
@@ -888,6 +888,12 @@ class RPRecord(DNSRecord):
rfc = 1183
supported = False
+def _srv_target_validator(ugettext, value):
+ if value == u'.':
+ # service not available
+ return
+ return _domain_name_validator(ugettext, value)
+
class SRVRecord(DNSRecord):
rrtype = 'SRV'
rfc = 2782
@@ -908,6 +914,7 @@ class SRVRecord(DNSRecord):
maxvalue=65535,
),
Str('target',
+ _srv_target_validator,
label=_('Target'),
doc=_('The domain name of the target host or \'.\' if the service is decidedly not available at this domain'),
),
diff --git a/tests/test_xmlrpc/test_dns_plugin.py b/tests/test_xmlrpc/test_dns_plugin.py
index b177b9d0..9d83d924 100644
--- a/tests/test_xmlrpc/test_dns_plugin.py
+++ b/tests/test_xmlrpc/test_dns_plugin.py
@@ -566,6 +566,15 @@ class test_dns(Declarative):
),
dict(
+ desc='Try to add invalid SRV record via parts to zone %r using dnsrecord_add' % (dnszone1),
+ command=('dnsrecord_add', [dnszone1, u'_foo._tcp'], {'srv_part_priority': 0,
+ 'srv_part_weight' : 0,
+ 'srv_part_port' : 123,
+ 'srv_part_target' : u'foo bar'}),
+ expected=errors.ValidationError(name='srv_part_target', error=''),
+ ),
+
+ dict(
desc='Add SRV record to zone %r using dnsrecord_add' % (dnszone1),
command=('dnsrecord_add', [dnszone1, u'_foo._tcp'], {'srvrecord': u"0 100 1234 %s" % dnszone1_mname}),
expected={