diff options
author | Andrew Bartlett <abartlet@samba.org> | 2009-10-20 09:11:04 +1100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2009-10-21 22:43:55 +1100 |
commit | 4c36cac5ad7890d437e15561794c19a3ebd4406b (patch) | |
tree | 96a89fceeabfc0b61c3d24a66099ac4235e33146 /source4/scripting/python | |
parent | da7c778741ad51bd03af068faedb2204e2a79af5 (diff) | |
download | samba-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
Diffstat (limited to 'source4/scripting/python')
-rw-r--r-- | source4/scripting/python/samba/provision.py | 28 |
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, |