r8481: switched ldb ejs called over to an OO interface, so you do:
authorAndrew Tridgell <tridge@samba.org>
Fri, 15 Jul 2005 05:40:34 +0000 (05:40 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:23:07 +0000 (13:23 -0500)
var ldb = ldb_init();

res = ldb.search(dbfile, "(objectClass=user)");

you can also do:

ldbSearch = ldb.search;
res = ldbSearch(dbfile, "(objectClass=user)");

if you want the old interface (ie. you can use this to import
functions into the global or local namespace).

source/scripting/ejs/mprutil.c
source/scripting/ejs/smbcalls.h
source/scripting/ejs/smbcalls_ldb.c
source/scripting/libjs/provision.js
swat/esptest/ldb.esp
testprogs/ejs/ldb.js

index 49c4f74cd6be19e675144a68ea64b4fd6bcaea05..247cea0b06eb1779b80b915f03a2d5380a936a64 100644 (file)
@@ -367,3 +367,18 @@ void mpr_ReturnString(int eid, const char *s)
 }
 
 
+/*
+  set a C function in a variable
+*/
+ void mprSetCFunction(struct MprVar *obj, const char *name, MprCFunction fn)
+{
+       mprSetVar(obj, name, mprCreateCFunctionVar(fn, NULL, MPR_VAR_SCRIPT_HANDLE));
+}
+
+/*
+  set a string C function in a variable
+*/
+ void mprSetStringCFunction(struct MprVar *obj, const char *name, MprStringCFunction fn)
+{
+       mprSetVar(obj, name, mprCreateStringCFunctionVar(fn, NULL, MPR_VAR_SCRIPT_HANDLE));
+}
index 8002e3d8bb6af04fdd80142315b1b514e50d71d1..aa5c27b4f56eed4166ff93e24efde9cf342c57a5 100644 (file)
@@ -26,3 +26,6 @@ void mpr_Return(int eid, struct MprVar);
 NTSTATUS mprSetVar(struct MprVar *v, const char *name, struct MprVar val);
 NTSTATUS mprGetVar(struct MprVar **v, const char *name);
 void mprAddArray(struct MprVar *var, int i, struct MprVar v);
+void mprSetCFunction(struct MprVar *obj, const char *name, MprCFunction fn);
+void mprSetStringCFunction(struct MprVar *obj, const char *name, MprStringCFunction fn);
+
index 2df53ace4f20013a5948dcd218f936cdceda02dd..659ac11b1bae35e7eee9d3ecfbf5e3b73889e7f1 100644 (file)
@@ -222,6 +222,22 @@ static int ejs_ldbModify(MprVarHandle eid, int argc, char **argv)
        return ejs_ldbAddModify(eid, argc, argv, ldb_modify);
 }
 
+/*
+  initialise ldb ejs subsystem
+*/
+static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv)
+{
+       struct MprVar ldb = mprObject("ldb");
+
+       mprSetCFunction(&ldb, "search", ejs_ldbSearch);
+       mprSetStringCFunction(&ldb, "add", ejs_ldbAdd);
+       mprSetStringCFunction(&ldb, "modify", ejs_ldbModify);
+       mprSetStringCFunction(&ldb, "delete", ejs_ldbDelete);
+       mprSetStringCFunction(&ldb, "rename", ejs_ldbRename);
+
+       mpr_Return(eid, ldb);
+       return 0;
+}
 
 
 /*
@@ -229,9 +245,5 @@ static int ejs_ldbModify(MprVarHandle eid, int argc, char **argv)
 */
 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);
+       ejsDefineCFunction(-1, "ldb_init", ejs_ldb_init, NULL, MPR_VAR_SCRIPT_HANDLE);
 }
index 03360654c7ba7df5a770f9a8c1185acedb4ad5e1..6d4e4a3bc0d8650c9bc384ab26371a30691bd902 100644 (file)
@@ -114,6 +114,8 @@ function hostname()
 function setup_ldb(ldif, dbname, subobj)
 {
        var extra = "";
+       var ldb = ldb_init();
+
        if (arguments.length == 4) {
                extra = arguments[3];
        }
@@ -127,7 +129,7 @@ function setup_ldb(ldif, dbname, subobj)
        data = data + extra;
        data = substitute_var(data, subobj);
 
-       ok = ldbAdd(db, data);
+       ok = ldb.add(db, data);
        assert(ok);
 }
 
index 385a8918c6ae5176d6f1b51af3fef84ad4ce16bd..be894a1ea9502df87da6f416f32b17de9d5cee6b 100644 (file)
@@ -7,8 +7,9 @@
 <%
 var dbfile = lpGet("sam database");
 var attrs = new Array("name", "dnsDomain", "objectSid", "dn");
+var ldb = ldb_init();
 
-res = ldbSearch(dbfile, "(objectClass=domain)", attrs);
+res = ldb.search(dbfile, "(objectClass=domain)", attrs);
 multi_table(res, "dn");
 %>
 
@@ -17,14 +18,14 @@ multi_table(res, "dn");
 <%
 var dbfile = lpGet("sam database");
 
-res = ldbSearch(dbfile, "(objectClass=user)");
+res = ldb.search(dbfile, "(objectClass=user)");
 multi_table(res, "dn");
 %>
 
 <h3>A search with bad arguments</h3>
 
 <%
-res = ldbSearch("foo");
+res = ldb.search("foo");
 %>
 
 all done
index 7675197904eb7c48ee40e23027a6189b97b25189..133de27aef80d482205668726a08c900a367f065 100644 (file)
@@ -6,19 +6,20 @@ println("Trying a attribute constrained search on samdb");
 
 var dbfile = lpGet("sam database");
 var attrs = new Array("name", "dnsDomain", "objectSid", "dn");
+var ldb = ldb_init();
 
-res = ldbSearch(dbfile, "(objectClass=domain)", attrs);
+res = ldb.search(dbfile, "(objectClass=domain)", attrs);
 
 printVars(res);
 
 println("and now an unconstrained search");
 
 var dbfile = lpGet("sam database");
-res = ldbSearch(dbfile, "(objectClass=user)");
+res = ldb.search(dbfile, "(objectClass=user)");
 printVars(res);
 
 println("and a bad search");
 
-res = ldbSearch("foo");
+res = ldb.search("foo");
 
 println("all done");