svn commit: samba r11474 - in branches/SAMBA_4_0/source/scripting: ejs libjs

tridge at samba.org tridge at samba.org
Wed Nov 2 06:41:11 GMT 2005


Author: tridge
Date: 2005-11-02 06:41:11 +0000 (Wed, 02 Nov 2005)
New Revision: 11474

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=11474

Log:

- 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)

Modified:
   branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c
   branches/SAMBA_4_0/source/scripting/libjs/provision.js


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c	2005-11-02 05:34:17 UTC (rev 11473)
+++ branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c	2005-11-02 06:41:11 UTC (rev 11474)
@@ -397,6 +397,84 @@
 
 
 /*
+  start a ldb transaction
+  usage:
+   ok = ldb.transaction_start();
+*/
+static int ejs_ldbTransactionStart(MprVarHandle eid, int argc, struct MprVar **argv)
+{
+	struct ldb_context *ldb;
+	int ret;
+
+	if (argc != 0) {
+		ejsSetErrorMsg(eid, "ldb.transaction_start invalid arguments");
+		return -1;
+	}
+
+	ldb = ejs_get_ldb_context(eid);
+	if (ldb == NULL) {
+		return -1;
+	}
+
+	ret = ldb_transaction_start(ldb);
+
+	mpr_Return(eid, mprCreateBoolVar(ret == 0));
+	return 0;
+}
+
+/*
+  cancel a ldb transaction
+  usage:
+   ok = ldb.transaction_cancel();
+*/
+static int ejs_ldbTransactionCancel(MprVarHandle eid, int argc, struct MprVar **argv)
+{
+	struct ldb_context *ldb;
+	int ret;
+
+	if (argc != 0) {
+		ejsSetErrorMsg(eid, "ldb.transaction_cancel invalid arguments");
+		return -1;
+	}
+
+	ldb = ejs_get_ldb_context(eid);
+	if (ldb == NULL) {
+		return -1;
+	}
+
+	ret = ldb_transaction_cancel(ldb);
+
+	mpr_Return(eid, mprCreateBoolVar(ret == 0));
+	return 0;
+}
+
+/*
+  commit a ldb transaction
+  usage:
+   ok = ldb.transaction_commit();
+*/
+static int ejs_ldbTransactionCommit(MprVarHandle eid, int argc, struct MprVar **argv)
+{
+	struct ldb_context *ldb;
+	int ret;
+
+	if (argc != 0) {
+		ejsSetErrorMsg(eid, "ldb.transaction_commit invalid arguments");
+		return -1;
+	}
+
+	ldb = ejs_get_ldb_context(eid);
+	if (ldb == NULL) {
+		return -1;
+	}
+
+	ret = ldb_transaction_commit(ldb);
+
+	mpr_Return(eid, mprCreateBoolVar(ret == 0));
+	return 0;
+}
+
+/*
   initialise ldb ejs subsystem
 */
 static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv)
@@ -413,6 +491,9 @@
 	mprSetCFunction(ldb, "encode", ejs_base64encode);
 	mprSetCFunction(ldb, "decode", ejs_base64decode);
 	mprSetCFunction(ldb, "close", ejs_ldbClose);
+	mprSetCFunction(ldb, "transaction_start", ejs_ldbTransactionStart);
+	mprSetCFunction(ldb, "transaction_cancel", ejs_ldbTransactionCancel);
+	mprSetCFunction(ldb, "transaction_commit", ejs_ldbTransactionCommit);
 	mprSetVar(ldb, "SCOPE_BASE", mprCreateNumberVar(LDB_SCOPE_BASE));
 	mprSetVar(ldb, "SCOPE_ONE", mprCreateNumberVar(LDB_SCOPE_ONELEVEL));
 	mprSetVar(ldb, "SCOPE_SUBTREE", mprCreateNumberVar(LDB_SCOPE_SUBTREE));

Modified: branches/SAMBA_4_0/source/scripting/libjs/provision.js
===================================================================
--- branches/SAMBA_4_0/source/scripting/libjs/provision.js	2005-11-02 05:34:17 UTC (rev 11473)
+++ branches/SAMBA_4_0/source/scripting/libjs/provision.js	2005-11-02 06:41:11 UTC (rev 11474)
@@ -128,9 +128,12 @@
 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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	/*
 	  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. 



More information about the samba-cvs mailing list