[SCM] Samba Shared Repository - branch master updated

Jelmer Vernooij jelmer at samba.org
Sun Feb 26 09:57:02 MST 2012


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 <jelmer at 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 <jelmer at samba.org>
    Autobuild-Date: Sun Feb 26 17:56:57 CET 2012 on sn-devel-104

commit 6664541156582393c8f2456eed5923700235c557
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Sun Feb 26 16:23:18 2012 +0100

    provision: Split out result reporting for backends.

commit eeb5f66d902467524641b54e2d4180a31edbe4e7
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Sun Feb 26 16:07:21 2012 +0100

    provision: Put adminpass details in ProvisionResult.

commit 3e6fa054f9567c8ba741969c6961d7f0eda5c1ca
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Sun Feb 26 15:56:52 2012 +0100

    provision/tests: Test for phpldapadminconfig path.

commit 21f443eb8286805dde6bbb1b8f37379f6e0aa203
Author: Jelmer Vernooij <jelmer at 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


More information about the samba-cvs mailing list