summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2009-10-20 09:11:04 +1100
committerAndrew Bartlett <abartlet@samba.org>2009-10-21 22:43:55 +1100
commit4c36cac5ad7890d437e15561794c19a3ebd4406b (patch)
tree96a89fceeabfc0b61c3d24a66099ac4235e33146
parentda7c778741ad51bd03af068faedb2204e2a79af5 (diff)
downloadsamba-4c36cac5ad7890d437e15561794c19a3ebd4406b.tar.gz
samba-4c36cac5ad7890d437e15561794c19a3ebd4406b.tar.bz2
samba-4c36cac5ad7890d437e15561794c19a3ebd4406b.zip
s4:provision Use schema to casefold partitions on 'upgrade'.
This helps us upgrade from sam.ldb files before the dynamic partitions work, and ensures we use the right casefolding functions. Andrew Bartlett
-rw-r--r--source4/scripting/python/samba/provision.py28
1 files changed, 20 insertions, 8 deletions
diff --git a/source4/scripting/python/samba/provision.py b/source4/scripting/python/samba/provision.py
index 49736641b6..f6236ccb7d 100644
--- a/source4/scripting/python/samba/provision.py
+++ b/source4/scripting/python/samba/provision.py
@@ -586,7 +586,7 @@ def setup_name_mappings(samdb, idmap, sid, domaindn, root_uid, nobody_uid,
idmap.setup_name_mapping(sid + "-513", idmap.TYPE_GID, users_gid)
def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
- credentials, names,
+ credentials, names, schema,
serverrole, ldap_backend=None,
erase=False):
"""Setup the partitions for the SAM database.
@@ -603,6 +603,7 @@ def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
assert session_info is not None
old_partitions = None
+ new_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
@@ -616,7 +617,17 @@ def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
old_partitions = res[0]["partition"]
except KeyError:
pass
-
+
+ if old_partitions is not None:
+ new_partitions = [];
+ for old_partition in old_partitions:
+ new_partition = old_partition
+ if old_partition.endswith(".ldb"):
+ p = old_partition.split(":")[0]
+ dn = ldb.Dn(schema.ldb, p)
+ new_partition = dn.get_casefold()
+ new_partitions.append(new_partition)
+
# Wipes the database
samdb.erase_except_schema_controlled()
except LdbError:
@@ -691,10 +702,10 @@ def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
try:
message("Setting up sam.ldb partitions and settings")
setup_add_ldif(samdb, setup_path("provision_partitions.ldif"), {
- "SCHEMADN": ldb.Dn(samdb, names.schemadn).get_casefold(),
+ "SCHEMADN": ldb.Dn(schema.ldb, names.schemadn).get_casefold(),
"SCHEMADN_MOD2": ",objectguid",
- "CONFIGDN": ldb.Dn(samdb, names.configdn).get_casefold(),
- "DOMAINDN": ldb.Dn(samdb, names.domaindn).get_casefold(),
+ "CONFIGDN": ldb.Dn(schema.ldb, names.configdn).get_casefold(),
+ "DOMAINDN": ldb.Dn(schema.ldb, names.domaindn).get_casefold(),
"SCHEMADN_MOD": "schema_fsmo",
"CONFIGDN_MOD": "naming_fsmo",
"DOMAINDN_MOD": "pdc_fsmo",
@@ -706,10 +717,11 @@ def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
})
- if old_partitions is not None:
+ if new_partitions is not None:
m = ldb.Message()
m.dn = ldb.Dn(samdb, "@PARTITION")
- m["partition"] = ldb.MessageElement(old_partitions, ldb.FLAG_MOD_ADD, "partition")
+
+ m["partition"] = ldb.MessageElement(new_partitions, ldb.FLAG_MOD_ADD, "partition")
samdb.modify(m)
samdb.load_ldif_file_add(setup_path("provision_init.ldif"))
@@ -1003,7 +1015,7 @@ def setup_samdb(path, setup_path, session_info, credentials, lp,
setup_samdb_partitions(path, setup_path, message=message, lp=lp,
credentials=credentials, session_info=session_info,
names=names, ldap_backend=ldap_backend,
- serverrole=serverrole)
+ serverrole=serverrole, schema=schema)
if (schema == None):
schema = Schema(setup_path, domainsid, schemadn=names.schemadn, serverdn=names.serverdn,