svn commit: samba r8339 - in branches/SAMBA_4_0/source/scripting/ejs: .

tridge at samba.org tridge at samba.org
Tue Jul 12 02:54:09 GMT 2005


Author: tridge
Date: 2005-07-12 02:54:09 +0000 (Tue, 12 Jul 2005)
New Revision: 8339

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

Log:
added ldbAdd(), ldbModify(), ldbDelete() and ldbRename() to ejs ldb functions

Modified:
   branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c	2005-07-12 02:36:07 UTC (rev 8338)
+++ branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c	2005-07-12 02:54:09 UTC (rev 8339)
@@ -85,10 +85,154 @@
 	return -1;
 }
 
+
 /*
+  perform an ldb add or modify
+*/
+static int ejs_ldbAddModify(MprVarHandle eid, int argc, char **argv,
+			    int fn(struct ldb_context *, const struct ldb_message *))
+{
+	const char *ldifstring, *dbfile;
+	struct ldb_context *ldb;
+	struct ldb_ldif *ldif;
+	int ret;
+
+	if (argc != 2) {
+		ejsSetErrorMsg(eid, "ldbAddModify invalid arguments");
+		return -1;
+	}
+
+	dbfile     = argv[0];
+	ldifstring = argv[1];
+
+	ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL);
+	if (ldb == NULL) {
+		ejsSetErrorMsg(eid, "ldbAddModify failed to open %s", dbfile);
+		goto failed;
+	}
+
+	ldif = ldb_ldif_read_string(ldb, ldifstring);
+	if (ldif == NULL) {
+		ejsSetErrorMsg(eid, "ldbAddModify invalid ldif");
+		goto failed;
+	}
+	ret = fn(ldb, ldif->msg);
+
+	mpr_Return(eid, mprCreateBoolVar(ret == 0));
+	talloc_free(ldb);
+	return 0;
+
+failed:
+	talloc_free(ldb);
+	return -1;
+}
+
+
+/*
+  perform an ldb delete
+  usage:
+   ok = ldbDelete(dbfile, dn);
+*/
+static int ejs_ldbDelete(MprVarHandle eid, int argc, char **argv)
+{
+	const char *dn, *dbfile;
+	struct ldb_context *ldb;
+	int ret;
+
+	if (argc != 2) {
+		ejsSetErrorMsg(eid, "ldbDelete invalid arguments");
+		return -1;
+	}
+
+	dbfile  = argv[0];
+	dn      = argv[1];
+
+	ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL);
+	if (ldb == NULL) {
+		ejsSetErrorMsg(eid, "ldbDelete failed to open %s", dbfile);
+		goto failed;
+	}
+
+	ret = ldb_delete(ldb, dn);
+
+	mpr_Return(eid, mprCreateBoolVar(ret == 0));
+	talloc_free(ldb);
+	return 0;
+
+failed:
+	talloc_free(ldb);
+	return -1;
+}
+
+/*
+  perform an ldb rename
+  usage:
+   ok = ldbRename(dbfile, dn1, dn2);
+*/
+static int ejs_ldbRename(MprVarHandle eid, int argc, char **argv)
+{
+	const char *dn1, *dn2, *dbfile;
+	struct ldb_context *ldb;
+	int ret;
+
+	if (argc != 3) {
+		ejsSetErrorMsg(eid, "ldbRename invalid arguments");
+		return -1;
+	}
+
+	dbfile = argv[0];
+	dn1    = argv[1];
+	dn2    = argv[2];
+
+	ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL);
+	if (ldb == NULL) {
+		ejsSetErrorMsg(eid, "ldbRename failed to open %s", dbfile);
+		goto failed;
+	}
+
+	ret = ldb_rename(ldb, dn1, dn2);
+
+	mpr_Return(eid, mprCreateBoolVar(ret == 0));
+	talloc_free(ldb);
+	return 0;
+
+failed:
+	talloc_free(ldb);
+	return -1;
+}
+
+/*
+  perform an ldb modify
+
+  syntax:
+    ok = ldbModify("dbfile", ldifstring);
+*/
+static int ejs_ldbAdd(MprVarHandle eid, int argc, char **argv)
+{
+	return ejs_ldbAddModify(eid, argc, argv, ldb_add);
+}
+
+/*
+  perform an ldb add
+
+  syntax:
+    ok = ldbAdd("dbfile", ldifstring);
+*/
+static int ejs_ldbModify(MprVarHandle eid, int argc, char **argv)
+{
+	return ejs_ldbAddModify(eid, argc, argv, ldb_modify);
+}
+
+
+
+/*
   setup C functions that be called from ejs
 */
 void smb_setup_ejs_ldb(void)
 {
 	ejsDefineCFunction(-1, "ldbSearch", ejs_ldbSearch, NULL, MPR_VAR_SCRIPT_HANDLE);
+	ejsDefineStringCFunction(-1, "ldbAdd", ejs_ldbAdd, NULL, MPR_VAR_SCRIPT_HANDLE);
+	ejsDefineStringCFunction(-1, "ldbModify", ejs_ldbModify, NULL, MPR_VAR_SCRIPT_HANDLE);
+	ejsDefineStringCFunction(-1, "ldbDelete", ejs_ldbDelete, NULL, MPR_VAR_SCRIPT_HANDLE);
+	ejsDefineStringCFunction(-1, "ldbRename", ejs_ldbRename, NULL, MPR_VAR_SCRIPT_HANDLE);
 }



More information about the samba-cvs mailing list