mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-01-27 16:46:42 -06:00
Check /etc/hosts file in ipa-server-install
There may already be a record in /etc/hosts for chosen IP address which may not be detected under some circumstances. Make sure that /etc/hosts is checked properly. https://fedorahosted.org/freeipa/ticket/1923
This commit is contained in:
parent
77cc5e0246
commit
363c23a37c
@ -796,11 +796,33 @@ def main():
|
||||
|
||||
ip = options.ip_address
|
||||
|
||||
ip_add_to_hosts = False
|
||||
if ip is None:
|
||||
ip = read_ip_address(host_name, fstore)
|
||||
logging.debug("read ip_address: %s\n" % str(ip))
|
||||
ip_add_to_hosts = True
|
||||
|
||||
ip_address = str(ip)
|
||||
|
||||
# check /etc/hosts sanity, add a record when needed
|
||||
hosts_record = record_in_hosts(ip_address)
|
||||
|
||||
if hosts_record is None:
|
||||
if ip_add_to_hosts:
|
||||
print "Adding ["+ip_address+" "+host_name+"] to your /etc/hosts file"
|
||||
fstore.backup_file("/etc/hosts")
|
||||
add_record_to_hosts(ip_address, host_name)
|
||||
else:
|
||||
primary_host = hosts_record[1][0]
|
||||
if primary_host != host_name:
|
||||
print >>sys.stderr, "Error: there is already a record in /etc/hosts for IP address %s:" \
|
||||
% ip_address
|
||||
print >>sys.stderr, hosts_record[0], " ".join(hosts_record[1])
|
||||
print >>sys.stderr, "Chosen hostname %s does not match configured canonical hostname %s" \
|
||||
% (host_name, primary_host)
|
||||
print >>sys.stderr, "Please fix your /etc/hosts file and restart the installation."
|
||||
return 1
|
||||
|
||||
if options.reverse_zone and not bindinstance.verify_reverse_zone(options.reverse_zone, ip):
|
||||
sys.exit(1)
|
||||
|
||||
|
@ -394,7 +394,7 @@ class BindInstance(service.Service):
|
||||
# get a connection to the DS
|
||||
self.ldap_connect()
|
||||
|
||||
if not installutils.record_in_hosts(self.ip_address, self.fqdn):
|
||||
if installutils.record_in_hosts(self.ip_address, self.fqdn) is None:
|
||||
installutils.add_record_to_hosts(self.ip_address, self.fqdn)
|
||||
|
||||
if not dns_container_exists(self.fqdn, self.suffix, realm=self.realm,
|
||||
|
@ -203,7 +203,18 @@ def verify_fqdn(host_name, no_host_dns=False, local_hostname=True):
|
||||
else:
|
||||
print "Warning: Hostname (%s) not found in DNS" % host_name
|
||||
|
||||
def record_in_hosts(ip, host_name, file="/etc/hosts"):
|
||||
def record_in_hosts(ip, host_name=None, file="/etc/hosts"):
|
||||
"""
|
||||
Search record in /etc/hosts - static table lookup for hostnames
|
||||
|
||||
In case of match, returns a tuple of ip address and a list of
|
||||
hostname aliases
|
||||
When no record is matched, None is returned
|
||||
|
||||
:param ip: IP address
|
||||
:param host_name: Optional hostname to search
|
||||
:param file: Optional path to the lookup table
|
||||
"""
|
||||
hosts = open(file, 'r').readlines()
|
||||
for line in hosts:
|
||||
line = line.rstrip('\n')
|
||||
@ -217,13 +228,17 @@ def record_in_hosts(ip, host_name, file="/etc/hosts"):
|
||||
|
||||
if hosts_ip != ip:
|
||||
continue
|
||||
if host_name in names:
|
||||
return True
|
||||
if host_name is not None:
|
||||
if host_name in names:
|
||||
return (hosts_ip, names)
|
||||
else:
|
||||
return None
|
||||
return (hosts_ip, names)
|
||||
except IndexError:
|
||||
print "Warning: Erroneous line '%s' in %s" % (line, file)
|
||||
continue
|
||||
|
||||
return False
|
||||
return None
|
||||
|
||||
def add_record_to_hosts(ip, host_name, file="/etc/hosts"):
|
||||
hosts_fd = open(file, 'r+')
|
||||
@ -242,11 +257,6 @@ def read_ip_address(host_name, fstore):
|
||||
else:
|
||||
break
|
||||
|
||||
ip = str(ip_parsed)
|
||||
print "Adding ["+ip+" "+host_name+"] to your /etc/hosts file"
|
||||
fstore.backup_file("/etc/hosts")
|
||||
add_record_to_hosts(ip, host_name)
|
||||
|
||||
return ip_parsed
|
||||
|
||||
def read_dns_forwarders():
|
||||
|
Loading…
Reference in New Issue
Block a user