svn commit: samba r8260 - in branches/SAMBA_4_0/source: build/pidl
librpc scripting/ejs
tridge at samba.org
tridge at samba.org
Sat Jul 9 11:48:59 GMT 2005
Author: tridge
Date: 2005-07-09 11:48:59 +0000 (Sat, 09 Jul 2005)
New Revision: 8260
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=8260
Log:
added an init based registration system for the generated ejs rpc code, so
adding a new pipe only involves changes to librpc/config.mk
Modified:
branches/SAMBA_4_0/source/build/pidl/ejs.pm
branches/SAMBA_4_0/source/librpc/config.mk
branches/SAMBA_4_0/source/scripting/ejs/ejsrpc.h
branches/SAMBA_4_0/source/scripting/ejs/smbcalls_rpc.c
Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/ejs.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/ejs.pm 2005-07-09 11:17:33 UTC (rev 8259)
+++ branches/SAMBA_4_0/source/build/pidl/ejs.pm 2005-07-09 11:48:59 UTC (rev 8260)
@@ -674,13 +674,16 @@
pidl "void setup_ejs_$name(void)";
pidl "{";
+ indent;
foreach (@fns) {
pidl "ejsDefineCFunction(-1, \"dcerpc_$_\", ejs_$_, NULL, MPR_VAR_SCRIPT_HANDLE);";
}
+ 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 "\"") {
@@ -689,6 +692,14 @@
pidl "ejs_set_constant_int(eid, \"$v\", $value);";
}
}
+ deindent;
+ pidl "}\n";
+
+ pidl "NTSTATUS ejs_init_$name(void)";
+ pidl "{";
+ indent;
+ pidl "return smbcalls_register_ejs(\"$name\", setup_ejs_$name, setup_ejs_constants_$name);";
+ deindent;
pidl "}";
}
Modified: branches/SAMBA_4_0/source/librpc/config.mk
===================================================================
--- branches/SAMBA_4_0/source/librpc/config.mk 2005-07-09 11:17:33 UTC (rev 8259)
+++ branches/SAMBA_4_0/source/librpc/config.mk 2005-07-09 11:48:59 UTC (rev 8260)
@@ -552,26 +552,31 @@
################################################
[SUBSYSTEM::RPC_EJS_ECHO]
+INIT_FUNCTION = ejs_init_rpcecho
OBJ_FILES = librpc/gen_ndr/ndr_echo_ejs.o
REQUIRED_SUBSYSTEMS = RPC NDR_ECHO
NOPROTO = YES
[SUBSYSTEM::RPC_EJS_MISC]
+INIT_FUNCTION = ejs_init_misc
OBJ_FILES = librpc/gen_ndr/ndr_misc_ejs.o
REQUIRED_SUBSYSTEMS = RPC NDR_MISC
NOPROTO = YES
[SUBSYSTEM::RPC_EJS_SAMR]
+INIT_FUNCTION = ejs_init_samr
OBJ_FILES = librpc/gen_ndr/ndr_samr_ejs.o
REQUIRED_SUBSYSTEMS = RPC NDR_SAMR
NOPROTO = YES
[SUBSYSTEM::RPC_EJS_SECURITY]
+INIT_FUNCTION = ejs_init_security
OBJ_FILES = librpc/gen_ndr/ndr_security_ejs.o
REQUIRED_SUBSYSTEMS = RPC LIB_SECURITY_NDR
NOPROTO = YES
[SUBSYSTEM::RPC_EJS_LSA]
+INIT_FUNCTION = ejs_init_lsarpc
OBJ_FILES = librpc/gen_ndr/ndr_lsa_ejs.o
REQUIRED_SUBSYSTEMS = RPC NDR_LSA
NOPROTO = YES
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsrpc.h
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/ejsrpc.h 2005-07-09 11:17:33 UTC (rev 8259)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsrpc.h 2005-07-09 11:48:59 UTC (rev 8260)
@@ -36,6 +36,13 @@
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,
+ ejs_setup_t setup,
+ ejs_constants_t constants);
+
int ejs_rpc_call(int eid, int argc, struct MprVar **argv, const char *callname,
ejs_pull_function_t ejs_pull, ejs_push_function_t ejs_push);
Modified: branches/SAMBA_4_0/source/scripting/ejs/smbcalls_rpc.c
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/smbcalls_rpc.c 2005-07-09 11:17:33 UTC (rev 8259)
+++ branches/SAMBA_4_0/source/scripting/ejs/smbcalls_rpc.c 2005-07-09 11:48:59 UTC (rev 8260)
@@ -25,6 +25,7 @@
#include "librpc/gen_ndr/ndr_echo.h"
#include "lib/cmdline/popt_common.h"
#include "scripting/ejs/ejsrpc.h"
+#include "dlinklist.h"
/*
connect to an rpc server
@@ -175,22 +176,46 @@
}
+/* a list of registered ejs rpc modules */
+static struct ejs_register {
+ struct ejs_register *next, *prev;
+ const char *name;
+ ejs_setup_t setup;
+ ejs_constants_t constants;
+} *ejs_registered;
+
/*
+ register a generated ejs module
+*/
+ NTSTATUS smbcalls_register_ejs(const char *name,
+ ejs_setup_t setup,
+ ejs_constants_t constants)
+{
+ struct ejs_register *r;
+ void *ctx = ejs_registered;
+ if (ctx == NULL) {
+ ctx = talloc_autofree_context();
+ }
+ r = talloc(ctx, struct ejs_register);
+ NT_STATUS_HAVE_NO_MEMORY(r);
+ r->name = name;
+ r->setup = setup;
+ r->constants = constants;
+ DLIST_ADD(ejs_registered, r);
+ return NT_STATUS_OK;
+}
+
+/*
setup C functions that be called from ejs
*/
void smb_setup_ejs_rpc(void)
{
- void setup_ejs_rpcecho(void);
- void setup_ejs_samr(void);
- void setup_ejs_misc(void);
- void setup_ejs_security(void);
+ struct ejs_register *r;
ejsDefineCFunction(-1, "rpc_connect", ejs_rpc_connect, NULL, MPR_VAR_SCRIPT_HANDLE);
-
- setup_ejs_rpcecho();
- setup_ejs_samr();
- setup_ejs_misc();
- setup_ejs_security();
+ for (r=ejs_registered;r;r=r->next) {
+ r->setup();
+ }
}
/*
@@ -198,18 +223,15 @@
*/
void smb_setup_ejs_rpc_constants(int eid)
{
+ struct ejs_register *r;
struct MprVar v;
- void setup_ejs_constants_rpcecho(int);
- void setup_ejs_constants_samr(int);
- void setup_ejs_constants_misc(int);
- void setup_ejs_constants_security(int);
+ for (r=ejs_registered;r;r=r->next) {
+ r->constants(eid);
+ }
- setup_ejs_constants_rpcecho(eid);
- setup_ejs_constants_samr(eid);
- setup_ejs_constants_misc(eid);
- setup_ejs_constants_security(eid);
-
v = mprCreatePtrVar(NULL, "NULL");
mprSetProperty(ejsGetGlobalObject(eid), "NULL", &v);
}
+
+
More information about the samba-cvs
mailing list