summaryrefslogtreecommitdiff
path: root/source4/scripting/ejs/ejsrpc.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-07-08 08:18:52 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:19:23 -0500
commitf55b2b96108d71197807b46af16085167556bf6e (patch)
tree2b566f6a0c7e16d8f65f3653c9737c68f3954be3 /source4/scripting/ejs/ejsrpc.c
parent0b92507760910872d5f0f3fe2c45f4f3af3466eb (diff)
downloadsamba-f55b2b96108d71197807b46af16085167556bf6e.tar.gz
samba-f55b2b96108d71197807b46af16085167556bf6e.tar.bz2
samba-f55b2b96108d71197807b46af16085167556bf6e.zip
r8233: - added support for more base types in pidl ejs
- added auto generation of a header with prototypes for public ejs functions - make public functions non-static - fixed allocation of fixed sized arrays - added 'noejs' flag indicating that a typedef will be handled manually by ejs - added manual functions for sid and GUID, so they show up as nice strings in ejs scripts This allows ejs to bring in samr, security, lsa and misc IDL functions (This used to be commit a8cb2dbdcc2871090a26f580f67db8f0636d1e7e)
Diffstat (limited to 'source4/scripting/ejs/ejsrpc.c')
-rw-r--r--source4/scripting/ejs/ejsrpc.c108
1 files changed, 105 insertions, 3 deletions
diff --git a/source4/scripting/ejs/ejsrpc.c b/source4/scripting/ejs/ejsrpc.c
index 6536b94ca4..ab0f64d5aa 100644
--- a/source4/scripting/ejs/ejsrpc.c
+++ b/source4/scripting/ejs/ejsrpc.c
@@ -23,6 +23,7 @@
#include "includes.h"
#include "lib/ejs/ejs.h"
#include "scripting/ejs/ejsrpc.h"
+#include "librpc/gen_ndr/ndr_security.h"
NTSTATUS ejs_pull_rpc(int eid, const char *callname,
struct MprVar *v, void *ptr, ejs_pull_function_t ejs_pull)
@@ -235,6 +236,63 @@ NTSTATUS ejs_push_hyper(struct ejs_rpc *ejs,
return mprSetVar(v, name, mprCreateIntegerVar(*r));
}
+NTSTATUS ejs_pull_dlong(struct ejs_rpc *ejs,
+ struct MprVar *v, const char *name, uint64_t *r)
+{
+ struct MprVar *var;
+ var = mprGetVar(v, name);
+ if (var == NULL) {
+ DEBUG(1,("ejs_pull_dlong: unable to find '%s'\n", name));
+ return NT_STATUS_INVALID_PARAMETER_MIX;
+ }
+ *r = mprVarToInteger(var);
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ejs_push_dlong(struct ejs_rpc *ejs,
+ struct MprVar *v, const char *name, const uint64_t *r)
+{
+ return mprSetVar(v, name, mprCreateIntegerVar(*r));
+}
+
+NTSTATUS ejs_pull_udlong(struct ejs_rpc *ejs,
+ struct MprVar *v, const char *name, uint64_t *r)
+{
+ struct MprVar *var;
+ var = mprGetVar(v, name);
+ if (var == NULL) {
+ DEBUG(1,("ejs_pull_udlong: unable to find '%s'\n", name));
+ return NT_STATUS_INVALID_PARAMETER_MIX;
+ }
+ *r = mprVarToInteger(var);
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ejs_push_udlong(struct ejs_rpc *ejs,
+ struct MprVar *v, const char *name, const uint64_t *r)
+{
+ return mprSetVar(v, name, mprCreateIntegerVar(*r));
+}
+
+NTSTATUS ejs_pull_NTTIME(struct ejs_rpc *ejs,
+ struct MprVar *v, const char *name, uint64_t *r)
+{
+ struct MprVar *var;
+ var = mprGetVar(v, name);
+ if (var == NULL) {
+ DEBUG(1,("ejs_pull_NTTIME: unable to find '%s'\n", name));
+ return NT_STATUS_INVALID_PARAMETER_MIX;
+ }
+ *r = mprVarToInteger(var);
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ejs_push_NTTIME(struct ejs_rpc *ejs,
+ struct MprVar *v, const char *name, const uint64_t *r)
+{
+ return mprSetVar(v, name, mprCreateIntegerVar(*r));
+}
+
/*
pull a enum from a mpr variable to a C element
@@ -265,7 +323,7 @@ NTSTATUS ejs_push_enum(struct ejs_rpc *ejs,
pull a string
*/
NTSTATUS ejs_pull_string(struct ejs_rpc *ejs,
- struct MprVar *v, const char *name, char **s)
+ struct MprVar *v, const char *name, const char **s)
{
struct MprVar *var;
var = mprGetVar(v, name);
@@ -273,8 +331,7 @@ NTSTATUS ejs_pull_string(struct ejs_rpc *ejs,
DEBUG(1,("ejs_pull_string: unable to find '%s'\n", name));
return NT_STATUS_INVALID_PARAMETER_MIX;
}
- *s = talloc_strdup(ejs, mprToString(var));
- NT_STATUS_HAVE_NO_MEMORY(*s);
+ *s = mprToString(var);
return NT_STATUS_OK;
}
@@ -304,3 +361,48 @@ 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)
+{
+ struct MprVar *var;
+ struct dom_sid *sid;
+ var = mprGetVar(v, name);
+ if (var == NULL) {
+ DEBUG(1,("ejs_pull_dom_sid: unable to find '%s'\n", name));
+ return NT_STATUS_INVALID_PARAMETER_MIX;
+ }
+ sid = dom_sid_parse_talloc(ejs, mprToString(var));
+ NT_STATUS_HAVE_NO_MEMORY(sid);
+ *r = *sid;
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ejs_push_dom_sid(struct ejs_rpc *ejs,
+ struct MprVar *v, const char *name, const struct dom_sid *r)
+{
+ char *sidstr = dom_sid_string(ejs, r);
+ NT_STATUS_HAVE_NO_MEMORY(sidstr);
+ return mprSetVar(v, name, mprCreateStringVar(sidstr, True));
+}
+
+NTSTATUS ejs_pull_GUID(struct ejs_rpc *ejs,
+ struct MprVar *v, const char *name, struct GUID *r)
+{
+ struct MprVar *var;
+ var = mprGetVar(v, name);
+ if (var == NULL) {
+ DEBUG(1,("ejs_pull_GUID: unable to find '%s'\n", name));
+ return NT_STATUS_INVALID_PARAMETER_MIX;
+ }
+ return GUID_from_string(mprToString(var), r);
+}
+
+NTSTATUS ejs_push_GUID(struct ejs_rpc *ejs,
+ struct MprVar *v, const char *name, const struct GUID *r)
+{
+ char *guid = GUID_string(ejs, r);
+ NT_STATUS_HAVE_NO_MEMORY(guid);
+ return mprSetVar(v, name, mprCreateStringVar(guid, True));
+}