The branch, master has been updated via d09764e join: Don't print provision results when they're just noise. via 6664541 provision: Split out result reporting for backends. via eeb5f66 provision: Put adminpass details in ProvisionResult. via 3e6fa05 provision/tests: Test for phpldapadminconfig path. via 21f443e provision: Leave result reporting up to caller. from 02ba909 s3: Remove pointless parentheses
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit d09764e180f0fef076b014fb446a4247f7cf0d29 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Feb 26 16:25:56 2012 +0100 join: Don't print provision results when they're just noise. Autobuild-User: Jelmer Vernooij <jel...@samba.org> Autobuild-Date: Sun Feb 26 17:56:57 CET 2012 on sn-devel-104 commit 6664541156582393c8f2456eed5923700235c557 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Feb 26 16:23:18 2012 +0100 provision: Split out result reporting for backends. commit eeb5f66d902467524641b54e2d4180a31edbe4e7 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Feb 26 16:07:21 2012 +0100 provision: Put adminpass details in ProvisionResult. commit 3e6fa054f9567c8ba741969c6961d7f0eda5c1ca Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Feb 26 15:56:52 2012 +0100 provision/tests: Test for phpldapadminconfig path. commit 21f443eb8286805dde6bbb1b8f37379f6e0aa203 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Feb 26 15:44:40 2012 +0100 provision: Leave result reporting up to caller. ----------------------------------------------------------------------- Summary of changes: source4/scripting/bin/upgradeprovision | 3 +- source4/scripting/python/samba/join.py | 19 ++-- .../scripting/python/samba/provision/__init__.py | 92 ++++++++++---------- .../scripting/python/samba/provision/backend.py | 46 +++++++++- source4/scripting/python/samba/tests/provision.py | 37 +++++++- source4/scripting/python/samba/upgrade.py | 1 + source4/scripting/python/samba/upgradehelpers.py | 2 +- source4/setup/provision | 4 +- 8 files changed, 139 insertions(+), 65 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/scripting/bin/upgradeprovision b/source4/scripting/bin/upgradeprovision index aec0774..2adb9a5 100755 --- a/source4/scripting/bin/upgradeprovision +++ b/source4/scripting/bin/upgradeprovision @@ -1782,8 +1782,9 @@ if __name__ == '__main__': message(SIMPLE, "Creating a reference provision") provisiondir = tempfile.mkdtemp(dir=paths.private_dir, prefix="referenceprovision") - newprovision(names, creds, session, smbconf, provisiondir, + result = newprovision(names, creds, session, smbconf, provisiondir, provision_logger) + result.report_logger(provision_logger) # TODO # 6) and 7) diff --git a/source4/scripting/python/samba/join.py b/source4/scripting/python/samba/join.py index 10f8ad7..ff068ac 100644 --- a/source4/scripting/python/samba/join.py +++ b/source4/scripting/python/samba/join.py @@ -589,16 +589,15 @@ class dc_join(object): logger.addHandler(logging.StreamHandler(sys.stdout)) smbconf = ctx.lp.configfile - presult = provision(logger, system_session(), None, - smbconf=smbconf, targetdir=ctx.targetdir, samdb_fill=FILL_DRS, - realm=ctx.realm, rootdn=ctx.root_dn, domaindn=ctx.base_dn, - schemadn=ctx.schema_dn, - configdn=ctx.config_dn, - serverdn=ctx.server_dn, domain=ctx.domain_name, - hostname=ctx.myname, domainsid=ctx.domsid, - machinepass=ctx.acct_pass, serverrole="domain controller", - sitename=ctx.site, lp=ctx.lp, ntdsguid=ctx.ntds_guid, - dns_backend="NONE") + presult = provision(logger, system_session(), None, smbconf=smbconf, + targetdir=ctx.targetdir, samdb_fill=FILL_DRS, realm=ctx.realm, + rootdn=ctx.root_dn, domaindn=ctx.base_dn, + schemadn=ctx.schema_dn, configdn=ctx.config_dn, + serverdn=ctx.server_dn, domain=ctx.domain_name, + hostname=ctx.myname, domainsid=ctx.domsid, + machinepass=ctx.acct_pass, serverrole="domain controller", + sitename=ctx.site, lp=ctx.lp, ntdsguid=ctx.ntds_guid, + dns_backend="NONE") print "Provision OK for domain DN %s" % presult.domaindn ctx.local_samdb = presult.samdb ctx.lp = presult.lp diff --git a/source4/scripting/python/samba/provision/__init__.py b/source4/scripting/python/samba/provision/__init__.py index 6f7adc1..42da903 100644 --- a/source4/scripting/python/samba/provision/__init__.py +++ b/source4/scripting/python/samba/provision/__init__.py @@ -118,6 +118,7 @@ class ProvisionPaths(object): self.dns = None self.winsdb = None self.private_dir = None + self.phpldapadminconfig = None class ProvisionNames(object): @@ -376,14 +377,31 @@ class ProvisionResult(object): self.idmap = None self.names = None self.domainsid = None + self.adminpass_generated = None + self.adminpass = None + self.backend_result = None def report_logger(self, logger): """Report this provision result to a logger.""" - logger.info("Server Role: %s" % self.server_role) - logger.info("Hostname: %s" % self.names.hostname) - logger.info("NetBIOS Domain: %s" % self.names.domain) - logger.info("DNS Domain: %s" % self.names.dnsdomain) - logger.info("DOMAIN SID: %s" % self.domainsid) + logger.info( + "Once the above files are installed, your Samba4 server will " + "be ready to use") + if self.adminpass_generated: + logger.info("Admin password: %s", self.adminpass) + logger.info("Server Role: %s", self.server_role) + logger.info("Hostname: %s", self.names.hostname) + logger.info("NetBIOS Domain: %s", self.names.domain) + logger.info("DNS Domain: %s", self.names.dnsdomain) + logger.info("DOMAIN SID: %s", self.domainsid) + + if self.paths.phpldapadminconfig is not None: + logger.info( + "A phpLDAPadmin configuration file suitable for administering " + "the Samba 4 LDAP server has been created in %s.", + self.paths.phpldapadminconfig) + + if self.backend_result: + self.backend_result.report_logger(logger) def check_install(lp, session_info, credentials): @@ -716,7 +734,7 @@ def setup_samdb_partitions(samdb_path, logger, lp, session_info, lp=lp, options=["modules:"]) ldap_backend_line = "# No LDAP backend" - if provision_backend.type is not "ldb": + if provision_backend.type != "ldb": ldap_backend_line = "ldapBackend: %s" % provision_backend.ldap_uri samdb.transaction_start() @@ -1593,7 +1611,7 @@ def provision(logger, session_info, credentials, smbconf=None, if ldapadminpass is None: # Make a new, random password between Samba and it's LDAP server - ldapadminpass=samba.generate_random_password(128, 255) + ldapadminpass = samba.generate_random_password(128, 255) if backend_type is None: backend_type = "ldb" @@ -1729,8 +1747,7 @@ def provision(logger, session_info, credentials, smbconf=None, # only install a new shares config db if there is none if not os.path.exists(paths.shareconf): logger.info("Setting up share.ldb") - share_ldb = Ldb(paths.shareconf, session_info=session_info, - lp=lp) + share_ldb = Ldb(paths.shareconf, session_info=session_info, lp=lp) share_ldb.load_ldif_file_add(setup_path("share.ldif")) logger.info("Setting up secrets.ldb") @@ -1740,15 +1757,13 @@ def provision(logger, session_info, credentials, smbconf=None, try: logger.info("Setting up the registry") - setup_registry(paths.hklm, session_info, - lp=lp) + setup_registry(paths.hklm, session_info, lp=lp) logger.info("Setting up the privileges database") setup_privileges(paths.privilege, session_info, lp=lp) logger.info("Setting up idmap db") - idmap = setup_idmapdb(paths.idmapdb, - session_info=session_info, lp=lp) + idmap = setup_idmapdb(paths.idmapdb, session_info=session_info, lp=lp) setup_name_mappings(idmap, sid=str(domainsid), root_uid=root_uid, nobody_uid=nobody_uid, @@ -1784,16 +1799,17 @@ def provision(logger, session_info, credentials, smbconf=None, adminpass_generated = False if samdb_fill == FILL_FULL: - provision_fill(samdb, secrets_ldb, logger, - names, paths, schema=schema, targetdir=targetdir, - samdb_fill=samdb_fill, hostip=hostip, hostip6=hostip6, domainsid=domainsid, - next_rid=next_rid, dc_rid=dc_rid, adminpass=adminpass, - krbtgtpass=krbtgtpass, domainguid=domainguid, - policyguid=policyguid, policyguid_dc=policyguid_dc, - invocationid=invocationid, machinepass=machinepass, - ntdsguid=ntdsguid, dns_backend=dns_backend, dnspass=dnspass, - serverrole=serverrole, dom_for_fun_level=dom_for_fun_level, - am_rodc=am_rodc, lp=lp) + provision_fill(samdb, secrets_ldb, logger, names, paths, + schema=schema, targetdir=targetdir, samdb_fill=samdb_fill, + hostip=hostip, hostip6=hostip6, domainsid=domainsid, + next_rid=next_rid, dc_rid=dc_rid, adminpass=adminpass, + krbtgtpass=krbtgtpass, domainguid=domainguid, + policyguid=policyguid, policyguid_dc=policyguid_dc, + invocationid=invocationid, machinepass=machinepass, + ntdsguid=ntdsguid, dns_backend=dns_backend, + dnspass=dnspass, serverrole=serverrole, + dom_for_fun_level=dom_for_fun_level, am_rodc=am_rodc, + lp=lp) create_krb5_conf(paths.krb5conf, dnsdomain=names.dnsdomain, hostname=names.hostname, @@ -1804,7 +1820,7 @@ def provision(logger, session_info, credentials, smbconf=None, if serverrole == "domain controller": create_dns_update_list(lp, logger, paths) - provision_backend.post_setup() + backend_result = provision_backend.post_setup() provision_backend.shutdown() create_phpldapadmin_config(paths.phpldapadminconfig, @@ -1827,7 +1843,6 @@ def provision(logger, session_info, credentials, smbconf=None, logger.info("Failed to chown %s to bind gid %u", dns_keytab_path, paths.bind_gid) - logger.info("Once the above files are installed, your Samba4 server will be ready to use") result = ProvisionResult() result.server_role = serverrole result.domaindn = domaindn @@ -1837,28 +1852,15 @@ def provision(logger, session_info, credentials, smbconf=None, result.samdb = samdb result.idmap = idmap result.domainsid = str(domainsid) - result.report_logger(logger) - logger.info("A phpLDAPadmin configuration file suitable for administering the Samba 4 LDAP server has been created in %s .", - paths.phpldapadminconfig) if samdb_fill == FILL_FULL: - if adminpass_generated: - logger.info("Admin password: %s" % adminpass) - if provision_backend.type is not "ldb": - if provision_backend.credentials.get_bind_dn() is not None: - logger.info("LDAP Backend Admin DN: %s" % - provision_backend.credentials.get_bind_dn()) - else: - logger.info("LDAP Admin User: %s" % - provision_backend.credentials.get_username()) - - if provision_backend.slapd_command_escaped is not None: - # now display slapd_command_file.txt to show how slapd must be - # started next time - logger.info("Use later the following commandline to start slapd, then Samba:") - logger.info(provision_backend.slapd_command_escaped) - logger.info("This slapd-Commandline is also stored under: %s/ldap_backend_startup.sh", - provision_backend.ldapdir) + result.adminpass_generated = adminpass_generated + result.adminpass = adminpass + else: + result.adminpass_generated = False + result.adminpass = None + + result.backend_result = backend_result return result diff --git a/source4/scripting/python/samba/provision/backend.py b/source4/scripting/python/samba/provision/backend.py index 4ab827b..1931bc1 100644 --- a/source4/scripting/python/samba/provision/backend.py +++ b/source4/scripting/python/samba/provision/backend.py @@ -51,7 +51,43 @@ class SlapdAlreadyRunning(Exception): self.ldapi_uri) +class BackendResult(object): + + def report_logger(self, logger): + """Rerport this result to a particular logger. + + """ + raise NotImplementedError(self.report_logger) + + +class LDAPBackendResult(BackendResult): + + def __init__(self, credentials, slapd_command_escaped, ldapdir): + self.credentials = credentials + self.slapd_command_escaped = slapd_command_escaped + self.ldapdir = ldapdir + + def report_logger(self, logger): + if self.credentials.get_bind_dn() is not None: + logger.info("LDAP Backend Admin DN: %s" % + self.credentials.get_bind_dn()) + else: + logger.info("LDAP Admin User: %s" % + self.credentials.get_username()) + + if self.slapd_command_escaped is not None: + # now display slapd_command_file.txt to show how slapd must be + # started next time + logger.info( + "Use later the following commandline to start slapd, then Samba:") + logger.info(self.slapd_command_escaped) + logger.info( + "This slapd-Commandline is also stored under: %s/ldap_backend_startup.sh", + self.ldapdir) + + class ProvisionBackend(object): + def __init__(self, backend_type, paths=None, lp=None, credentials=None, names=None, logger=None): """Provision a backend for samba4""" @@ -79,7 +115,10 @@ class ProvisionBackend(object): raise NotImplementedError(self.shutdown) def post_setup(self): - """Post setup.""" + """Post setup. + + :return: A BackendResult or None + """ raise NotImplementedError(self.post_setup) @@ -278,7 +317,8 @@ class LDAPBackend(ProvisionBackend): self.slapd.communicate() def post_setup(self): - pass + return LDAPBackendResult(self.credentials, self.slapd_command_escaped, + self.ldapdir) class OpenLDAPBackend(LDAPBackend): @@ -770,3 +810,5 @@ class FDSBackend(LDAPBackend): self.names.schemadn): m.dn = ldb.Dn(ldapi_db, dnstring) ldapi_db.modify(m) + return LDAPBackendResult(self.credentials, self.slapd_command_escaped, + self.ldapdir) diff --git a/source4/scripting/python/samba/tests/provision.py b/source4/scripting/python/samba/tests/provision.py index fc8451c..0ebe400 100644 --- a/source4/scripting/python/samba/tests/provision.py +++ b/source4/scripting/python/samba/tests/provision.py @@ -141,14 +141,18 @@ class DummyLogger(object): def __init__(self): self.entries = [] - def info(self, text): - self.entries.append(("INFO", text)) + def info(self, text, *args): + self.entries.append(("INFO", text % args)) class ProvisionResultTests(TestCase): - def test_report_logger(self): + def report_logger(self, result): logger = DummyLogger() + result.report_logger(logger) + return logger.entries + + def base_result(self): result = ProvisionResult() result.server_role = "domain controller" result.names = ProvisionNames() @@ -156,10 +160,33 @@ class ProvisionResultTests(TestCase): result.names.domain = "DOMEIN" result.names.dnsdomain = "dnsdomein" result.domainsid = "S1-1-1" - result.report_logger(logger) - self.assertEquals(logger.entries, [ + result.paths = ProvisionPaths() + return result + + def test_basic_report_logger(self): + result = self.base_result() + entries = self.report_logger(result) + self.assertEquals(entries, [ + ('INFO', 'Once the above files are installed, your Samba4 server ' + 'will be ready to use'), ('INFO', 'Server Role: domain controller'), ('INFO', 'Hostname: hostnaam'), ('INFO', 'NetBIOS Domain: DOMEIN'), ('INFO', 'DNS Domain: dnsdomein'), ('INFO', 'DOMAIN SID: S1-1-1')]) + + def test_report_logger_phpldapadmin(self): + result = self.base_result() + result.paths.phpldapadminconfig = "/some/ldapconfig" + entries = self.report_logger(result) + self.assertEquals(entries[-1], + ("INFO", "A phpLDAPadmin configuration file suitable for administering the Samba 4 LDAP server has been created in /some/ldapconfig.")) + + def test_report_logger_adminpass(self): + result = self.base_result() + result.adminpass_generated = True + result.adminpass = "geheim" + entries = self.report_logger(result) + self.assertEquals(entries[1], + ("INFO", 'Admin password: geheim')) + diff --git a/source4/scripting/python/samba/upgrade.py b/source4/scripting/python/samba/upgrade.py index 850035b..b2fb51e 100644 --- a/source4/scripting/python/samba/upgrade.py +++ b/source4/scripting/python/samba/upgrade.py @@ -643,6 +643,7 @@ Please fix this account before attempting to upgrade again hostname=netbiosname.lower(), machinepass=machinepass, serverrole=serverrole, samdb_fill=FILL_FULL, useeadb=useeadb, dns_backend=dns_backend) + result.report_logger(logger) # Import WINS database logger.info("Importing WINS database") diff --git a/source4/scripting/python/samba/upgradehelpers.py b/source4/scripting/python/samba/upgradehelpers.py index a75ab75..c6c9527 100755 --- a/source4/scripting/python/samba/upgradehelpers.py +++ b/source4/scripting/python/samba/upgradehelpers.py @@ -259,7 +259,7 @@ def newprovision(names, creds, session, smbconf, provdir, logger): os.mkdir(provdir) logger.info("Provision stored in %s", provdir) dns_backend="BIND9_DLZ" - provision(logger, session, creds, smbconf=smbconf, + return provision(logger, session, creds, smbconf=smbconf, targetdir=provdir, samdb_fill=FILL_FULL, realm=names.realm, domain=names.domain, domainguid=names.domainguid, domainsid=str(names.domainsid), ntdsguid=names.ntdsguid, diff --git a/source4/setup/provision b/source4/setup/provision index a2327b3..4316ad0 100755 --- a/source4/setup/provision +++ b/source4/setup/provision @@ -243,7 +243,7 @@ elif opts.use_xattrs == "auto" and not lp.get("posix:eadb"): session = system_session() try: - provision(logger, + result = provision(logger, session, creds, smbconf=smbconf, targetdir=opts.targetdir, samdb_fill=samdb_fill, realm=opts.realm, domain=opts.domain, domainguid=opts.domain_guid, domainsid=opts.domain_sid, @@ -263,3 +263,5 @@ try: except ProvisioningError, e: print str(e) sys.exit(1) + +result.report_logger(logger) -- Samba Shared Repository