svn commit: samba r8238 - in branches/SAMBA_4_0/source: build/pidl scripting/ejs

tridge at samba.org tridge at samba.org
Fri Jul 8 10:29:19 GMT 2005


Author: tridge
Date: 2005-07-08 10:29:18 +0000 (Fri, 08 Jul 2005)
New Revision: 8238

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=8238

Log:
- fixed handling of NULL pointers from ejs

- added automatic creation of all constants in IDL as ejs variables

Modified:
   branches/SAMBA_4_0/source/build/pidl/ejs.pm
   branches/SAMBA_4_0/source/scripting/ejs/ejsrpc.c
   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-08 09:38:41 UTC (rev 8237)
+++ branches/SAMBA_4_0/source/build/pidl/ejs.pm	2005-07-08 10:29:18 UTC (rev 8238)
@@ -103,6 +103,9 @@
 sub EjsPullScalar($$$$$)
 {
 	my ($e, $l, $var, $name, $env) = @_;
+
+	return if (util::has_property($e, "value"));
+
 	$var = get_pointer_to($var);
 	# have to handle strings specially :(
 	if ($e->{TYPE} eq "string") {
@@ -116,9 +119,13 @@
 sub EjsPullPointer($$$$$)
 {
 	my ($e, $l, $var, $name, $env) = @_;
+	pidl "\tif (ejs_pull_null(ejs, v, $name)) {\n";
+	pidl "\t$var = NULL;\n";
+	pidl "\t} else {\n";
 	pidl "\tEJS_ALLOC(ejs, $var);\n";
 	$var = get_value_of($var);		
 	EjsPullElement($e, Ndr::GetNextLevel($e, $l), $var, $name, $env);
+	pidl "}\n";
 }
 
 ###########################
@@ -335,8 +342,12 @@
 sub EjsPushPointer($$$$$)
 {
 	my ($e, $l, $var, $name, $env) = @_;
+	pidl "\tif (NULL == $var) {\n";
+	pidl "\tNDR_CHECK(ejs_push_null(ejs, v, $name));\n";
+	pidl "\t} else {\n";
 	$var = get_value_of($var);		
 	EjsPushElement($e, Ndr::GetNextLevel($e, $l), $var, $name, $env);
+	pidl "}\n";
 }
 
 ###########################
@@ -540,6 +551,14 @@
 	pidl "}\n\n";
 }
 
+###################
+# handle a constant
+sub EjsConst($)
+{
+    my $const = shift;
+    $constants{$const->{NAME}} = $const->{VALUE};
+}
+
 #####################################################################
 # parse the interface definitions
 sub EjsInterface($)
@@ -565,6 +584,10 @@
 		push (@fns, $d->{NAME});
 	}
 
+	foreach my $d (@{$interface->{CONSTS}}) {
+		EjsConst($d);
+	}
+
 	pidl "void setup_ejs_$name(void)\n";
 	pidl "{\n";
 	foreach (@fns) {

Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsrpc.c
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/ejsrpc.c	2005-07-08 09:38:41 UTC (rev 8237)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsrpc.c	2005-07-08 10:29:18 UTC (rev 8238)
@@ -406,3 +406,20 @@
 	NT_STATUS_HAVE_NO_MEMORY(guid);
 	return mprSetVar(v, name, mprCreateStringVar(guid, True));
 }
+
+NTSTATUS ejs_push_null(struct ejs_rpc *ejs, struct MprVar *v, const char *name)
+{
+	return mprSetVar(v, name, mprCreatePtrVar(NULL, name));
+}
+
+BOOL ejs_pull_null(struct ejs_rpc *ejs, struct MprVar *v, const char *name)
+{
+	v = mprGetVar(v, name);
+	if (v == NULL) {
+		return True;
+	}
+	if (v->type == MPR_TYPE_PTR && v->ptr == NULL) {
+		return True;
+	}
+	return False;
+}

Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsrpc.h
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/ejsrpc.h	2005-07-08 09:38:41 UTC (rev 8237)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsrpc.h	2005-07-08 10:29:18 UTC (rev 8238)
@@ -87,6 +87,8 @@
 			  struct MprVar *v, const char *name, struct dom_sid *r);
 NTSTATUS ejs_push_dom_sid(struct ejs_rpc *ejs, 
 			  struct MprVar *v, const char *name, const struct dom_sid *r);
+NTSTATUS ejs_push_null(struct ejs_rpc *ejs, struct MprVar *v, const char *name);
+BOOL ejs_pull_null(struct ejs_rpc *ejs, struct MprVar *v, const char *name);
 
 #define EJS_ALLOC_SIZE(ejs, s, size) do { \
   (s) = talloc_size(ejs, size); \

Modified: branches/SAMBA_4_0/source/scripting/ejs/smbcalls_rpc.c
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/smbcalls_rpc.c	2005-07-08 09:38:41 UTC (rev 8237)
+++ branches/SAMBA_4_0/source/scripting/ejs/smbcalls_rpc.c	2005-07-08 10:29:18 UTC (rev 8238)
@@ -172,10 +172,14 @@
 	void setup_ejs_rpcecho(void);
 	void setup_ejs_samr(void);
 	void setup_ejs_misc(void);
+	void setup_ejs_security(void);
+
 	ejsDefineCFunction(-1, "rpc_connect", ejs_rpc_connect, NULL, MPR_VAR_SCRIPT_HANDLE);
+
 	setup_ejs_rpcecho();
 	setup_ejs_samr();
 	setup_ejs_misc();
+	setup_ejs_security();
 }
 
 /*
@@ -188,9 +192,12 @@
 	void setup_ejs_constants_rpcecho(int);
 	void setup_ejs_constants_samr(int);
 	void setup_ejs_constants_misc(int);
+	void setup_ejs_constants_security(int);
+
 	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