From 6664541156582393c8f2456eed5923700235c557 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 26 Feb 2012 16:23:18 +0100 Subject: provision: Split out result reporting for backends. --- .../scripting/python/samba/provision/__init__.py | 40 +++++++------------ .../scripting/python/samba/provision/backend.py | 46 +++++++++++++++++++++- source4/scripting/python/samba/tests/provision.py | 4 +- 3 files changed, 62 insertions(+), 28 deletions(-) diff --git a/source4/scripting/python/samba/provision/__init__.py b/source4/scripting/python/samba/provision/__init__.py index 2f6a84c709..42da903302 100644 --- a/source4/scripting/python/samba/provision/__init__.py +++ b/source4/scripting/python/samba/provision/__init__.py @@ -379,9 +379,13 @@ class ProvisionResult(object): 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( + "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) @@ -396,6 +400,9 @@ class ProvisionResult(object): "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): """Check whether the current install seems ok. @@ -727,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() @@ -1604,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" @@ -1740,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") @@ -1751,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, @@ -1816,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, @@ -1839,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 @@ -1856,21 +1859,8 @@ def provision(logger, session_info, credentials, smbconf=None, else: result.adminpass_generated = False result.adminpass = None - 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.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 4ab827b545..1931bc193e 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 8420f9c152..0ebe400405 100644 --- a/source4/scripting/python/samba/tests/provision.py +++ b/source4/scripting/python/samba/tests/provision.py @@ -167,6 +167,8 @@ class ProvisionResultTests(TestCase): 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'), @@ -185,6 +187,6 @@ class ProvisionResultTests(TestCase): result.adminpass_generated = True result.adminpass = "geheim" entries = self.report_logger(result) - self.assertEquals(entries[0], + self.assertEquals(entries[1], ("INFO", 'Admin password: geheim')) -- cgit