mirror of
https://github.com/samba-team/samba.git
synced 2025-07-29 15:42:04 +03:00
s4 provision: Ask for the dns forwarder IP address during interactive provision
Signed-off-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
committed by
Stefan Metzmacher
parent
1627fcda3e
commit
fee75752fb
@ -233,6 +233,7 @@ class cmd_domain_provision(Command):
|
||||
krbtgtpass = None,
|
||||
machinepass = None,
|
||||
dns_backend = None,
|
||||
dns_forwarder = None,
|
||||
dnspass = None,
|
||||
ldapadminpass = None,
|
||||
root = None,
|
||||
@ -252,11 +253,11 @@ class cmd_domain_provision(Command):
|
||||
use_ntvfs = None,
|
||||
use_rfc2307 = None):
|
||||
|
||||
logger = self.get_logger("provision")
|
||||
self.logger = self.get_logger("provision")
|
||||
if quiet:
|
||||
logger.setLevel(logging.WARNING)
|
||||
self.logger.setLevel(logging.WARNING)
|
||||
else:
|
||||
logger.setLevel(logging.INFO)
|
||||
self.logger.setLevel(logging.INFO)
|
||||
|
||||
lp = sambaopts.get_loadparm()
|
||||
smbconf = lp.configfile
|
||||
@ -265,6 +266,8 @@ class cmd_domain_provision(Command):
|
||||
|
||||
creds.set_kerberos_state(DONT_USE_KERBEROS)
|
||||
|
||||
suggested_forwarder = dns_forwarder is None and self._get_nameserver_ip() or dns_forwarder
|
||||
|
||||
if len(self.raw_argv) == 1:
|
||||
interactive = True
|
||||
|
||||
@ -301,6 +304,12 @@ class cmd_domain_provision(Command):
|
||||
if dns_backend in (None, ''):
|
||||
raise CommandError("No DNS backend set!")
|
||||
|
||||
if dns_backend == "SAMBA_INTERNAL":
|
||||
dns_forwarder = ask("DNS forwarder IP address (write 'none' to disable forwarding)", suggested_forwarder)
|
||||
if dns_forwarder.lower() in (None, 'none'):
|
||||
suggested_forwarder = None
|
||||
dns_forwarder = None
|
||||
|
||||
while True:
|
||||
adminpassplain = getpass("Administrator password: ")
|
||||
if not adminpassplain:
|
||||
@ -321,7 +330,7 @@ class cmd_domain_provision(Command):
|
||||
raise CommandError("No domain set!")
|
||||
|
||||
if not adminpass:
|
||||
logger.info("Administrator password will be set randomly!")
|
||||
self.logger.info("Administrator password will be set randomly!")
|
||||
|
||||
if function_level == "2000":
|
||||
dom_for_fun_level = DS_DOMAIN_FUNCTION_2000
|
||||
@ -332,6 +341,9 @@ class cmd_domain_provision(Command):
|
||||
elif function_level == "2008_R2":
|
||||
dom_for_fun_level = DS_DOMAIN_FUNCTION_2008_R2
|
||||
|
||||
if dns_backend == "SAMBA_INTERNAL" and dns_forwarder is None:
|
||||
dns_forwarder = suggested_forwarder
|
||||
|
||||
samdb_fill = FILL_FULL
|
||||
if blank:
|
||||
samdb_fill = FILL_NT4SYNC
|
||||
@ -357,16 +369,16 @@ class cmd_domain_provision(Command):
|
||||
"O:S-1-5-32G:S-1-5-32", "S-1-5-32", "native")
|
||||
eadb = False
|
||||
except Exception:
|
||||
logger.info("You are not root or your system do not support xattr, using tdb backend for attributes. ")
|
||||
self.logger.info("You are not root or your system do not support xattr, using tdb backend for attributes. ")
|
||||
finally:
|
||||
file.close()
|
||||
|
||||
if eadb:
|
||||
logger.info("not using extended attributes to store ACLs and other metadata. If you intend to use this provision in production, rerun the script as root on a system supporting xattrs.")
|
||||
self.logger.info("not using extended attributes to store ACLs and other metadata. If you intend to use this provision in production, rerun the script as root on a system supporting xattrs.")
|
||||
|
||||
session = system_session()
|
||||
try:
|
||||
result = provision(logger,
|
||||
result = provision(self.logger,
|
||||
session, creds, smbconf=smbconf, targetdir=targetdir,
|
||||
samdb_fill=samdb_fill, realm=realm, domain=domain,
|
||||
domainguid=domain_guid, domainsid=domain_sid,
|
||||
@ -375,7 +387,7 @@ class cmd_domain_provision(Command):
|
||||
ntdsguid=ntds_guid,
|
||||
invocationid=invocationid, adminpass=adminpass,
|
||||
krbtgtpass=krbtgtpass, machinepass=machinepass,
|
||||
dns_backend=dns_backend,
|
||||
dns_backend=dns_backend, dns_forwarder=dns_forwarder,
|
||||
dnspass=dnspass, root=root, nobody=nobody,
|
||||
wheel=wheel, users=users,
|
||||
serverrole=server_role, dom_for_fun_level=dom_for_fun_level,
|
||||
@ -386,7 +398,32 @@ class cmd_domain_provision(Command):
|
||||
except ProvisioningError, e:
|
||||
raise CommandError("Provision failed", e)
|
||||
|
||||
result.report_logger(logger)
|
||||
result.report_logger(self.logger)
|
||||
|
||||
def _get_nameserver_ip(self):
|
||||
"""Grab the nameserver IP address from /etc/resolv.conf"""
|
||||
from os import path
|
||||
RESOLV_CONF="/etc/resolv.conf"
|
||||
|
||||
if not path.isfile(RESOLV_CONF):
|
||||
self.logger.warning("Failed to locate %s" % RESOLV_CONF)
|
||||
return None
|
||||
|
||||
handle = None
|
||||
try:
|
||||
handle = open(RESOLV_CONF, 'r')
|
||||
for line in handle:
|
||||
if not line.startswith('nameserver'):
|
||||
continue
|
||||
# we want the last non-space continuous string of the line
|
||||
return line.strip().split()[-1]
|
||||
finally:
|
||||
if handle is not None:
|
||||
handle.close()
|
||||
|
||||
self.logger.warning("No nameserver found in %s" % RESOLV_CONF)
|
||||
return None
|
||||
|
||||
|
||||
class cmd_domain_dcpromo(Command):
|
||||
"""Promotes an existing domain member or NT4 PDC to an AD DC"""
|
||||
|
@ -1764,7 +1764,7 @@ def provision(logger, session_info, credentials, smbconf=None,
|
||||
domain=None, hostname=None, hostip=None, hostip6=None, domainsid=None,
|
||||
next_rid=1000, dc_rid=None, adminpass=None, ldapadminpass=None, krbtgtpass=None,
|
||||
domainguid=None, policyguid=None, policyguid_dc=None,
|
||||
dns_backend=None, dnspass=None,
|
||||
dns_backend=None, dns_forwarder=None, dnspass=None,
|
||||
invocationid=None, machinepass=None, ntdsguid=None,
|
||||
root=None, nobody=None, users=None, wheel=None, backup=None, aci=None,
|
||||
serverrole=None, dom_for_fun_level=None,
|
||||
@ -1822,6 +1822,9 @@ def provision(logger, session_info, credentials, smbconf=None,
|
||||
|
||||
if dns_backend != "SAMBA_INTERNAL":
|
||||
server_services.append("-dns")
|
||||
else:
|
||||
if dns_forwarder is not None:
|
||||
global_param["dns forwarder"] = [dns_forwarder]
|
||||
|
||||
if use_ntvfs:
|
||||
server_services.append("+smb")
|
||||
|
Reference in New Issue
Block a user