summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-07-15 07:18:23 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:23:08 -0500
commita0bc4da1a307753e3b28a11863f50d66b0894190 (patch)
treed16430b5a02dd01188c7aa1722181eb947ec9442
parent7b8332369f3664af13bd7760561765a35c312b9e (diff)
downloadsamba-a0bc4da1a307753e3b28a11863f50d66b0894190.tar.gz
samba-a0bc4da1a307753e3b28a11863f50d66b0894190.tar.bz2
samba-a0bc4da1a307753e3b28a11863f50d66b0894190.zip
r8483: switched our generated ejs rpc code over to the new OO interface. This
means we don't pollute the name space, and also makes for faster startup times as we only create variables for the pipes that we use, not all pipes (This used to be commit 57d7a585e8162d21c7152952aa0cc7471968784f)
-rw-r--r--source4/build/pidl/Parse/Pidl/Samba/EJS.pm20
-rw-r--r--source4/lib/appweb/ejs/ejsProcs.c1
-rw-r--r--source4/scripting/ejs/ejsrpc.c19
-rw-r--r--source4/scripting/ejs/ejsrpc.h7
-rw-r--r--source4/scripting/ejs/smbcalls.c7
-rw-r--r--source4/scripting/ejs/smbcalls.h1
-rw-r--r--source4/scripting/ejs/smbcalls_rpc.c30
-rw-r--r--source4/scripting/ejs/smbscript.c2
-rw-r--r--source4/scripting/libjs/samr.js29
-rw-r--r--source4/web_server/http.c2
-rwxr-xr-xtestprogs/ejs/echo.js38
-rwxr-xr-xtestprogs/ejs/nbtstats5
12 files changed, 54 insertions, 107 deletions
diff --git a/source4/build/pidl/Parse/Pidl/Samba/EJS.pm b/source4/build/pidl/Parse/Pidl/Samba/EJS.pm
index d2d8b41507..0aa8de7c93 100644
--- a/source4/build/pidl/Parse/Pidl/Samba/EJS.pm
+++ b/source4/build/pidl/Parse/Pidl/Samba/EJS.pm
@@ -689,33 +689,30 @@ sub EjsInterface($$)
EjsConst($d);
}
- pidl "void setup_ejs_$name(void)";
+ pidl "static int ejs_$name\_init(int eid, int argc, struct MprVar **argv)";
pidl "{";
indent;
+ pidl "struct MprVar obj = mprObject(\"$name\");";
foreach (@fns) {
- pidl "ejsDefineCFunction(-1, \"dcerpc_$_\", ejs_$_, NULL, MPR_VAR_SCRIPT_HANDLE);";
+ pidl "mprSetCFunction(&obj, \"$_\", ejs_$_);";
}
- deindent;
- pidl "}\n";
-
- pidl "void setup_ejs_constants_$name(int eid)";
- pidl "{";
- indent;
foreach my $v (keys %constants) {
my $value = $constants{$v};
if (substr($value, 0, 1) eq "\"") {
- pidl "ejs_set_constant_string(eid, \"$v\", $value);";
+ pidl "mprSetVar(&obj, \"$v\", mprString($value));";
} else {
- pidl "ejs_set_constant_int(eid, \"$v\", $value);";
+ pidl "mprSetVar(&obj, \"$v\", mprCreateNumberVar($value));";
}
}
+ pidl "mpr_Return(eid, obj);";
+ pidl "return 0;";
deindent;
pidl "}\n";
pidl "NTSTATUS ejs_init_$name(void)";
pidl "{";
indent;
- pidl "return smbcalls_register_ejs(\"$name\", setup_ejs_$name, setup_ejs_constants_$name);";
+ pidl "return smbcalls_register_ejs(\"$name\_init\", ejs_$name\_init);";
deindent;
pidl "}";
}
@@ -734,6 +731,7 @@ sub Parse($$)
#include \"includes.h\"
#include \"lib/appweb/ejs/ejs.h\"
#include \"scripting/ejs/ejsrpc.h\"
+#include \"scripting/ejs/smbcalls.h\"
#include \"librpc/gen_ndr/ndr_misc_ejs.h\"
#include \"$hdr\"
#include \"$ejs_hdr\"
diff --git a/source4/lib/appweb/ejs/ejsProcs.c b/source4/lib/appweb/ejs/ejsProcs.c
index c01f411161..adef6e898a 100644
--- a/source4/lib/appweb/ejs/ejsProcs.c
+++ b/source4/lib/appweb/ejs/ejsProcs.c
@@ -629,6 +629,7 @@ int ejsDefineStandardProperties(MprVar *obj)
mprCreatePropertyValue(obj, "undefined", mprCreateUndefinedVar());
mprCreatePropertyValue(obj, "true", mprCreateBoolVar(1));
mprCreatePropertyValue(obj, "false", mprCreateBoolVar(0));
+ mprCreatePropertyValue(obj, "NULL", mprCreatePtrVar(NULL));
#if BLD_FEATURE_LEGACY_API
/*
diff --git a/source4/scripting/ejs/ejsrpc.c b/source4/scripting/ejs/ejsrpc.c
index e152c8fcd1..08bc4a94ba 100644
--- a/source4/scripting/ejs/ejsrpc.c
+++ b/source4/scripting/ejs/ejsrpc.c
@@ -229,25 +229,6 @@ NTSTATUS ejs_push_string(struct ejs_rpc *ejs,
return mprSetVar(v, name, mprString(s));
}
-/*
- setup a constant int
-*/
-void ejs_set_constant_int(int eid, const char *name, int value)
-{
- struct MprVar *v = ejsGetGlobalObject(eid);
- mprSetVar(v, name, mprCreateIntegerVar(value));
-}
-
-/*
- setup a constant string
-*/
-void ejs_set_constant_string(int eid, const char *name, const char *value)
-{
- struct MprVar *v = ejsGetGlobalObject(eid);
- mprSetVar(v, name, mprCreateStringVar(value, False));
-}
-
-
NTSTATUS ejs_pull_dom_sid(struct ejs_rpc *ejs,
struct MprVar *v, const char *name, struct dom_sid *r)
{
diff --git a/source4/scripting/ejs/ejsrpc.h b/source4/scripting/ejs/ejsrpc.h
index e4b623750d..dbd147fe1d 100644
--- a/source4/scripting/ejs/ejsrpc.h
+++ b/source4/scripting/ejs/ejsrpc.h
@@ -36,12 +36,8 @@ typedef NTSTATUS (*ejs_push_function_t)(struct ejs_rpc *, struct MprVar *, const
NTSTATUS ejs_panic(struct ejs_rpc *ejs, const char *why);
void ejs_set_switch(struct ejs_rpc *ejs, uint32_t switch_var);
-typedef void (*ejs_setup_t)(void);
-typedef void (*ejs_constants_t)(int);
+NTSTATUS smbcalls_register_ejs(const char *name, MprCFunction fn);
-NTSTATUS smbcalls_register_ejs(const char *name,
- ejs_setup_t setup,
- ejs_constants_t constants);
int ejs_rpc_call(int eid, int argc, struct MprVar **argv,
const struct dcerpc_interface_table *iface, int callnum,
@@ -120,3 +116,4 @@ BOOL ejs_pull_null(struct ejs_rpc *ejs, struct MprVar *v, const char *name);
#define ejs_push_dom_sid2 ejs_push_dom_sid
#define ejs_pull_NTTIME_hyper ejs_pull_NTTIME
#define ejs_push_NTTIME_hyper ejs_push_NTTIME
+
diff --git a/source4/scripting/ejs/smbcalls.c b/source4/scripting/ejs/smbcalls.c
index 49bcc64c96..59e5b17034 100644
--- a/source4/scripting/ejs/smbcalls.c
+++ b/source4/scripting/ejs/smbcalls.c
@@ -132,10 +132,3 @@ void smb_setup_ejs_functions(void)
ejsDefineStringCFunction(-1, "libinclude", ejs_libinclude, NULL, MPR_VAR_SCRIPT_HANDLE);
}
-/*
- setup constants that can be used from ejs
-*/
-void smb_setup_ejs_constants(int eid)
-{
- smb_setup_ejs_rpc_constants(eid);
-}
diff --git a/source4/scripting/ejs/smbcalls.h b/source4/scripting/ejs/smbcalls.h
index aa5c27b4f5..927c3ccf2f 100644
--- a/source4/scripting/ejs/smbcalls.h
+++ b/source4/scripting/ejs/smbcalls.h
@@ -28,4 +28,3 @@ 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_rpc.c b/source4/scripting/ejs/smbcalls_rpc.c
index ccb2026446..8e7bf57972 100644
--- a/source4/scripting/ejs/smbcalls_rpc.c
+++ b/source4/scripting/ejs/smbcalls_rpc.c
@@ -361,16 +361,13 @@ done:
static struct ejs_register {
struct ejs_register *next, *prev;
const char *name;
- ejs_setup_t setup;
- ejs_constants_t constants;
+ MprCFunction fn;
} *ejs_registered;
/*
register a generated ejs module
*/
- NTSTATUS smbcalls_register_ejs(const char *name,
- ejs_setup_t setup,
- ejs_constants_t constants)
+ NTSTATUS smbcalls_register_ejs(const char *name, MprCFunction fn)
{
struct ejs_register *r;
void *ctx = ejs_registered;
@@ -380,8 +377,7 @@ static struct ejs_register {
r = talloc(ctx, struct ejs_register);
NT_STATUS_HAVE_NO_MEMORY(r);
r->name = name;
- r->setup = setup;
- r->constants = constants;
+ r->fn = fn;
DLIST_ADD(ejs_registered, r);
return NT_STATUS_OK;
}
@@ -396,24 +392,6 @@ void smb_setup_ejs_rpc(void)
ejsDefineCFunction(-1, "rpc_connect", ejs_rpc_connect, NULL, MPR_VAR_SCRIPT_HANDLE);
ejsDefineCFunction(-1, "irpc_connect", ejs_irpc_connect, NULL, MPR_VAR_SCRIPT_HANDLE);
for (r=ejs_registered;r;r=r->next) {
- r->setup();
+ ejsDefineCFunction(-1, r->name, r->fn, NULL, MPR_VAR_SCRIPT_HANDLE);
}
}
-
-/*
- setup constants for rpc calls
-*/
-void smb_setup_ejs_rpc_constants(int eid)
-{
- struct ejs_register *r;
- struct MprVar v;
-
- for (r=ejs_registered;r;r=r->next) {
- r->constants(eid);
- }
-
- v = mprCreatePtrVar(NULL);
- mprSetProperty(ejsGetGlobalObject(eid), "NULL", &v);
-}
-
-
diff --git a/source4/scripting/ejs/smbscript.c b/source4/scripting/ejs/smbscript.c
index d71d084779..8359629a85 100644
--- a/source4/scripting/ejs/smbscript.c
+++ b/source4/scripting/ejs/smbscript.c
@@ -71,8 +71,6 @@ void ejs_exception(const char *reason)
exit(127);
}
- smb_setup_ejs_constants(eid);
-
/* setup ARGV[] in the ejs environment */
for (i=1;argv[i];i++) {
argv_list = str_list_add(argv_list, argv[i]);
diff --git a/source4/scripting/libjs/samr.js b/source4/scripting/libjs/samr.js
index a1f79b541a..2363dde686 100644
--- a/source4/scripting/libjs/samr.js
+++ b/source4/scripting/libjs/samr.js
@@ -18,7 +18,7 @@ function samArray(output)
if (output.sam == NULL) {
return list;
}
- var entries = output.sam.entries;
+ var i, entries = output.sam.entries;
for (i=0;i<output.num_entries;i++) {
list[i] = new Object();
list[i].name = entries[i].name;
@@ -32,10 +32,12 @@ function samArray(output)
*/
function samrConnect(conn)
{
+ conn.samr = samr_init();
+ conn.sec = security_init();
var io = irpcObj();
io.input.system_name = NULL;
- io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
- status = dcerpc_samr_Connect(conn, io);
+ io.input.access_mask = conn.sec.SEC_FLAG_MAXIMUM_ALLOWED;
+ var status = conn.samr.samr_Connect2(conn, io);
check_status_ok(status);
return io.output.connect_handle;
}
@@ -47,7 +49,7 @@ function samrClose(conn, handle)
{
var io = irpcObj();
io.input.handle = handle;
- status = dcerpc_samr_Close(conn, io);
+ var status = conn.samr.samr_Close(conn, io);
check_status_ok(status);
}
@@ -59,7 +61,7 @@ function samrLookupDomain(conn, handle, domain)
var io = irpcObj();
io.input.connect_handle = handle;
io.input.domain_name = domain;
- status = dcerpc_samr_LookupDomain(conn, io);
+ var status = conn.samr.samr_LookupDomain(conn, io);
check_status_ok(status);
return io.output.sid;
}
@@ -71,9 +73,9 @@ function samrOpenDomain(conn, handle, sid)
{
var io = irpcObj();
io.input.connect_handle = handle;
- io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
+ io.input.access_mask = conn.sec.SEC_FLAG_MAXIMUM_ALLOWED;
io.input.sid = sid;
- status = dcerpc_samr_OpenDomain(conn, io);
+ var status = conn.samr.samr_OpenDomain(conn, io);
check_status_ok(status);
return io.output.domain_handle;
}
@@ -85,9 +87,9 @@ function samrOpenUser(conn, handle, rid)
{
var io = irpcObj();
io.input.domain_handle = handle;
- io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
+ io.input.access_mask = conn.sec.SEC_FLAG_MAXIMUM_ALLOWED;
io.input.rid = rid;
- status = dcerpc_samr_OpenUser(conn, io);
+ var status = conn.samr.samr_OpenUser(conn, io);
check_status_ok(status);
return io.output.user_handle;
}
@@ -102,7 +104,7 @@ function samrEnumDomainUsers(conn, dom_handle)
io.input.resume_handle = 0;
io.input.acct_flags = 0;
io.input.max_size = -1;
- status = dcerpc_samr_EnumDomainUsers(conn, io);
+ var status = conn.samr.samr_EnumDomainUsers(conn, io);
check_status_ok(status);
return samArray(io.output);
}
@@ -117,7 +119,7 @@ function samrEnumDomainGroups(conn, dom_handle)
io.input.resume_handle = 0;
io.input.acct_flags = 0;
io.input.max_size = -1;
- status = dcerpc_samr_EnumDomainGroups(conn, io);
+ var status = conn.samr.samr_EnumDomainGroups(conn, io);
check_status_ok(status);
return samArray(io.output);
}
@@ -131,7 +133,7 @@ function samrEnumDomains(conn, handle)
io.input.connect_handle = handle;
io.input.resume_handle = 0;
io.input.buf_size = -1;
- status = dcerpc_samr_EnumDomains(conn, io);
+ var status = conn.samr.samr_EnumDomains(conn, io);
check_status_ok(status);
return samArray(io.output);
}
@@ -144,7 +146,7 @@ function samrQueryUserInfo(conn, user_handle, level)
var r, io = irpcObj();
io.input.user_handle = user_handle;
io.input.level = level;
- status = dcerpc_samr_QueryUserInfo(conn, io);
+ var status = conn.samr.samr_QueryUserInfo(conn, io);
check_status_ok(status);
return io.output.info.info3;
}
@@ -167,4 +169,3 @@ function samrFillUserInfo(conn, dom_handle, users, level)
}
}
-
diff --git a/source4/web_server/http.c b/source4/web_server/http.c
index d6d8196ced..ec4b7770a6 100644
--- a/source4/web_server/http.c
+++ b/source4/web_server/http.c
@@ -822,8 +822,6 @@ void http_process_input(struct websrv_context *web)
esp->req = espCreateRequest(web, web->input.url, esp->variables);
if (esp->req == NULL) goto internal_error;
- smb_setup_ejs_constants(esp->req->eid);
-
/* work out the mime type */
p = strrchr(web->input.url, '.');
if (p == NULL) {
diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js
index e5b0b2b1bf..d464f8623e 100755
--- a/testprogs/ejs/echo.js
+++ b/testprogs/ejs/echo.js
@@ -16,6 +16,8 @@ if (ok == false) {
libinclude("base.js");
+echo = rpcecho_init();
+
/*
generate a ramp as an integer array
*/
@@ -40,7 +42,7 @@ function test_AddOne(conn)
for (i=0;i<10;i++) {
io.input.in_data = i;
- status = dcerpc_echo_AddOne(conn, io);
+ status = echo.echo_AddOne(conn, io);
check_status_ok(status);
assert(io.output.out_data == i + 1);
}
@@ -58,7 +60,7 @@ function test_EchoData(conn)
for (i=0; i<30; i=i+5) {
io.input.len = i;
io.input.in_data = ramp_array(i);
- status = dcerpc_echo_EchoData(conn, io);
+ status = echo.echo_EchoData(conn, io);
check_status_ok(status);
check_array_equal(io.input.in_data, io.output.out_data);
}
@@ -77,7 +79,7 @@ function test_SinkData(conn)
for (i=0; i<30; i=i+5) {
io.input.len = i;
io.input.data = ramp_array(i);
- status = dcerpc_echo_SinkData(conn, io);
+ status = echo.echo_SinkData(conn, io);
check_status_ok(status);
}
}
@@ -94,7 +96,7 @@ function test_SourceData(conn)
for (i=0; i<30; i=i+5) {
io.input.len = i;
- status = dcerpc_echo_SourceData(conn, io);
+ status = echo.echo_SourceData(conn, io);
check_status_ok(status);
correct = ramp_array(i);
check_array_equal(correct, io.output.data);
@@ -112,7 +114,7 @@ function test_TestCall(conn)
print("Testing echo_TestCall\n");
io.input.s1 = "my test string";
- status = dcerpc_echo_TestCall(conn, io);
+ status = echo.echo_TestCall(conn, io);
check_status_ok(status);
assert("this is a test string" == io.output.s2);
}
@@ -128,7 +130,7 @@ function test_TestCall2(conn)
for (i=1;i<=7;i++) {
io.input.level = i;
- status = dcerpc_echo_TestCall2(conn, io);
+ status = echo.echo_TestCall2(conn, io);
check_status_ok(status);
}
}
@@ -143,7 +145,7 @@ function test_TestSleep(conn)
print("Testing echo_TestSleep\n");
io.input.seconds = 1;
- status = dcerpc_echo_TestSleep(conn, io);
+ status = echo.echo_TestSleep(conn, io);
check_status_ok(status);
}
@@ -156,18 +158,18 @@ function test_TestEnum(conn)
print("Testing echo_TestEnum\n");
- io.input.foo1 = ECHO_ENUM1;
+ io.input.foo1 = echo.ECHO_ENUM1;
io.input.foo2 = new Object();
- io.input.foo2.e1 = ECHO_ENUM1;
- io.input.foo2.e2 = ECHO_ENUM1_32;
+ io.input.foo2.e1 = echo.ECHO_ENUM1;
+ io.input.foo2.e2 = echo.ECHO_ENUM1_32;
io.input.foo3 = new Object();
- io.input.foo3.e1 = ECHO_ENUM2;
- status = dcerpc_echo_TestEnum(conn, io);
+ io.input.foo3.e1 = echo.ECHO_ENUM2;
+ status = echo.echo_TestEnum(conn, io);
check_status_ok(status);
- assert(io.output.foo1 == ECHO_ENUM1);
- assert(io.output.foo2.e1 == ECHO_ENUM2);
- assert(io.output.foo2.e2 == ECHO_ENUM1_32);
- assert(io.output.foo3.e1 == ECHO_ENUM2);
+ assert(io.output.foo1 == echo.ECHO_ENUM1);
+ assert(io.output.foo2.e1 == echo.ECHO_ENUM2);
+ assert(io.output.foo2.e2 == echo.ECHO_ENUM1_32);
+ assert(io.output.foo3.e1 == echo.ECHO_ENUM2);
}
/*
@@ -182,7 +184,7 @@ function test_TestSurrounding(conn)
io.input.data = new Object();
io.input.data.x = 10;
io.input.data.surrounding = ramp_array(10);
- status = dcerpc_echo_TestSurrounding(conn, io);
+ status = echo.echo_TestSurrounding(conn, io);
check_status_ok(status);
assert(io.output.data.surrounding.length == 20);
check_array_zero(io.output.data.surrounding);
@@ -198,7 +200,7 @@ function test_TestDoublePointer(conn)
print("Testing echo_TestDoublePointer\n");
io.input.data = 7;
- status = dcerpc_echo_TestDoublePointer(conn, io);
+ status = echo.echo_TestDoublePointer(conn, io);
check_status_ok(status);
assert(io.input.data == io.input.data);
}
diff --git a/testprogs/ejs/nbtstats b/testprogs/ejs/nbtstats
index fe93a728cd..20bc781f03 100755
--- a/testprogs/ejs/nbtstats
+++ b/testprogs/ejs/nbtstats
@@ -14,14 +14,15 @@ if (ok == false) {
}
var conn = new Object();
+var irpc = irpc_init();
status = irpc_connect(conn, "nbt_server");
assert(status.is_ok == true);
io = new Object();
io.input = new Object();
-io.input.level = NBTD_INFO_STATISTICS;
-status = dcerpc_nbtd_information(conn, io);
+io.input.level = irpc.NBTD_INFO_STATISTICS;
+status = irpc.nbtd_information(conn, io);
assert(status.is_ok == true);
assert(io.results.length == 1);