diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-11-02 06:41:11 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:45:41 -0500 |
commit | c845ab1e60f2c97410fa4d530aa594f1f3d5fe55 (patch) | |
tree | 684ba0b1cb4859846ec4304ce32329823782972d /source4/scripting/libjs | |
parent | 66d3ee9ccb9807ca443962ef2a887627505c537c (diff) | |
download | samba-c845ab1e60f2c97410fa4d530aa594f1f3d5fe55.tar.gz samba-c845ab1e60f2c97410fa4d530aa594f1f3d5fe55.tar.bz2 samba-c845ab1e60f2c97410fa4d530aa594f1f3d5fe55.zip |
r11474: - enable ldb transactions from ejs
- speed up provisioning a bit using a ldb transaction (also means you
can't end up with a ldb being half done)
(This used to be commit 91dfe304cf688bb81b69ff3192ac84b78b34b311)
Diffstat (limited to 'source4/scripting/libjs')
-rw-r--r-- | source4/scripting/libjs/provision.js | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/source4/scripting/libjs/provision.js b/source4/scripting/libjs/provision.js index 6b76d2bc1f..8c2398e74e 100644 --- a/source4/scripting/libjs/provision.js +++ b/source4/scripting/libjs/provision.js @@ -128,9 +128,12 @@ function hostname() function ldb_delete(ldb) { println("Deleting " + ldb.filename); - sys.unlink(ldb.filename); + var lp = loadparm_init(); + sys.unlink(sprintf("%s/%s", lp.get("private dir"), ldb.filename)); + ldb.transaction_cancel(); ldb.close(); var ok = ldb.connect(ldb.filename); + ldb.transaction_start(); assert(ok); } @@ -148,7 +151,7 @@ function ldb_erase(ldb) ldb.del("@MODULES"); /* and the rest */ - var res = ldb.search("(|(objectclass=*)(dn=*))", attrs); + var res = ldb.search("(&(|(objectclass=*)(dn=*))(!(dn=@BASEINFO)))", attrs); var i; if (typeof(res) == "undefined") { ldb_delete(ldb); @@ -157,12 +160,13 @@ function ldb_erase(ldb) for (i=0;i<res.length;i++) { ldb.del(res[i].dn); } - res = ldb.search("(|(objectclass=*)(dn=*))", attrs); + var res = ldb.search("(&(|(objectclass=*)(dn=*))(!(dn=@BASEINFO)))", attrs); if (res.length != 0) { ldb_delete(ldb); return; } assert(res.length == 0); + ldb_delete(ldb); } /* @@ -194,12 +198,15 @@ function setup_ldb(ldif, dbname, subobj) var connect_ok = ldb.connect(dbname); assert(connect_ok); + ldb.transaction_start(); + if (erase) { ldb_erase(ldb); } var add_ok = ldb.add(data); assert(add_ok); + ldb.transaction_commit(); } /* @@ -279,6 +286,8 @@ function provision(subobj, message, blank, paths) setup_ldb("hklm.ldif", paths.hklm, subobj); message("Setting up sam.ldb attributes\n"); setup_ldb("provision_init.ldif", paths.samdb, subobj); +// message("Setting up sam.ldb objectclasses\n"); +// setup_ldb("schema_classes.ldif", paths.samdb, subobj, NULL, false); message("Setting up sam.ldb templates\n"); setup_ldb("provision_templates.ldif", paths.samdb, subobj, NULL, false); message("Setting up sam.ldb data\n"); @@ -394,6 +403,8 @@ function newuser(username, unixname, password, message) var ok = ldb.connect(samdb); assert(ok); + ldb.transaction_start(); + /* find the DNs for the domain and the domain users group */ var domain_dn = searchone(ldb, "objectClass=domainDNS", "dn"); assert(domain_dn != undefined); @@ -451,7 +462,11 @@ member: %s /* modify the userAccountControl to remove the disabled bit */ - return enable_account(ldb, user_dn); + ok = enable_account(ldb, user_dn); + if (ok) { + ldb.transaction_commit(); + } + return ok; } // Check whether a name is valid as a NetBIOS name. |