diff options
-rwxr-xr-x | source4/build/pidl/pidl.pl | 12 | ||||
-rw-r--r-- | source4/build/pidl/swig.pm | 24 | ||||
-rwxr-xr-x | source4/script/build_idl.sh | 2 | ||||
-rw-r--r-- | source4/scripting/swig/dcerpc.i | 2 | ||||
-rwxr-xr-x | source4/scripting/swig/test | 13 |
5 files changed, 51 insertions, 2 deletions
diff --git a/source4/build/pidl/pidl.pl b/source4/build/pidl/pidl.pl index c45b17c3c4..5c3f8e5054 100755 --- a/source4/build/pidl/pidl.pl +++ b/source4/build/pidl/pidl.pl @@ -22,6 +22,7 @@ use eparser; use validator; use util; use template; +use swig; my($opt_help) = 0; my($opt_parse) = 0; @@ -33,6 +34,7 @@ my($opt_server) = 0; my($opt_parser) = 0; my($opt_eparser) = 0; my($opt_keep) = 0; +my($opt_swig) = 0; my($opt_output); my $idl_parser = new idl; @@ -86,7 +88,8 @@ GetOptions ( 'parser' => \$opt_parser, 'eparser' => \$opt_eparser, 'diff' => \$opt_diff, - 'keep' => \$opt_keep + 'keep' => \$opt_keep, + 'swig' => \$opt_swig ); if ($opt_help) { @@ -155,6 +158,13 @@ sub process_file($) close(OUT); } + if ($opt_swig) { + my($filename) = $output; + $filename =~ s/\/ndr_/\//; + $filename = util::ChangeExtension($filename, ".i"); + util::FileSave($filename, IdlSwig::Parse($pidl)); + } + if ($opt_diff) { my($tempfile) = util::ChangeExtension($output, ".tmp"); util::FileSave($tempfile, IdlDump::Dump($pidl)); diff --git a/source4/build/pidl/swig.pm b/source4/build/pidl/swig.pm new file mode 100644 index 0000000000..124b6e593e --- /dev/null +++ b/source4/build/pidl/swig.pm @@ -0,0 +1,24 @@ +################################################### +# Samba4 parser generator for swig wrappers +# Copyright tpot@samba.org 2004 +# released under the GNU GPL + +package IdlSwig; + +use strict; + +sub Parse($) +{ + my($idl) = shift; + my($res) = ""; + + $res = "/* header auto-generated by pidl */\n\n"; + + foreach my $x (@{$idl}) { +# ($x->{TYPE} eq "INTERFACE") && HeaderInterface($x); + } + + return $res; +} + +1; diff --git a/source4/script/build_idl.sh b/source4/script/build_idl.sh index ec67c0aec0..4e69205487 100755 --- a/source4/script/build_idl.sh +++ b/source4/script/build_idl.sh @@ -4,7 +4,7 @@ FULLBUILD=$1 [ -d librpc/gen_ndr ] || mkdir -p librpc/gen_ndr || exit 1 -PIDL="$PERL ./build/pidl/pidl.pl --output librpc/gen_ndr/ndr_ --parse --header --parser --server" +PIDL="$PERL ./build/pidl/pidl.pl --output librpc/gen_ndr/ndr_ --parse --header --parser --server --swig" TABLES="$PERL ./build/pidl/tables.pl --output librpc/gen_ndr/tables" if [ x$FULLBUILD = xFULL ]; then diff --git a/source4/scripting/swig/dcerpc.i b/source4/scripting/swig/dcerpc.i index afa968a640..6769b4efc1 100644 --- a/source4/scripting/swig/dcerpc.i +++ b/source4/scripting/swig/dcerpc.i @@ -112,6 +112,8 @@ uint32 get_uint32_property(PyObject *dict, char *key) %types(struct dcerpc_pipe *); +%rename(pipe_connect) dcerpc_pipe_connect; + NTSTATUS dcerpc_pipe_connect(struct dcerpc_pipe **OUT, const char *binding, const char *pipe_uuid, diff --git a/source4/scripting/swig/test b/source4/scripting/swig/test new file mode 100755 index 0000000000..479f447860 --- /dev/null +++ b/source4/scripting/swig/test @@ -0,0 +1,13 @@ +#!/usr/bin/python + +import dcerpc +import gc +gc.set_debug(gc.DEBUG_LEAK) + +handle = dcerpc.pipe_connect("ncacn_np:win2k3dc", + dcerpc.DCERPC_SAMR_UUID, dcerpc.DCERPC_SAMR_VERSION, + "win2k3dom", "administrator", "penguin") + +connect = {"system_name": "win2k3dc", "access_mask": 12345} + +print dcerpc.samr_Connect2(handle, connect) |