mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
IPA installation with --no-host-dns fails
--no-host-dns option should allow installing IPA server on a host without a DNS resolvable name. Update parse_ip_address and verify_ip_address functions has been changed not to return None and print error messages in case of an error, but rather let the Exception be handled by the calling routine. https://fedorahosted.org/freeipa/ticket/1246
This commit is contained in:
@@ -108,7 +108,14 @@ def main():
|
||||
else:
|
||||
hostaddr = resolve_host(api.env.host)
|
||||
ip_address = hostaddr and ipautil.CheckedIPAddress(hostaddr)
|
||||
if not ip_address or not verify_ip_address(ip_address):
|
||||
|
||||
try:
|
||||
verify_ip_address(ip_address)
|
||||
except Exception, e:
|
||||
print "Error: Invalid IP Address %s: %s" % (ip_address, e)
|
||||
ip_address = None
|
||||
|
||||
if not ip_address:
|
||||
if options.unattended:
|
||||
sys.exit("Unable to resolve IP address for host name")
|
||||
else:
|
||||
|
||||
@@ -78,11 +78,6 @@ def parse_options():
|
||||
if cnt > 0 and cnt < num:
|
||||
parser.error("All PKCS#12 options are required if any are used.")
|
||||
|
||||
if options.ip_address:
|
||||
if not installutils.verify_ip_address(options.ip_address, match_local=False):
|
||||
parser.error("Bad IP address")
|
||||
sys.exit(1)
|
||||
|
||||
if len(args) != 1:
|
||||
parser.error("must provide the fully-qualified name of the replica")
|
||||
|
||||
|
||||
@@ -598,14 +598,20 @@ def main():
|
||||
if hostaddr is not None:
|
||||
ip = CheckedIPAddress(hostaddr)
|
||||
else:
|
||||
if not options.ip_address:
|
||||
print "Unable to resolve IP address for host name"
|
||||
ip = options.ip_address
|
||||
if ip is None and options.unattended:
|
||||
sys.exit("Unable to resolve IP address for host name")
|
||||
|
||||
if not verify_ip_address(ip):
|
||||
ip = None
|
||||
if options.unattended:
|
||||
sys.exit(1)
|
||||
if ip:
|
||||
try:
|
||||
verify_ip_address(ip)
|
||||
except Exception, e:
|
||||
print "Error: Invalid IP Address %s: %s" % (ip, e)
|
||||
if options.unattended:
|
||||
sys.exit(1)
|
||||
ip = None
|
||||
|
||||
if options.ip_address:
|
||||
if options.ip_address != ip and not options.setup_dns:
|
||||
@@ -615,8 +621,11 @@ def main():
|
||||
return 1
|
||||
|
||||
ip = options.ip_address
|
||||
if not verify_ip_address(ip):
|
||||
return 1
|
||||
try:
|
||||
verify_ip_address(ip)
|
||||
except Exception, e:
|
||||
print "Error: Invalid IP Address %s: %s" % (ip, e)
|
||||
sys.exit(1)
|
||||
|
||||
if ip is None:
|
||||
ip = read_ip_address(host_name, fstore)
|
||||
|
||||
@@ -108,6 +108,10 @@ def verify_fqdn(host_name,no_host_dns=False):
|
||||
if host_name != host_name.lower():
|
||||
raise RuntimeError("Invalid hostname '%s', must be lower-case." % host_name)
|
||||
|
||||
if no_host_dns:
|
||||
print "Warning: skipping DNS resolution of host", host_name
|
||||
return
|
||||
|
||||
try:
|
||||
hostaddr = socket.getaddrinfo(host_name, None)
|
||||
except:
|
||||
@@ -127,10 +131,6 @@ def verify_fqdn(host_name,no_host_dns=False):
|
||||
if revname != host_name:
|
||||
raise RuntimeError("The host name %s does not match the reverse lookup %s" % (host_name, revname))
|
||||
|
||||
if no_host_dns:
|
||||
print "Warning: skipping DNS resolution of host", host_name
|
||||
return
|
||||
|
||||
# Verify this is NOT a CNAME
|
||||
rs = dnsclient.query(host_name+".", dnsclient.DNS_C_IN, dnsclient.DNS_T_CNAME)
|
||||
if len(rs) != 0:
|
||||
@@ -152,17 +152,13 @@ def verify_fqdn(host_name,no_host_dns=False):
|
||||
print "Warning: Hostname (%s) not found in DNS" % host_name
|
||||
|
||||
def parse_ip_address(addr, match_local=True, parse_netmask=True):
|
||||
try:
|
||||
ip = ipautil.CheckedIPAddress(addr, match_local=match_local, parse_netmask=parse_netmask)
|
||||
if match_local and not ip.is_local():
|
||||
print "Warning: No network interface matches IP address %s" % addr
|
||||
return ip
|
||||
except Exception as e:
|
||||
print "Error: Invalid IP Address %s: %s" % (addr, e)
|
||||
return None
|
||||
ip = ipautil.CheckedIPAddress(addr, match_local=match_local, parse_netmask=parse_netmask)
|
||||
if match_local and not ip.is_local():
|
||||
print "Warning: No network interface matches IP address %s" % addr
|
||||
return ip
|
||||
|
||||
def verify_ip_address(addr, match_local=True, parse_netmask=True):
|
||||
return parse_ip_address(addr, match_local, parse_netmask) is not None
|
||||
ip = parse_ip_address(addr, match_local, parse_netmask)
|
||||
|
||||
def record_in_hosts(ip, host_name, file="/etc/hosts"):
|
||||
hosts = open(file, 'r').readlines()
|
||||
@@ -195,9 +191,12 @@ def add_record_to_hosts(ip, host_name, file="/etc/hosts"):
|
||||
def read_ip_address(host_name, fstore):
|
||||
while True:
|
||||
ip = ipautil.user_input("Please provide the IP address to be used for this host name", allow_empty = False)
|
||||
ip_parsed = parse_ip_address(ip)
|
||||
|
||||
if ip_parsed is not None:
|
||||
try:
|
||||
ip_parsed = parse_ip_address(ip)
|
||||
except Exception, e:
|
||||
print "Error: Invalid IP Address %s: %s" % (ip, e)
|
||||
continue
|
||||
else:
|
||||
break
|
||||
|
||||
ip = str(ip_parsed)
|
||||
@@ -217,8 +216,10 @@ def read_dns_forwarders():
|
||||
allow_empty=True)
|
||||
if not ip:
|
||||
break
|
||||
ip_parsed = parse_ip_address(ip, match_local=False, parse_netmask=False)
|
||||
if ip_parsed is None:
|
||||
try:
|
||||
ip_parsed = parse_ip_address(ip, match_local=False, parse_netmask=False)
|
||||
except Exception, e:
|
||||
print "Error: Invalid IP Address %s: %s" % (ip, e)
|
||||
print "DNS forwarder %s not added" % ip
|
||||
continue
|
||||
|
||||
|
||||
Reference in New Issue
Block a user