summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/scripting/ejs/mprutil.c15
-rw-r--r--source4/scripting/ejs/smbcalls.h3
-rw-r--r--source4/scripting/ejs/smbcalls_ldb.c22
-rw-r--r--source4/scripting/libjs/provision.js4
-rw-r--r--swat/esptest/ldb.esp7
-rw-r--r--testprogs/ejs/ldb.js7
6 files changed, 46 insertions, 12 deletions
diff --git a/source4/scripting/ejs/mprutil.c b/source4/scripting/ejs/mprutil.c
index 49c4f74cd6..247cea0b06 100644
--- a/source4/scripting/ejs/mprutil.c
+++ b/source4/scripting/ejs/mprutil.c
@@ -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));
+}
diff --git a/source4/scripting/ejs/smbcalls.h b/source4/scripting/ejs/smbcalls.h
index 8002e3d8bb..aa5c27b4f5 100644
--- a/source4/scripting/ejs/smbcalls.h
+++ b/source4/scripting/ejs/smbcalls.h
@@ -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);
+
diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c
index 2df53ace4f..659ac11b1b 100644
--- a/source4/scripting/ejs/smbcalls_ldb.c
+++ b/source4/scripting/ejs/smbcalls_ldb.c
@@ -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);
}
diff --git a/source4/scripting/libjs/provision.js b/source4/scripting/libjs/provision.js
index 03360654c7..6d4e4a3bc0 100644
--- a/source4/scripting/libjs/provision.js
+++ b/source4/scripting/libjs/provision.js
@@ -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);
}
diff --git a/swat/esptest/ldb.esp b/swat/esptest/ldb.esp
index 385a8918c6..be894a1ea9 100644
--- a/swat/esptest/ldb.esp
+++ b/swat/esptest/ldb.esp
@@ -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
diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js
index 7675197904..133de27aef 100644
--- a/testprogs/ejs/ldb.js
+++ b/testprogs/ejs/ldb.js
@@ -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");