mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Move check_zone_overlap() from ipapython.ipautil to ipapython.dnsutil
This is preparatory work to avoid (future) cyclic import between ipapython.dnsutil and ipapython.ipautil. https://fedorahosted.org/freeipa/ticket/5710 Reviewed-By: Martin Basti <mbasti@redhat.com>
This commit is contained in:
parent
da71e7e9de
commit
0c75df4bf3
@ -64,7 +64,8 @@ from ipalib.util import (normalize_zonemgr,
|
||||
validate_dnssec_zone_forwarder_step2,
|
||||
verify_host_resolvable)
|
||||
from ipapython.dn import DN
|
||||
from ipapython.ipautil import CheckedIPAddress, check_zone_overlap
|
||||
from ipapython.ipautil import CheckedIPAddress
|
||||
from ipapython.dnsutil import check_zone_overlap
|
||||
from ipapython.dnsutil import DNSName
|
||||
from ipapython.dnsutil import related_to_auto_empty_zone
|
||||
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
import dns.name
|
||||
import dns.exception
|
||||
import dns.resolver
|
||||
import copy
|
||||
|
||||
import six
|
||||
@ -228,3 +229,37 @@ def inside_auto_empty_zone(name):
|
||||
if name.is_subdomain(aez):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def check_zone_overlap(zone, raise_on_error=True):
|
||||
root_logger.info("Checking DNS domain %s, please wait ..." % zone)
|
||||
if not isinstance(zone, DNSName):
|
||||
zone = DNSName(zone).make_absolute()
|
||||
|
||||
# automatic empty zones always exist so checking them is pointless,
|
||||
# do not report them to avoid meaningless error messages
|
||||
if is_auto_empty_zone(zone):
|
||||
return
|
||||
|
||||
try:
|
||||
containing_zone = dns.resolver.zone_for_name(zone)
|
||||
except dns.exception.DNSException as e:
|
||||
msg = ("DNS check for domain %s failed: %s." % (zone, e))
|
||||
if raise_on_error:
|
||||
raise ValueError(msg)
|
||||
else:
|
||||
root_logger.warning(msg)
|
||||
return
|
||||
|
||||
if containing_zone == zone:
|
||||
try:
|
||||
ns = [ans.to_text() for ans in dns.resolver.query(zone, 'NS')]
|
||||
except dns.exception.DNSException as e:
|
||||
root_logger.debug("Failed to resolve nameserver(s) for domain"
|
||||
" {0}: {1}".format(zone, e))
|
||||
ns = []
|
||||
|
||||
msg = u"DNS zone {0} already exists in DNS".format(zone)
|
||||
if ns:
|
||||
msg += u" and is handled by server(s): {0}".format(', '.join(ns))
|
||||
raise ValueError(msg)
|
||||
|
@ -53,7 +53,6 @@ from ipapython.ipa_log_manager import root_logger
|
||||
from ipapython import config
|
||||
from ipaplatform.paths import paths
|
||||
from ipapython.dn import DN
|
||||
from ipapython.dnsutil import DNSName, is_auto_empty_zone
|
||||
|
||||
SHARE_DIR = paths.USR_SHARE_IPA_DIR
|
||||
PLUGINS_SHARE_DIR = paths.IPA_PLUGINS
|
||||
@ -1018,40 +1017,6 @@ def reverse_record_exists(ip_address):
|
||||
return True
|
||||
|
||||
|
||||
def check_zone_overlap(zone, raise_on_error=True):
|
||||
root_logger.info("Checking DNS domain %s, please wait ..." % zone)
|
||||
if not isinstance(zone, DNSName):
|
||||
zone = DNSName(zone).make_absolute()
|
||||
|
||||
# automatic empty zones always exist so checking them is pointless,
|
||||
# do not report them to avoid meaningless error messages
|
||||
if is_auto_empty_zone(zone):
|
||||
return
|
||||
|
||||
try:
|
||||
containing_zone = resolver.zone_for_name(zone)
|
||||
except DNSException as e:
|
||||
msg = ("DNS check for domain %s failed: %s." % (zone, e))
|
||||
if raise_on_error:
|
||||
raise ValueError(msg)
|
||||
else:
|
||||
root_logger.warning(msg)
|
||||
return
|
||||
|
||||
if containing_zone == zone:
|
||||
try:
|
||||
ns = [ans.to_text() for ans in resolver.query(zone, 'NS')]
|
||||
except DNSException as e:
|
||||
root_logger.debug("Failed to resolve nameserver(s) for domain"
|
||||
" {0}: {1}".format(zone, e))
|
||||
ns = []
|
||||
|
||||
msg = u"DNS zone {0} already exists in DNS".format(zone)
|
||||
if ns:
|
||||
msg += u" and is handled by server(s): {0}".format(', '.join(ns))
|
||||
raise ValueError(msg)
|
||||
|
||||
|
||||
def config_replace_variables(filepath, replacevars=dict(), appendvars=dict()):
|
||||
"""
|
||||
Take a key=value based configuration file, and write new version
|
||||
|
@ -34,6 +34,7 @@ from ipaserver.install import installutils
|
||||
from ipaserver.install import service
|
||||
from ipaserver.install.cainstance import IPA_CA_RECORD
|
||||
from ipapython import sysrestore, ipautil, ipaldap
|
||||
from ipapython import dnsutil
|
||||
from ipapython.ipa_log_manager import root_logger
|
||||
from ipapython.dn import DN
|
||||
import ipalib
|
||||
@ -293,7 +294,7 @@ def read_reverse_zone(default, ip_address, allow_zone_overlap=False):
|
||||
continue
|
||||
if not allow_zone_overlap:
|
||||
try:
|
||||
ipautil.check_zone_overlap(zone, raise_on_error=False)
|
||||
dnsutil.check_zone_overlap(zone, raise_on_error=False)
|
||||
except ValueError as e:
|
||||
root_logger.error("Reverse zone %s will not be used: %s"
|
||||
% (zone, e))
|
||||
@ -313,7 +314,7 @@ def get_auto_reverse_zones(ip_addresses):
|
||||
continue
|
||||
default_reverse = get_reverse_zone_default(ip)
|
||||
try:
|
||||
ipautil.check_zone_overlap(default_reverse)
|
||||
dnsutil.check_zone_overlap(default_reverse)
|
||||
except ValueError:
|
||||
root_logger.info("Reverse zone %s for IP address %s already exists"
|
||||
% (default_reverse, ip))
|
||||
@ -460,7 +461,7 @@ def check_reverse_zones(ip_addresses, reverse_zones, options, unattended,
|
||||
# isn't the zone managed by someone else
|
||||
if not options.allow_zone_overlap:
|
||||
try:
|
||||
ipautil.check_zone_overlap(rz)
|
||||
dnsutil.check_zone_overlap(rz)
|
||||
except ValueError as e:
|
||||
msg = "Reverse zone %s will not be used: %s" % (rz, e)
|
||||
if unattended:
|
||||
|
@ -118,7 +118,7 @@ def install_check(standalone, api, replica, options, hostname):
|
||||
domain = dnsutil.DNSName(util.normalize_zone(api.env.domain))
|
||||
print("Checking DNS domain %s, please wait ..." % domain)
|
||||
try:
|
||||
ipautil.check_zone_overlap(domain, raise_on_error=False)
|
||||
dnsutil.check_zone_overlap(domain, raise_on_error=False)
|
||||
except ValueError as e:
|
||||
if options.force or options.allow_zone_overlap:
|
||||
root_logger.warning("%s Please make sure that the domain is "
|
||||
@ -129,7 +129,7 @@ def install_check(standalone, api, replica, options, hostname):
|
||||
|
||||
for reverse_zone in options.reverse_zones:
|
||||
try:
|
||||
ipautil.check_zone_overlap(reverse_zone)
|
||||
dnsutil.check_zone_overlap(reverse_zone)
|
||||
except ValueError as e:
|
||||
if options.force or options.allow_zone_overlap:
|
||||
root_logger.warning(e.message)
|
||||
|
@ -14,7 +14,7 @@ from ipapython.install import common, core
|
||||
from ipapython.install.core import Knob
|
||||
from ipalib.util import validate_domain_name
|
||||
from ipaserver.install import bindinstance
|
||||
from ipapython.ipautil import check_zone_overlap
|
||||
from ipapython.dnsutil import check_zone_overlap
|
||||
|
||||
if six.PY3:
|
||||
unicode = str
|
||||
|
Loading…
Reference in New Issue
Block a user