Move IP address resolution from ipaserver.install.installutils to ipapython.dnsutil

This is to make it reusable from other modules and to avoid future code
duplication.

https://fedorahosted.org/freeipa/ticket/5710

Reviewed-By: Martin Basti <mbasti@redhat.com>
This commit is contained in:
Petr Spacek
2016-05-17 17:26:20 +02:00
committed by Martin Basti
parent ec49130b94
commit dc405005f5
3 changed files with 76 additions and 25 deletions

View File

@@ -908,7 +908,9 @@ class BindInstance(service.Service):
if fqdn == self.fqdn:
continue
addrs = installutils.resolve_host(fqdn)
addrs = dnsutil.resolve_ip_addresses(fqdn)
# hack, will go away with locations
addrs = [str(addr) for addr in addrs]
root_logger.debug("Adding DNS records for master %s" % fqdn)
self.__add_master_records(fqdn, addrs)
@@ -964,7 +966,9 @@ class BindInstance(service.Service):
if dns_zone_exists(zone, self.api):
addrs = get_fwd_rr(zone, host, api=self.api)
else:
addrs = installutils.resolve_host(fqdn)
addrs = dnsutil.resolve_ip_addresses(fqdn)
# hack, will go away with locations
addrs = [str(addr) for addr in addrs]
self.__add_ipa_ca_records(fqdn, addrs, True)
@@ -1084,7 +1088,9 @@ class BindInstance(service.Service):
if dns_zone_exists(zone, self.api):
addrs = get_fwd_rr(zone, host, api=self.api)
else:
addrs = installutils.resolve_host(fqdn)
addrs = dnsutil.resolve_ip_addresses(fqdn)
# hack, will go away with locations
addrs = [str(addr) for addr in addrs]
self.domain = domain_name
@@ -1172,7 +1178,9 @@ class BindInstance(service.Service):
if dns_zone_exists(zone, self.api):
addrs = get_fwd_rr(zone, host, api=self.api)
else:
addrs = installutils.resolve_host(fqdn)
addrs = dnsutil.resolve_ip_addresses(fqdn)
# hack, will go away with locations
addrs = [str(addr) for addr in addrs]
for addr in addrs:
del_fwd_rr(domain_name, IPA_CA_RECORD, addr, api=self.api)

View File

@@ -55,6 +55,7 @@ from ipaserver.install import certs, service, sysupgrade
from ipaplatform import services
from ipaplatform.paths import paths
from ipaplatform.tasks import tasks
from ipapython import dnsutil
if six.PY3:
unicode = str
@@ -444,24 +445,6 @@ def create_keytab(path, principal):
kadmin("ktadd -k " + path + " " + principal)
def resolve_host(host_name):
try:
addrinfos = socket.getaddrinfo(host_name, None,
socket.AF_UNSPEC, socket.SOCK_STREAM)
ip_list = []
for ai in addrinfos:
ip = ai[4][0]
if ip == "127.0.0.1" or ip == "::1":
raise HostnameLocalhost("The hostname resolves to the localhost address")
ip_list.append(ip)
return ip_list
except socket.error:
return []
def get_host_name(no_host_dns):
"""
Get the current FQDN from the socket and verify that it is valid.
@@ -477,9 +460,10 @@ def get_host_name(no_host_dns):
def get_server_ip_address(host_name, unattended, setup_dns, ip_addresses):
# Check we have a public IP that is associated with the hostname
try:
hostaddr = resolve_host(host_name)
except HostnameLocalhost:
hostaddr = dnsutil.resolve_ip_addresses(host_name)
if hostaddr.intersection(
{ipautil.CheckedIPAddress(ip, allow_loopback=True)
for ip in ['127.0.0.1', '::1']}):
print("The hostname resolves to the localhost address (127.0.0.1/::1)", file=sys.stderr)
print("Please change your /etc/hosts file so that the hostname", file=sys.stderr)
print("resolves to the ip address of your network interface.", file=sys.stderr)