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 "}";
}
#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\"
mprCreatePropertyValue(obj, "undefined", mprCreateUndefinedVar());
mprCreatePropertyValue(obj, "true", mprCreateBoolVar(1));
mprCreatePropertyValue(obj, "false", mprCreateBoolVar(0));
+ mprCreatePropertyValue(obj, "NULL", mprCreatePtrVar(NULL));
#if BLD_FEATURE_LEGACY_API
/*
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)
{
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,
#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
+
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);
-}
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);
-
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;
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;
}
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);
-}
-
-
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]);
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;
*/
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;
}
{
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);
}
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;
}
{
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;
}
{
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;
}
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);
}
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);
}
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);
}
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;
}
}
}
-
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) {
libinclude("base.js");
+echo = rpcecho_init();
+
/*
generate a ramp as an integer array
*/
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);
}
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);
}
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);
}
}
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);
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);
}
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);
}
}
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);
}
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);
}
/*
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);
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);
}
}
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);