summaryrefslogtreecommitdiffstats
path: root/ipalib/plugins/dns.py
diff options
context:
space:
mode:
Diffstat (limited to 'ipalib/plugins/dns.py')
-rw-r--r--ipalib/plugins/dns.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/ipalib/plugins/dns.py b/ipalib/plugins/dns.py
index 192cc051..1bf75427 100644
--- a/ipalib/plugins/dns.py
+++ b/ipalib/plugins/dns.py
@@ -18,9 +18,12 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+from __future__ import absolute_import
+
import netaddr
import time
import re
+import dns.name
from ipalib.request import context
from ipalib import api, errors, output
@@ -1488,7 +1491,11 @@ def zone_is_reverse(zone_name):
return False
-def check_ns_rec_resolvable(name):
+def check_ns_rec_resolvable(zone, name):
+ if not name.endswith('.'):
+ # this is a DNS name relative to the zone
+ zone = dns.name.from_text(zone)
+ name = unicode(dns.name.from_text(name, origin=zone))
try:
return api.Command['dns_resolve'](name)
except errors.NotFound:
@@ -1707,12 +1714,12 @@ class dnszone_add(LDAPCreate):
raise errors.ValidationError(name='name-server',
error=unicode(_("Nameserver address is not a fully qualified domain name")))
- if not 'ip_address' in options and not options['force']:
- check_ns_rec_resolvable(nameserver)
-
if nameserver[-1] != '.':
nameserver += '.'
+ if not 'ip_address' in options and not options['force']:
+ check_ns_rec_resolvable(keys[0], nameserver)
+
entry_attrs['nsrecord'] = nameserver
entry_attrs['idnssoamname'] = nameserver
return dn
@@ -1878,7 +1885,8 @@ class dnsrecord(LDAPObject):
nsrecords = entry_attrs.get('nsrecord')
if options.get('force', False) or nsrecords is None:
return
- map(check_ns_rec_resolvable, nsrecords)
+ for nsrecord in nsrecords:
+ check_ns_rec_resolvable(keys[0], nsrecord)
def _ptrrecord_pre_callback(self, ldap, dn, entry_attrs, *keys, **options):
ptrrecords = entry_attrs.get('ptrrecord')