From 85b2c786bf53eb2882ab0db2b2cc23ec273b4020 Mon Sep 17 00:00:00 2001 From: Martin Basti Date: Aug 11 2014 14:01:38 +0000 Subject: Allow to add host if AAAA record exists http://fedorahosted.org/freeipa/ticket/4164 Reviewed-By: Petr Viktorin --- diff --git a/ipalib/errors.py b/ipalib/errors.py index 09b7779..14e0529 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 ef759d8..55c90a9 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 6a9e9f1..725e890 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'), ),