[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