From ca001814abe533f19498d4207b5233eff17549a5 Mon Sep 17 00:00:00 2001 From: Martin Basti Date: Wed, 9 Jul 2014 18:10:50 +0200 Subject: [PATCH] Allow to add host if AAAA record exists http://fedorahosted.org/freeipa/ticket/4164 Reviewed-By: Petr Viktorin --- ipalib/errors.py | 6 +++--- ipalib/util.py | 17 ++++++++++++++--- ipatests/test_xmlrpc/test_host_plugin.py | 2 +- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/ipalib/errors.py b/ipalib/errors.py index 09b7779e9..14e052990 100644 --- a/ipalib/errors.py +++ b/ipalib/errors.py @@ -1119,19 +1119,19 @@ class DefaultGroupError(ExecutionError): class DNSNotARecordError(ExecutionError): """ - **4019** Raised when a hostname is not a DNS A record + **4019** Raised when a hostname is not a DNS A/AAAA record For example: >>> raise DNSNotARecordError() Traceback (most recent call last): ... - DNSNotARecordError: Host does not have corresponding DNS A record + DNSNotARecordError: Host does not have corresponding DNS A/AAAA record """ errno = 4019 - format = _('Host does not have corresponding DNS A record') + format = _('Host does not have corresponding DNS A/AAAA record') class ManagedGroupError(ExecutionError): """ diff --git a/ipalib/util.py b/ipalib/util.py index ef759d8d1..55c90a992 100644 --- a/ipalib/util.py +++ b/ipalib/util.py @@ -96,19 +96,30 @@ def find_modules_in_dir(src_dir): def validate_host_dns(log, fqdn): """ - See if the hostname has a DNS A record. + See if the hostname has a DNS A/AAAA record. """ try: answers = resolver.query(fqdn, rdatatype.A) log.debug( - 'IPA: found %d records for %s: %s' % (len(answers), fqdn, + 'IPA: found %d A records for %s: %s' % (len(answers), fqdn, ' '.join(str(answer) for answer in answers)) ) except DNSException, e: log.debug( 'IPA: DNS A record lookup failed for %s' % fqdn ) - raise errors.DNSNotARecordError() + # A record not found, try to find AAAA record + try: + answers = resolver.query(fqdn, rdatatype.AAAA) + log.debug( + 'IPA: found %d AAAA records for %s: %s' % (len(answers), fqdn, + ' '.join(str(answer) for answer in answers)) + ) + except DNSException, e: + log.debug( + 'IPA: DNS AAAA record lookup failed for %s' % fqdn + ) + raise errors.DNSNotARecordError() def has_soa_or_ns_record(domain): diff --git a/ipatests/test_xmlrpc/test_host_plugin.py b/ipatests/test_xmlrpc/test_host_plugin.py index 6a9e9f17c..725e8900f 100644 --- a/ipatests/test_xmlrpc/test_host_plugin.py +++ b/ipatests/test_xmlrpc/test_host_plugin.py @@ -684,7 +684,7 @@ class test_host(Declarative): desc='Try to add host not in DNS %r without force' % fqdn2, command=('host_add', [fqdn2], {}), expected=errors.DNSNotARecordError( - reason=u'Host does not have corresponding DNS A record'), + reason=u'Host does not have corresponding DNS A/AAAA record'), ),