mirror of
https://github.com/samba-team/samba.git
synced 2025-12-20 16:23:51 +03:00
r26298: Use metze's schema loading code to pre-initialise the schema into the
samdb before we start writing entries into it.
In doing so, I realised we still used 'dnsDomain', which is not part
of the standard schema (now removed).
We also set the 'wrong' side of the linked attributes for the
masteredBy on each partition - this is now set in provision_self_join
and backlinks via the linked attributes code.
When we have the schema loaded, we must also have a valid domain SID
loaded, so that the objectclass module works. This required some ejs
glue.
Andrew Bartlett
(This used to be commit b0de08916e)
This commit is contained in:
committed by
Stefan Metzmacher
parent
6d2f6f1aae
commit
f5860b5a85
@@ -563,6 +563,44 @@ function provision_become_dc(subobj, message, erase, paths, session_info)
|
||||
return true;
|
||||
}
|
||||
|
||||
function load_schema(subobj, message, samdb)
|
||||
{
|
||||
var lp = loadparm_init();
|
||||
var src = lp.get("setup directory") + "/" + "schema.ldif";
|
||||
|
||||
if (! sys.stat(src)) {
|
||||
message("Template file not found: %s\n",src);
|
||||
assert(0);
|
||||
}
|
||||
|
||||
var schema_data = sys.file_load(src);
|
||||
|
||||
src = lp.get("setup directory") + "/" + "schema_samba4.ldif";
|
||||
|
||||
if (! sys.stat(src)) {
|
||||
message("Template file not found: %s\n",src);
|
||||
assert(0);
|
||||
}
|
||||
|
||||
schema_data = schema_data + sys.file_load(src);
|
||||
|
||||
schema_data = substitute_var(schema_data, subobj);
|
||||
|
||||
src = lp.get("setup directory") + "/" + "provision_schema_basedn_modify.ldif";
|
||||
|
||||
if (! sys.stat(src)) {
|
||||
message("Template file not found: %s\n",src);
|
||||
assert(0);
|
||||
}
|
||||
|
||||
var head_data = sys.file_load(src);
|
||||
head_data = substitute_var(head_data, subobj);
|
||||
|
||||
var ok = samdb.attach_dsdb_schema_from_ldif(head_data, schema_data);
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
provision samba4 - caution, this wipes all existing data!
|
||||
*/
|
||||
@@ -648,8 +686,15 @@ function provision(subobj, message, blank, paths, session_info, credentials, lda
|
||||
}
|
||||
samdb.close();
|
||||
|
||||
message("Pre-loading the Samba4 and AD schema\n");
|
||||
|
||||
samdb = open_ldb(info, paths.samdb, false);
|
||||
|
||||
samdb.set_domain_sid(subobj.DOMAINSID);
|
||||
|
||||
var load_schema_ok = load_schema(subobj, message, samdb);
|
||||
assert(load_schema_ok.is_ok);
|
||||
|
||||
message("Adding DomainDN: " + subobj.DOMAINDN + " (permitted to fail)\n");
|
||||
var add_ok = setup_add_ldif("provision_basedn.ldif", info, samdb, true);
|
||||
message("Modifying DomainDN: " + subobj.DOMAINDN + "\n");
|
||||
@@ -692,16 +737,6 @@ function provision(subobj, message, blank, paths, session_info, credentials, lda
|
||||
message("Setting up sam.ldb AD schema\n");
|
||||
setup_add_ldif("schema.ldif", info, samdb, false);
|
||||
|
||||
// (hack) Reload, now we have the schema loaded.
|
||||
var commit_ok = samdb.transaction_commit();
|
||||
if (!commit_ok) {
|
||||
info.message("samdb commit failed: " + samdb.errstring() + "\n");
|
||||
assert(commit_ok);
|
||||
}
|
||||
samdb.close();
|
||||
|
||||
samdb = open_ldb(info, paths.samdb, false);
|
||||
|
||||
message("Setting up sam.ldb configuration data\n");
|
||||
setup_add_ldif("provision_configuration.ldif", info, samdb, false);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user