From 80b4b3d44bbbe745e644b56c5371ef5f4cda6600 Mon Sep 17 00:00:00 2001 From: Jan Cholasta Date: Fri, 27 May 2011 20:17:22 +0200 Subject: Parse netmasks in IP addresses passed to server install. ticket 1212 --- install/tools/ipa-dns-install | 9 ++++++--- install/tools/ipa-replica-install | 6 +++++- install/tools/ipa-replica-prepare | 17 +++++++++-------- install/tools/ipa-server-install | 36 +++++++++++++++++------------------- 4 files changed, 37 insertions(+), 31 deletions(-) (limited to 'install/tools') diff --git a/install/tools/ipa-dns-install b/install/tools/ipa-dns-install index a76329767..e8379191a 100755 --- a/install/tools/ipa-dns-install +++ b/install/tools/ipa-dns-install @@ -37,9 +37,10 @@ def parse_options(): sensitive=True, help="admin password") parser.add_option("-d", "--debug", dest="debug", action="store_true", default=False, help="print debugging information") - parser.add_option("--ip-address", dest="ip_address", help="Master Server IP Address") + parser.add_option("--ip-address", dest="ip_address", + type="ipnet", help="Master Server IP Address") parser.add_option("--forwarder", dest="forwarders", action="append", - help="Add a DNS forwarder") + type="ipaddr", help="Add a DNS forwarder") parser.add_option("--no-forwarders", dest="no_forwarders", action="store_true", default=False, help="Do not add any DNS forwarders, use root servers instead") parser.add_option("--no-reverse", dest="no_reverse", @@ -105,12 +106,14 @@ def main(): if options.ip_address: ip_address = options.ip_address else: - ip_address = resolve_host(api.env.host) + hostaddr = resolve_host(api.env.host) + ip_address = hostaddr and ipautil.CheckedIPAddress(hostaddr) if not ip_address or not verify_ip_address(ip_address): if options.unattended: sys.exit("Unable to resolve IP address for host name") else: ip_address = read_ip_address(api.env.host, fstore) + ip_address = str(ip_address) logging.debug("will use ip_address: %s\n", ip_address) if options.no_forwarders: diff --git a/install/tools/ipa-replica-install b/install/tools/ipa-replica-install index 293a0a06c..6df512312 100755 --- a/install/tools/ipa-replica-install +++ b/install/tools/ipa-replica-install @@ -61,7 +61,7 @@ def parse_options(): parser.add_option("--setup-dns", dest="setup_dns", action="store_true", default=False, help="configure bind with our zone") parser.add_option("--forwarder", dest="forwarders", action="append", - help="Add a DNS forwarder") + type="ipaddr", help="Add a DNS forwarder") parser.add_option("--no-forwarders", dest="no_forwarders", action="store_true", default=False, help="Do not add any DNS forwarders, use root servers instead") parser.add_option("--no-reverse", dest="no_reverse", action="store_true", @@ -270,6 +270,8 @@ def install_bind(config, options): ip_address = resolve_host(config.host_name) if not ip_address: sys.exit("Unable to resolve IP address for host name") + ip = installutils.parse_ip_address(ip_address) + ip_address = str(ip) create_reverse = True if options.unattended: @@ -305,6 +307,8 @@ def install_dns_records(config, options): ip_address = resolve_host(config.host_name) if not ip_address: sys.exit("Unable to resolve IP address for host name") + ip = installutils.parse_ip_address(ip_address) + ip_address = str(ip) bind.add_master_dns_records(config.host_name, ip_address, config.realm_name, config.domain_name, diff --git a/install/tools/ipa-replica-prepare b/install/tools/ipa-replica-prepare index a41ca5121..21f30f072 100755 --- a/install/tools/ipa-replica-prepare +++ b/install/tools/ipa-replica-prepare @@ -24,7 +24,6 @@ import logging, tempfile, shutil, os, pwd import traceback from ConfigParser import SafeConfigParser import krbV -from optparse import OptionParser from ipapython import ipautil from ipaserver.install import bindinstance, dsinstance, installutils, certs @@ -33,11 +32,12 @@ from ipaserver.install.replication import check_replication_plugin, enable_repli from ipaserver.install.installutils import resolve_host from ipaserver.plugins.ldap2 import ldap2 from ipapython import version +from ipapython.config import IPAOptionParser from ipalib import api, errors, util def parse_options(): usage = "%prog [options] FQDN (e.g. replica.example.com)" - parser = OptionParser(usage=usage, version=version.VERSION) + parser = IPAOptionParser(usage=usage, version=version.VERSION) parser.add_option("--dirsrv_pkcs12", dest="dirsrv_pkcs12", help="install certificate for the directory server") @@ -54,7 +54,7 @@ def parse_options(): parser.add_option("-p", "--password", dest="password", help="Directory Manager (existing master) password") parser.add_option("--ip-address", dest="ip_address", - help="Add A and PTR records of the future replica") + type="ipnet", help="Add A and PTR records of the future replica") parser.add_option("--ca", dest="ca_file", default="/root/cacert.p12", help="Location of CA PKCS#12 file, default /root/cacert.p12") parser.add_option("--no-pkinit", dest="setup_pkinit", action="store_false", @@ -79,7 +79,7 @@ def parse_options(): 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): + if not installutils.verify_ip_address(options.ip_address, match_local=False): parser.error("Bad IP address") sys.exit(1) @@ -426,11 +426,12 @@ def main(): name = domain.pop(0) domain = ".".join(domain) - zone = add_zone(domain, nsaddr=options.ip_address) - add_rr(zone, name, "A", options.ip_address) + ip_address = str(options.ip_address) + zone = add_zone(domain, nsaddr=ip_address) + add_rr(zone, name, "A", ip_address) ns_ip_address = resolve_host(api.env.host) - add_reverse_zone(options.ip_address, ns_ip_address) - add_ptr_rr(options.ip_address, replica_fqdn) + add_reverse_zone(ip_address, ns_ip_address) + add_ptr_rr(ip_address, replica_fqdn) try: if not os.geteuid()==0: diff --git a/install/tools/ipa-server-install b/install/tools/ipa-server-install index 3ad623e61..e36d5af48 100755 --- a/install/tools/ipa-server-install +++ b/install/tools/ipa-server-install @@ -99,11 +99,12 @@ def parse_options(): parser.add_option("", "--external_ca_file", dest="external_ca_file", help="File containing PKCS#10 of the external CA chain") parser.add_option("--hostname", dest="host_name", help="fully qualified name of server") - parser.add_option("--ip-address", dest="ip_address", help="Master Server IP Address") + parser.add_option("--ip-address", dest="ip_address", + type="ipnet", help="Master Server IP Address") parser.add_option("--setup-dns", dest="setup_dns", action="store_true", default=False, help="configure bind with our zone") parser.add_option("--forwarder", dest="forwarders", action="append", - help="Add a DNS forwarder") + type="ipaddr", help="Add a DNS forwarder") parser.add_option("--no-forwarders", dest="no_forwarders", action="store_true", default=False, help="Do not add any DNS forwarders, use root servers instead") parser.add_option("--no-reverse", dest="no_reverse", action="store_true", @@ -593,37 +594,34 @@ def main(): domain_name = domain_name.lower() # Check we have a public IP that is associated with the hostname - ip = resolve_host(host_name) - if ip is None: - if options.ip_address: - ip = options.ip_address + hostaddr = resolve_host(host_name) + if hostaddr is not None: + ip = CheckedIPAddress(hostaddr) + else: + 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 = "" + ip = None if options.unattended: sys.exit(1) - if options.ip_address and options.ip_address != ip: - if options.setup_dns: - if not verify_ip_address(options.ip_address): - return 1 - ip = options.ip_address - else: + if options.ip_address: + if options.ip_address != ip and not options.setup_dns: print >>sys.stderr, "Error: the hostname resolves to an IP address that is different" print >>sys.stderr, "from the one provided on the command line. Please fix your DNS" print >>sys.stderr, "or /etc/hosts file and restart the installation." return 1 - if options.unattended: - if not ip: - sys.exit("Unable to resolve IP address") + ip = options.ip_address + if not verify_ip_address(ip): + return 1 - if not ip: + if ip is None: ip = read_ip_address(host_name, fstore) - logging.debug("read ip_address: %s\n" % ip) - ip_address = ip + logging.debug("read ip_address: %s\n" % str(ip)) + ip_address = str(ip) print "The IPA Master Server will be configured with" print "Hostname: " + host_name -- cgit