r26303: Fix up error reporting during the delete of previous entries in the
[samba.git] / source4 / scripting / libjs / provision.js
index 2dfc941a66e886488f3df63391c4a84d02b60400..5e9e43a858afb9b0e7a04c540a9ba8071ded7d70 100644 (file)
@@ -198,7 +198,10 @@ function ldb_erase_partitions(info, ldb, ldapbackend)
        var j;
 
        var res = ldb.search("(objectClass=*)", "", ldb.SCOPE_BASE, rootDSE_attrs);
-       assert(res.error == 0);
+       if (res.error != 0) {
+               info.message("rootdse search failed: " + res.errstr + "\n");
+               assert(res.error == 0);
+       }
        assert(res.msgs.length == 1);
        if (typeof(res.msgs[0].namingContexts) == "undefined") {
                return;
@@ -221,7 +224,10 @@ function ldb_erase_partitions(info, ldb, ldapbackend)
                        var res2 = ldb.search(anything, basedn, ldb.SCOPE_SUBTREE, attrs);
                        var i;
                        if (res2.error != 0) {
-                               info.message("ldb search failed: " + res.errstr + "\n");
+                               if (res2.error == 32) {
+                                       break;
+                               }
+                               info.message("ldb search failed: " + res2.errstr + "\n");
                                continue;
                        }
                        previous_remaining = current_remaining;
@@ -232,7 +238,7 @@ function ldb_erase_partitions(info, ldb, ldapbackend)
                        
                        var res3 = ldb.search(anything, basedn, ldb.SCOPE_SUBTREE, attrs);
                        if (res3.error != 0) {
-                               info.message("ldb search failed: " + res.errstr + "\n");
+                               info.message("ldb search failed: " + res3.errstr + "\n");
                                continue;
                        }
                        if (res3.msgs.length != 0) {
@@ -563,6 +569,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 +692,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 +743,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);