summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/scripting/python/samba/provision.py23
1 files changed, 20 insertions, 3 deletions
diff --git a/source4/scripting/python/samba/provision.py b/source4/scripting/python/samba/provision.py
index 1a7a3865d8..49736641b6 100644
--- a/source4/scripting/python/samba/provision.py
+++ b/source4/scripting/python/samba/provision.py
@@ -598,15 +598,25 @@ def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
:note: This function always removes the local SAM LDB file. The erase
parameter controls whether to erase the existing data, which
may not be stored locally but in LDAP.
+
"""
assert session_info is not None
+ old_partitions = None
+
# We use options=["modules:"] to stop the modules loading - we
# just want to wipe and re-initialise the database, not start it up
try:
samdb = Ldb(url=samdb_path, session_info=session_info,
credentials=credentials, lp=lp, options=["modules:"])
+ res = samdb.search(base="@PARTITION", scope=SCOPE_BASE, attrs=["partition"], expression="partition=*")
+ if len(res) == 1:
+ try:
+ old_partitions = res[0]["partition"]
+ except KeyError:
+ pass
+
# Wipes the database
samdb.erase_except_schema_controlled()
except LdbError:
@@ -615,7 +625,6 @@ def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
credentials=credentials, lp=lp, options=["modules:"])
# Wipes the database
samdb.erase_except_schema_controlled()
-
#Add modules to the list to activate them by default
#beware often order is important
@@ -696,6 +705,13 @@ def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
"LDAP_BACKEND_LINE": ldap_backend_line,
})
+
+ if old_partitions is not None:
+ m = ldb.Message()
+ m.dn = ldb.Dn(samdb, "@PARTITION")
+ m["partition"] = ldb.MessageElement(old_partitions, ldb.FLAG_MOD_ADD, "partition")
+ samdb.modify(m)
+
samdb.load_ldif_file_add(setup_path("provision_init.ldif"))
message("Setting up sam.ldb rootDSE")
@@ -706,7 +722,8 @@ def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
raise
samdb.transaction_commit()
-
+
+
def secretsdb_self_join(secretsdb, domain,
netbiosname, domainsid, machinepass,
realm=None, dnsdomain=None,
@@ -1006,7 +1023,7 @@ def setup_samdb(path, setup_path, session_info, credentials, lp,
if fill == FILL_DRS:
return samdb
-
+
samdb.transaction_start()
try:
message("Erasing data from partitions")