1
0
mirror of https://github.com/samba-team/samba.git synced 2025-07-05 04:59:08 +03:00

r26527: Start on tests for provision.

(This used to be commit 84ac6c6bbf)
This commit is contained in:
Jelmer Vernooij
2007-12-18 18:54:19 +01:00
committed by Stefan Metzmacher
parent 80529722e3
commit 4e6ab64762
5 changed files with 97 additions and 42 deletions

View File

@ -135,18 +135,6 @@ def hostname():
return gethostname().split(".")[0]
def ldb_delete(ldb):
"""Delete a LDB file.
This may be necessary if the ldb is in bad shape, possibly due to being
built from an incompatible previous version of the code, so delete it
completely.
"""
print "Deleting %s\n" % ldb.filename
os.unlink(ldb.filename)
ldb.connect(ldb.filename)
def open_ldb(session_info, credentials, lp, dbname):
assert session_info is not None
try:
@ -176,6 +164,13 @@ def setup_add_ldif(ldb, setup_dir, ldif, subst_vars=None):
def setup_modify_ldif(ldb, setup_dir, ldif, substvars=None):
"""Modify a ldb in the private dir.
:param ldb: LDB object.
:param setup_dir: Setup directory.
:param ldif: LDIF file path.
:param substvars: Optional dictionary with substitution variables.
"""
src = os.path.join(setup_dir, ldif)
data = open(src, 'r').read()
@ -199,19 +194,6 @@ def setup_ldb(ldb, setup_dir, ldif, subst_vars=None):
ldb.transaction_commit()
def setup_ldb_modify(ldb, setup_dir, ldif, substvars=None):
"""Modify a ldb in the private dir."""
src = os.path.join(setup_dir, ldif)
data = open(src, 'r').read()
if substvars is not None:
data = substitute_var(data, substvars)
assert not "${" in data
for (changetype, msg) in ldb.parse_ldif(data):
ldb.modify(msg)
def setup_file(setup_dir, template, fname, substvars):
"""Setup a file in the private dir."""
f = fname
@ -328,7 +310,7 @@ def provision_become_dc(setup_dir, subobj, message, paths, lp, session_info,
setup_samdb_rootdse(samdb, setup_dir, subobj)
message("Erasing data from partitions")
ldb_erase_partitions(subobj, message, samdb, None)
ldb_erase_partitions(subobj.domaindn, message, samdb, None)
message("Setting up %s indexes" % paths.samdb)
setup_add_ldif(samdb, setup_dir, "provision_index.ldif")
@ -453,8 +435,7 @@ def provision(lp, setup_dir, subobj, message, blank, paths, session_info,
smbconfsuffix = "member"
else:
assert "Invalid server role setting: %s" % lp.get("server role")
setup_file(setup_dir, "provision.smb.conf.%s" % smbconfsuffix, paths.smbconf,
None)
setup_file(setup_dir, "provision.smb.conf.%s" % smbconfsuffix, paths.smbconf)
lp.reload()
# only install a new shares config db if there is none
@ -462,7 +443,7 @@ def provision(lp, setup_dir, subobj, message, blank, paths, session_info,
message("Setting up share.ldb")
share_ldb = Ldb(paths.shareconf, session_info=session_info,
credentials=credentials, lp=lp)
setup_ldb(share_ldb, setup_dir, "share.ldif", None)
setup_ldb(share_ldb, setup_dir, "share.ldif")
message("Setting up %s" % paths.secrets)
secrets_ldb = setup_secretsdb(paths.secrets, setup_dir, session_info=session_info,
@ -497,7 +478,7 @@ def provision(lp, setup_dir, subobj, message, blank, paths, session_info,
setup_samdb_rootdse(samdb, setup_dir, subobj)
message("Erasing data from partitions")
ldb_erase_partitions(subobj, message, samdb, ldapbackend)
ldb_erase_partitions(subobj.domaindn, message, samdb, ldapbackend)
except:
samdb.transaction_cancel()
raise
@ -527,7 +508,7 @@ def provision(lp, setup_dir, subobj, message, blank, paths, session_info,
else:
domainguid_mod = ""
setup_ldb_modify(samdb, setup_dir, "provision_basedn_modify.ldif", {
setup_modify_ldif(samdb, setup_dir, "provision_basedn_modify.ldif", {
"RDN_DC": subobj.rdn_dc,
"LDAPTIME": timestring(int(time.time())),
"DOMAINSID": str(subobj.domainsid),
@ -547,7 +528,7 @@ def provision(lp, setup_dir, subobj, message, blank, paths, session_info,
"EXTENSIBLEOBJECT": "# no objectClass: extensibleObject for local ldb",
})
message("Modifying configuration container")
setup_ldb_modify(samdb, setup_dir, "provision_configuration_basedn_modify.ldif", {
setup_modify_ldif(samdb, setup_dir, "provision_configuration_basedn_modify.ldif", {
"CONFIGDN": subobj.configdn,
"SCHEMADN": subobj.schemadn,
})
@ -559,7 +540,7 @@ def provision(lp, setup_dir, subobj, message, blank, paths, session_info,
"EXTENSIBLEOBJECT": "# no objectClass: extensibleObject for local ldb"
})
message("Modifying schema container")
setup_ldb_modify(samdb, setup_dir, "provision_schema_basedn_modify.ldif", {
setup_modify_ldif(samdb, setup_dir, "provision_schema_basedn_modify.ldif", {
"SCHEMADN": subobj.schemadn,
"NETBIOSNAME": subobj.netbiosname,
"DEFAULTSITE": subobj.defaultsite,
@ -593,13 +574,13 @@ def provision(lp, setup_dir, subobj, message, blank, paths, session_info,
setup_add_ldif(samdb, setup_dir, "provision_users_add.ldif", {
"DOMAINDN": subobj.domaindn})
message("Modifying users container")
setup_ldb_modify(samdb, setup_dir, "provision_users_modify.ldif", {
setup_modify_ldif(samdb, setup_dir, "provision_users_modify.ldif", {
"DOMAINDN": subobj.domaindn})
message("Adding computers container (permitted to fail)")
setup_add_ldif(samdb, setup_dir, "provision_computers_add.ldif", {
"DOMAINDN": subobj.domaindn})
message("Modifying computers container")
setup_ldb_modify(samdb, setup_dir, "provision_computers_modify.ldif", {
setup_modify_ldif(samdb, setup_dir, "provision_computers_modify.ldif", {
"DOMAINDN": subobj.domaindn})
message("Setting up sam.ldb data")
setup_add_ldif(samdb, setup_dir, "provision.ldif", {
@ -807,7 +788,7 @@ def load_schema(setup_dir, samdb, subobj):
samdb.attach_schema_from_ldif(head_data, schema_data)
def join_domain(domain, netbios_name, join_type, creds, message):
def join_domain(domain, netbios_name, join_type, creds):
ctx = NetContext(creds)
joindom = object()
joindom.domain = domain
@ -824,8 +805,7 @@ def vampire(domain, session_info, credentials, message):
access to our local database (might be remote ldap)
"""
ctx = NetContext(credentials)
vampire_ctx = object()
machine_creds = credentials_init()
machine_creds = Credentials()
machine_creds.set_domain(form.domain)
if not machine_creds.set_machine_account():
raise Exception("Failed to access domain join information!")
@ -835,7 +815,7 @@ def vampire(domain, session_info, credentials, message):
raise Exception("Migration of remote domain to Samba failed: %s " % vampire_ctx.error_string)
def ldb_erase_partitions(subobj, message, ldb, ldapbackend):
def ldb_erase_partitions(domaindn, message, ldb, ldapbackend):
"""Erase an ldb, removing all records."""
assert ldb is not None
res = ldb.search(Dn(ldb, ""), SCOPE_BASE, "(objectClass=*)",
@ -848,7 +828,7 @@ def ldb_erase_partitions(subobj, message, ldb, ldapbackend):
previous_remaining = 1
current_remaining = 0
if ldapbackend and (basedn == subobj.domaindn):
if ldapbackend and (basedn == domaindn):
# Only delete objects that were created by provision
anything = "(objectcategory=*)"