summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Kosek <mkosek@redhat.com>2012-02-03 10:01:27 +0100
committerMartin Kosek <mkosek@redhat.com>2012-02-03 16:25:05 +0100
commit8f17a9ff975a20ad5c8691b11815a45dd11f4707 (patch)
treeb959454ea6ded93916132e94b6e3f67a3488026e
parent16d17f48dfc81f47d91696d8678699f88f10ae4c (diff)
downloadfreeipa.git-8f17a9ff975a20ad5c8691b11815a45dd11f4707.tar.gz
freeipa.git-8f17a9ff975a20ad5c8691b11815a45dd11f4707.tar.xz
freeipa.git-8f17a9ff975a20ad5c8691b11815a45dd11f4707.zip
Fix TXT record parsing
TXT record validation fails to parse the record if it contains spaces. Standard DNS part parser uses a space to divide record parts. A special parser thus need to be implemented for this RR type. https://fedorahosted.org/freeipa/ticket/2306
-rw-r--r--ipalib/plugins/dns.py6
-rw-r--r--tests/test_xmlrpc/test_dns_plugin.py18
2 files changed, 24 insertions, 0 deletions
diff --git a/ipalib/plugins/dns.py b/ipalib/plugins/dns.py
index da4934fc..d51c2c30 100644
--- a/ipalib/plugins/dns.py
+++ b/ipalib/plugins/dns.py
@@ -1003,6 +1003,10 @@ class TXTRecord(DNSRecord):
),
)
+ def _get_part_values(self, value):
+ # ignore any space in TXT record
+ return (value,)
+
_dns_records = (
ARecord(),
AAAARecord(),
@@ -1536,6 +1540,8 @@ class dnsrecord(LDAPObject):
u'dnsdata' : dnsvalue
}
values = param._get_part_values(dnsvalue)
+ if values is None:
+ continue
for val_id, val in enumerate(values):
if val is not None:
dnsentry[parts_params[val_id].name] = val
diff --git a/tests/test_xmlrpc/test_dns_plugin.py b/tests/test_xmlrpc/test_dns_plugin.py
index bded2ad4..f65fe563 100644
--- a/tests/test_xmlrpc/test_dns_plugin.py
+++ b/tests/test_xmlrpc/test_dns_plugin.py
@@ -649,6 +649,24 @@ class test_dns(Declarative):
),
dict(
+ desc='Add TXT record to %r using dnsrecord_add' % (dnsres1),
+ command=('dnsrecord_add', [dnszone1, dnsres1], {'txtrecord': u'foo bar' }),
+ expected={
+ 'value': dnsres1,
+ 'summary': None,
+ 'result': {
+ 'objectclass': [u'top', u'idnsrecord'],
+ 'dn': unicode(dnsres1_dn),
+ 'idnsname': [dnsres1],
+ 'arecord': [u'10.10.0.1'],
+ 'cnamerecord': [u'foo-1.example.com.'],
+ 'kxrecord': [u'1 foo-1'],
+ 'txtrecord': [u'foo bar'],
+ },
+ },
+ ),
+
+ dict(
desc='Delete record %r in zone %r' % (dnsres1, dnszone1),
command=('dnsrecord_del', [dnszone1, dnsres1], {'del_all': True }),
expected={