svn commit: samba r3001 - in branches/SAMBA_4_0/source: build/pidl scripting/swig scripting/swig/torture

tpot at samba.org tpot at samba.org
Sat Oct 16 00:19:33 GMT 2004


Author: tpot
Date: 2004-10-16 00:19:33 +0000 (Sat, 16 Oct 2004)
New Revision: 3001

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source&rev=3001&nolog=1

Log:
Expose unmarshalling functions for structures marked "public" in the
idl.  This allows us to pass a buffer of bytes returned from a spoolss
call and convert it to a Python dictionary.  Works for enumprinters level
1!

Modified:
   branches/SAMBA_4_0/source/build/pidl/swig.pm
   branches/SAMBA_4_0/source/scripting/swig/dcerpc.i
   branches/SAMBA_4_0/source/scripting/swig/torture/spoolss.py


Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/swig.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/swig.pm	2004-10-15 19:57:41 UTC (rev 3000)
+++ branches/SAMBA_4_0/source/build/pidl/swig.pm	2004-10-16 00:19:33 UTC (rev 3001)
@@ -351,8 +351,6 @@
 
     $result .= "\tresultobj = temp;\n\n";
 
-	
-
     $result .= "\tif (NT_STATUS_IS_ERR(result)) {\n";
     $result .= "\t\tset_ntstatus_exception(NT_STATUS_V(result));\n";
     $result .= "\t\tgoto fail;\n";
@@ -466,19 +464,30 @@
 
     # Generate function to convert DATA_BLOB to Python dict
 
-    if (util::has_property($s, "public")) {
-	$result .= "/* Convert DATA_BLOB to python dict of struct $s->{NAME} */\n\n";
-
-	$result .= "NTSTATUS DATA_BLOB_to_python_$s->{NAME}(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, PyObject **obj)\n";
+    if (util::has_property($s->{DATA}, "public")) {
+	$result .= "/* Convert a Python string to a struct $s->{NAME} python dict */\n\n";
+	$result .= "NTSTATUS unmarshall_$s->{NAME}(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, struct $s->{NAME} *s)\n";
 	$result .= "{\n";
-	$result .= "\tstruct $s->{NAME} s;\n";
-	$result .= "\tNTSTATUS result = ndr_pull_struct_blob(blob, mem_ctx, &s, ndr_pull_$s->{NAME});\n\n";
-	$result .= "\treturn NT_STATUS_OK;\n";
-	$result .= "}\n";
+	$result .= "\treturn ndr_pull_struct_blob(blob, mem_ctx, s, ndr_pull_$s->{NAME});\n";
+	$result .= "}\n\n";
     }
 
     $result .= "\n%}\n\n";    
 
+    if (util::has_property($s->{DATA}, "public")) {
+
+	$result .= "%typemap(in, numinputs=0) struct $s->{NAME} *EMPTY (struct $s->{NAME} *temp_$s->{NAME}) {\n";
+	$result .= "\t\$1 = &temp_$s->{NAME};\n";
+	$result .= "}\n\n";
+
+	$result .= "%typemap(argout) struct $s->{NAME} * {\n";
+	$result .= "\tTALLOC_CTX *mem_ctx = talloc_init(\"typemap(argout) $s->{NAME}\");\n\n";
+	$result .= "\tresultobj = $s->{NAME}_ptr_to_python(mem_ctx, \$1);\n";
+	$result .= "}\n\n";
+
+	$result .= "NTSTATUS unmarshall_$s->{NAME}(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, struct $s->{NAME} *EMPTY);\n\n";
+    }
+
     return $result;
 }
 
@@ -595,8 +604,22 @@
 
     $result .= "}\n\n";
 
+    # Generate function to convert DATA_BLOB to Python dict
+
+    if (util::has_property($u->{DATA}, "public")) {
+	$result .= "/* Convert a Python string to a struct $u->{NAME} python dict */\n\n";
+	$result .= "NTSTATUS unmarshall_$u->{NAME}(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, union $u->{NAME} *u)\n";
+	$result .= "{\n";
+	$result .= "\treturn NT_STATUS_OK;\n";
+	$result .= "}\n\n";
+    }
+
     $result .= "\n%}\n\n";    
 
+    if (util::has_property($u->{DATA}, "public")) {
+	$result .= "NTSTATUS unmarshall_$u->{NAME}(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, union $u->{NAME} *EMPTY);\n\n";
+    }
+
     return $result;
 }
 

Modified: branches/SAMBA_4_0/source/scripting/swig/dcerpc.i
===================================================================
--- branches/SAMBA_4_0/source/scripting/swig/dcerpc.i	2004-10-15 19:57:41 UTC (rev 3000)
+++ branches/SAMBA_4_0/source/scripting/swig/dcerpc.i	2004-10-16 00:19:33 UTC (rev 3001)
@@ -346,6 +346,12 @@
                              const char *username,
                              const char *password);
 
+%typemap(in) DATA_BLOB * (DATA_BLOB temp_data_blob) {
+	temp_data_blob.data = PyString_AsString($input);
+	temp_data_blob.length = PyString_Size($input);
+	$1 = &temp_data_blob;
+}
+
 %include "librpc/gen_ndr/misc.i"
 %include "librpc/gen_ndr/lsa.i"
 %include "librpc/gen_ndr/samr.i"

Modified: branches/SAMBA_4_0/source/scripting/swig/torture/spoolss.py
===================================================================
--- branches/SAMBA_4_0/source/scripting/swig/torture/spoolss.py	2004-10-15 19:57:41 UTC (rev 3000)
+++ branches/SAMBA_4_0/source/scripting/swig/torture/spoolss.py	2004-10-16 00:19:33 UTC (rev 3001)
@@ -11,7 +11,7 @@
 
     result = dcerpc.spoolss_EnumPrinters(pipe, r)
 
-    print result
+    print dcerpc.unmarshall_spoolss_PrinterInfo1(result['buffer'])
 
 def runtests(binding, domain, username, password):
     



More information about the samba-cvs mailing list