[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha2-285-gf24e5e8

Stefan Metzmacher metze at samba.org
Fri Jan 4 09:38:42 GMT 2008


The branch, v4-0-test has been updated
       via  f24e5e8a2b16f2f1640cb573bdcb346cb3748f33 (commit)
       via  bc6aa49d8e33add2efa6f66630029f5305b56280 (commit)
       via  336dae6d429f122f7f38a6c78d28b848ebfa3c67 (commit)
       via  0ee0581f052d0b90b2697841aaa09e0955aff65a (commit)
       via  885e5980d7d7fbafdcf308b8ba6f2560c5b467ec (commit)
       via  f47044aacc8eb6df856524744ab87bee997bae6d (commit)
       via  f1960ca7c4d1b75d64192efdd446482c6bbebcd9 (commit)
       via  5c86cc6648169bf52161a1ffdbf17a38b62c611f (commit)
       via  ff67935be4980c701a9cd9a7fa435b8d1e02dfec (commit)
      from  8a97886e24a4b969aa91409c06f423b71a45f6eb (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-0-test


- Log -----------------------------------------------------------------
commit f24e5e8a2b16f2f1640cb573bdcb346cb3748f33
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Jan 4 03:44:41 2008 -0600

    r26663: Proper dependencies for pidl Python bindings.

commit bc6aa49d8e33add2efa6f66630029f5305b56280
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Jan 4 03:44:38 2008 -0600

    r26662: pidl/python: Add constructors for struct/union types.

commit 336dae6d429f122f7f38a6c78d28b848ebfa3c67
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Jan 4 03:44:32 2008 -0600

    r26661: pidl/python: More generic handling of NTSTATUS, add stubs for types.

commit 0ee0581f052d0b90b2697841aaa09e0955aff65a
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Jan 3 23:58:38 2008 -0600

    r26660: pidl/python: Generate stub functions for DCE/RPC client functions, constructor for interface objects.

commit 885e5980d7d7fbafdcf308b8ba6f2560c5b467ec
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Jan 3 21:57:44 2008 -0600

    r26659: pidl/python: Support string constants and handle modules.

commit f47044aacc8eb6df856524744ab87bee997bae6d
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Jan 3 21:45:18 2008 -0600

    r26658: pidl: Register Python modules.

commit f1960ca7c4d1b75d64192efdd446482c6bbebcd9
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Jan 3 21:21:16 2008 -0600

    r26657: pidl: Add basics for generating Python modules.

commit 5c86cc6648169bf52161a1ffdbf17a38b62c611f
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Jan 3 21:21:12 2008 -0600

    r26656: python: Add file documentating the status of the Python migration.

commit ff67935be4980c701a9cd9a7fa435b8d1e02dfec
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Jan 3 21:21:05 2008 -0600

    r26655: torture/auth/pac: remove uses of global_loadparm

-----------------------------------------------------------------------

Summary of changes:
 source/librpc/config.mk                     |    4 +
 source/librpc/idl-deps.pl                   |    2 +
 source/main.mk                              |    3 +-
 source/pidl/lib/Parse/Pidl/Samba4/Python.pm |  351 +++++++++++++++++++++++++++
 source/pidl/pidl                            |   14 +-
 source/script/build_idl.sh                  |    2 +-
 source/scripting/python/STATUS              |   20 ++
 source/scripting/python/modules.c           |    1 +
 source/torture/auth/pac.c                   |    4 +-
 9 files changed, 396 insertions(+), 5 deletions(-)
 create mode 100644 source/pidl/lib/Parse/Pidl/Samba4/Python.pm
 create mode 100644 source/scripting/python/STATUS


Changeset truncated at 500 lines:

diff --git a/source/librpc/config.mk b/source/librpc/config.mk
index 2b2f39b..debfbb6 100644
--- a/source/librpc/config.mk
+++ b/source/librpc/config.mk
@@ -594,3 +594,7 @@ PRIVATE_DEPENDENCIES = dcerpc NDR_IRPC EJSRPC
 [PYTHON::swig_dcerpc]
 SWIG_FILE = rpc/dcerpc.i
 PUBLIC_DEPENDENCIES = LIBCLI_SMB NDR_MISC LIBSAMBA-UTIL LIBSAMBA-CONFIG dcerpc_samr RPC_NDR_LSA DYNCONFIG
+
+[PYTHON::python_echo]
+OBJ_FILES = gen_ndr/py_echo.o
+PRIVATE_DEPENDENCIES = NDR_ECHO
diff --git a/source/librpc/idl-deps.pl b/source/librpc/idl-deps.pl
index 2fffd6e..d5bfe0b 100755
--- a/source/librpc/idl-deps.pl
+++ b/source/librpc/idl-deps.pl
@@ -15,6 +15,8 @@ foreach(@ARGV) {
 	push (@{$vars{IDL_NDR_SERVER_C_FILES}}, "librpc/gen_ndr/ndr_$b\_s.c");
 	push (@{$vars{IDL_NDR_EJS_C_FILES}}, "librpc/gen_ndr/ndr_$b\_ejs.c");
 	push (@{$vars{IDL_NDR_EJS_H_FILES}}, "librpc/gen_ndr/ndr_$b\_ejs.h");
+	push (@{$vars{IDL_NDR_PY_C_FILES}}, "librpc/gen_ndr/py_$b.c");
+	push (@{$vars{IDL_NDR_PY_H_FILES}}, "librpc/gen_ndr/py_$b.h");
 }
 
 foreach (keys %vars) {
diff --git a/source/main.mk b/source/main.mk
index 38c76bb..7be6032 100644
--- a/source/main.mk
+++ b/source/main.mk
@@ -216,7 +216,8 @@ $(IDL_HEADER_FILES) \
 	$(IDL_NDR_PARSE_H_FILES) $(IDL_NDR_PARSE_C_FILES) \
 	$(IDL_NDR_CLIENT_C_FILES) $(IDL_NDR_CLIENT_H_FILES) \
 	$(IDL_NDR_SERVER_C_FILES) $(IDL_SWIG_FILES) \
-	$(IDL_NDR_EJS_C_FILES) $(IDL_NDR_EJS_H_FILES): idl
+	$(IDL_NDR_EJS_C_FILES) $(IDL_NDR_EJS_H_FILES) \
+	$(IDL_NDR_PY_C_FILES) $(IDL_NDR_PY_H_FILES): idl
 
 idl_full: pidl/lib/Parse/Pidl/IDL.pm pidl/lib/Parse/Pidl/Expr.pm 
 	@CPP="$(CPP)" PERL="$(PERL)" srcdir=$(srcdir) $(srcdir)/script/build_idl.sh FULL
diff --git a/source/pidl/lib/Parse/Pidl/Samba4/Python.pm b/source/pidl/lib/Parse/Pidl/Samba4/Python.pm
new file mode 100644
index 0000000..874e7f8
--- /dev/null
+++ b/source/pidl/lib/Parse/Pidl/Samba4/Python.pm
@@ -0,0 +1,351 @@
+###################################################
+# Python function wrapper generator
+# Copyright jelmer at samba.org 2007
+# released under the GNU GPL
+
+package Parse::Pidl::Samba4::Python;
+
+use Exporter;
+ at ISA = qw(Exporter);
+
+use strict;
+use Parse::Pidl::Typelist;
+use Parse::Pidl::Util qw(has_property ParseExpr);
+
+use vars qw($VERSION);
+$VERSION = '0.01';
+
+sub new($) {
+	my ($class) = @_;
+	my $self = { res => "", res_hdr => "", tabs => "", constants => {}};
+	bless($self, $class);
+}
+
+sub pidl_hdr ($$)
+{
+	my $self = shift;
+	$self->{res_hdr} .= shift;
+}
+
+sub pidl($$)
+{
+	my ($self, $d) = @_;
+	if ($d) {
+		$self->{res} .= $self->{tabs};
+		$self->{res} .= $d;
+	}
+	$self->{res} .= "\n";
+}
+
+sub indent($)
+{
+	my ($self) = @_;
+	$self->{tabs} .= "\t";
+}
+
+sub deindent($)
+{
+	my ($self) = @_;
+	$self->{tabs} = substr($self->{tabs}, 0, -1);
+}
+
+sub Import
+{
+	my $self = shift;
+	my @imports = @_;
+	foreach (@imports) {
+		s/\.idl\"$//;
+		s/^\"//;
+		$self->pidl_hdr("#include \"librpc/gen_ndr/py_$_\.h\"\n");
+	}
+}
+
+sub Const($$)
+{
+    my ($self, $const) = @_;
+    $self->{constants}->{$const->{NAME}} = [$const->{DATA}->{TYPE}, $const->{VALUE}];
+}
+
+sub FromTypeToPythonFunction($$)
+{
+	my ($self, $type) = @_;
+
+	#FIXME
+}
+
+sub FromPythonToTypeFunction($$)
+{
+	my ($self, $type) = @_;
+
+	#FIXME
+}
+
+sub TypeConstructor($$)
+{
+	my ($self, $type) = @_;
+
+	$self->pidl("staticforward PyTypeObject $type->{NAME}_ObjectType;");
+	$self->pidl("typedef struct {");
+	$self->indent;
+	$self->pidl("PyObject_HEAD");
+	$self->pidl("void *object;"); # FIXME: Use real type rather than void
+	$self->deindent;
+	$self->pidl("} $type->{NAME}_Object;");
+
+	$self->pidl("");
+
+	$self->pidl("static PyObject *py_$type->{NAME}_getattr(PyTypeObject *obj, char *name)");
+	$self->pidl("{");
+	$self->indent;
+	$self->pidl("return Py_None;");
+	$self->deindent;
+	$self->pidl("}");
+	$self->pidl("");
+
+	$self->pidl("static void py_$type->{NAME}_dealloc(PyObject* self)");
+	$self->pidl("{");
+	$self->indent;
+	$self->pidl("$type->{NAME}_Object *obj = ($type->{NAME}_Object *)self;");
+	$self->pidl("talloc_free(obj->object);");
+	$self->pidl("PyObject_Del(self);");
+	$self->deindent;
+	$self->pidl("}");
+	$self->pidl("");
+
+	$self->pidl("static PyObject *py_$type->{NAME}_setattr(PyTypeObject *obj, char *name, PyObject *value)");
+	$self->pidl("{");
+	$self->indent;
+	$self->pidl("return Py_None;");
+	$self->deindent;
+	$self->pidl("}");
+	$self->pidl("");
+
+	$self->pidl("static PyTypeObject $type->{NAME}_ObjectType = {");
+	$self->indent;
+	$self->pidl("PyObject_HEAD_INIT(NULL) 0,");
+	$self->pidl(".tp_name = (char *)\"$type->{NAME}\",");
+	$self->pidl(".tp_basicsize = sizeof($type->{NAME}_Object),");
+	$self->pidl(".tp_dealloc = py_$type->{NAME}_dealloc,");
+	$self->pidl(".tp_getattr = py_$type->{NAME}_getattr,");
+	$self->pidl(".tp_setattr = py_$type->{NAME}_setattr,");
+	$self->deindent;
+	$self->pidl("};");
+
+	$self->pidl("");
+
+	$self->pidl("static PyObject *py_$type->{NAME}(PyObject *self, PyObject *args)");
+	$self->pidl("{");
+	$self->indent;
+	$self->pidl("$type->{NAME}\_Object *ret;");
+	$self->pidl("ret = PyObject_New($type->{NAME}_Object, &$type->{NAME}_ObjectType);");
+	$self->pidl("return (PyObject *) ret;");
+	$self->deindent;
+	$self->pidl("}");
+	$self->pidl("");
+}
+
+sub PythonFunction($$$)
+{
+	my ($self, $fn, $iface) = @_;
+
+	$self->pidl("static PyObject *py_$fn->{NAME}(PyObject *self, PyObject *args)");
+	$self->pidl("{");
+	$self->indent;
+	$self->pidl("$iface\_InterfaceObject *iface = ($iface\_InterfaceObject *)self;");
+	$self->pidl("NTSTATUS status;");
+	$self->pidl("");
+	# FIXME
+	$self->handle_ntstatus("status", "NULL");
+	$self->pidl("return Py_None;");
+	$self->deindent;
+	$self->pidl("}");
+	$self->pidl("");
+}
+
+sub handle_ntstatus($$$)
+{
+	my ($self, $var, $retval) = @_;
+
+	$self->pidl("if (NT_STATUS_IS_ERR($var)) {");
+	$self->indent;
+	$self->pidl("PyErr_SetString(PyExc_RuntimeError, nt_errstr($var));");
+	$self->pidl("return $retval;");
+	$self->deindent;
+	$self->pidl("}");
+	$self->pidl("");
+}
+
+sub Interface($$)
+{
+	my($self,$interface) = @_;
+
+	$self->pidl_hdr("#ifndef _HEADER_PYTHON_$interface->{NAME}\n");
+	$self->pidl_hdr("#define _HEADER_PYTHON_$interface->{NAME}\n\n");
+
+	$self->pidl_hdr("\n");
+
+	$self->Const($_) foreach (@{$interface->{CONSTS}});
+
+	foreach (@{$interface->{TYPES}}) {
+		$self->FromTypeToPythonFunction($_);	
+		$self->FromPythonToTypeFunction($_);	
+		$self->TypeConstructor($_);
+	}
+
+	$self->pidl("staticforward PyTypeObject $interface->{NAME}_InterfaceType;");
+	$self->pidl("typedef struct {");
+	$self->indent;
+	$self->pidl("PyObject_HEAD");
+	$self->pidl("struct dcerpc_pipe *pipe;");
+	$self->deindent;
+	$self->pidl("} $interface->{NAME}_InterfaceObject;");
+
+	$self->pidl("");
+
+	foreach my $d (@{$interface->{FUNCTIONS}}) {
+		next if not defined($d->{OPNUM});
+		next if has_property($d, "nopython");
+
+		$self->PythonFunction($d, $interface->{NAME});
+	}
+
+	$self->pidl("static PyMethodDef interface_$interface->{NAME}\_methods[] = {");
+	$self->indent;
+	foreach my $d (@{$interface->{FUNCTIONS}}) {
+		next if not defined($d->{OPNUM});
+		next if has_property($d, "nopython");
+
+		my $fn_name = $d->{NAME};
+
+		$fn_name =~ s/^$interface->{NAME}_//;
+
+		$self->pidl("{ (char *)\"$fn_name\", (PyCFunction)py_$d->{NAME}, METH_VARARGS|METH_KEYWORDS, NULL },");
+	}
+	$self->pidl("{ NULL, NULL, 0, NULL }");
+	$self->deindent;
+	$self->pidl("};");
+	$self->pidl("");
+
+	$self->pidl("static void interface_$interface->{NAME}_dealloc(PyObject* self)");
+	$self->pidl("{");
+	$self->indent;
+	$self->pidl("$interface->{NAME}_InterfaceObject *interface = ($interface->{NAME}_InterfaceObject *)self;");
+	$self->pidl("talloc_free(interface->pipe);");
+	$self->pidl("PyObject_Del(self);");
+	$self->deindent;
+	$self->pidl("}");
+	$self->pidl("");
+
+	$self->pidl("static PyObject *interface_$interface->{NAME}_getattr(PyTypeObject *obj, char *name)");
+	$self->pidl("{");
+	$self->indent;
+	$self->pidl("return Py_FindMethod(interface_$interface->{NAME}\_methods, (PyObject *)obj, name);");
+	$self->deindent;
+	$self->pidl("}");
+
+	$self->pidl("");
+
+	$self->pidl("static PyTypeObject $interface->{NAME}_InterfaceType = {");
+	$self->indent;
+	$self->pidl("PyObject_HEAD_INIT(NULL) 0,");
+	$self->pidl(".tp_name = (char *)\"$interface->{NAME}\",");
+	$self->pidl(".tp_basicsize = sizeof($interface->{NAME}_InterfaceObject),");
+	$self->pidl(".tp_dealloc = interface_$interface->{NAME}_dealloc,");
+	$self->pidl(".tp_getattr = interface_$interface->{NAME}_getattr,");
+	$self->deindent;
+	$self->pidl("};");
+
+	$self->pidl("");
+
+	$self->pidl("static PyObject *interface_$interface->{NAME}(PyObject *self, PyObject *args)");
+	$self->pidl("{");
+	$self->indent;
+	$self->pidl("$interface->{NAME}_InterfaceObject *ret;");
+	$self->pidl("const char *binding_string;");
+	$self->pidl("struct cli_credentials *credentials;");
+	$self->pidl("struct loadparm_context *lp_ctx;");
+	$self->pidl("NTSTATUS status;");
+	$self->pidl("");
+
+	# FIXME: Arguments: binding string, credentials, loadparm context
+	$self->pidl("ret = PyObject_New($interface->{NAME}_InterfaceObject, &$interface->{NAME}_InterfaceType);");
+	$self->pidl("");
+
+	$self->pidl("status = dcerpc_pipe_connect(NULL, &ret->pipe, binding_string, ");
+	$self->pidl("             &ndr_table_$interface->{NAME}, credentials, NULL, lp_ctx);");
+	$self->handle_ntstatus("status", "NULL");
+
+	$self->pidl("return (PyObject *)ret;");
+	$self->deindent;
+	$self->pidl("}");
+	
+	$self->pidl("");
+
+	$self->pidl_hdr("\n");
+	$self->pidl_hdr("#endif /* _HEADER_NDR_$interface->{NAME} */\n");
+}
+
+sub Parse($$$$)
+{
+    my($self,$basename,$ndr,$hdr) = @_;
+    
+    my $py_hdr = $hdr;
+    $py_hdr =~ s/ndr_([^\/]+)$/py_$1/g;
+
+    $self->pidl_hdr("/* header auto-generated by pidl */\n\n");
+	
+    $self->pidl("
+/* Python wrapper functions auto-generated by pidl */
+#include \"includes.h\"
+#include <Python.h>
+#include \"librpc/rpc/dcerpc.h\"
+#include \"$hdr\"
+#include \"$py_hdr\"
+
+");
+
+	foreach my $x (@$ndr) {
+	    ($x->{TYPE} eq "INTERFACE") && $self->Interface($x);
+		($x->{TYPE} eq "IMPORT") && $self->Import(@{$x->{PATHS}});
+	}
+	
+	$self->pidl("static PyMethodDef $basename\_methods[] = {");
+	$self->indent;
+	foreach my $x (@$ndr) {
+	    next if ($x->{TYPE} ne "INTERFACE");
+		$self->pidl("{ (char *)\"$x->{NAME}\", (PyCFunction)interface_$x->{NAME}, METH_VARARGS|METH_KEYWORDS, NULL },");
+
+		foreach my $d (@{$x->{TYPES}}) {
+			next if has_property($d, "nopython");
+			next if ($d->{TYPE} eq "ENUM" or $d->{TYPE} eq "BITMAP");
+
+			my $fn_name = $d->{NAME};
+
+			$fn_name =~ s/^$x->{NAME}_//;
+			$fn_name =~ s/^$basename\_//;
+
+			$self->pidl("{ (char *)\"$fn_name\", (PyCFunction)py_$d->{NAME}, METH_VARARGS|METH_KEYWORDS, NULL },");
+		}
+	}
+	
+	$self->pidl("{ NULL, NULL, 0, NULL }");
+	$self->deindent;
+	$self->pidl("};");
+
+	$self->pidl("");
+
+	$self->pidl("void init$basename(void)");
+	$self->pidl("{");
+	$self->indent;
+	$self->pidl("PyObject *m;");
+	$self->pidl("m = Py_InitModule((char *)\"$basename\", $basename\_methods);");
+	foreach (keys %{$self->{constants}}) {
+		# FIXME: Handle non-string constants
+		$self->pidl("PyModule_AddObject(m, \"$_\", PyString_FromString(" . $self->{constants}->{$_}->[1] . "));");
+	}
+	$self->deindent;
+	$self->pidl("}");
+    return ($self->{res_hdr}, $self->{res});
+}
+
+1;
diff --git a/source/pidl/pidl b/source/pidl/pidl
index 4150ff7..4395df2 100755
--- a/source/pidl/pidl
+++ b/source/pidl/pidl
@@ -17,7 +17,7 @@ pidl - An IDL compiler written in Perl
 
 pidl --help
 
-pidl [--outputdir[=OUTNAME]] [--includedir DIR...] [--parse-idl-tree] [--dump-idl-tree] [--dump-ndr-tree] [--header[=OUTPUT]] [--ejs[=OUTPUT]] [--swig[=OUTPUT]] [--ndr-parser[=OUTPUT]] [--client] [--server] [--warn-compat] [--quiet] [--verbose] [--template] [--ws-parser[=OUTPUT]] [--diff] [--dump-idl] [--tdr-parser[=OUTPUT]] [--samba3-ndr-client[=OUTPUT]] [--samba3-ndr-server[=OUTPUT]] [<idlfile>.idl]...
+pidl [--outputdir[=OUTNAME]] [--includedir DIR...] [--parse-idl-tree] [--dump-idl-tree] [--dump-ndr-tree] [--header[=OUTPUT]] [--ejs[=OUTPUT]] [--python[=OUTPUT]] [--swig[=OUTPUT]] [--ndr-parser[=OUTPUT]] [--client] [--server] [--warn-compat] [--quiet] [--verbose] [--template] [--ws-parser[=OUTPUT]] [--diff] [--dump-idl] [--tdr-parser[=OUTPUT]] [--samba3-ndr-client[=OUTPUT]] [--samba3-ndr-server[=OUTPUT]] [<idlfile>.idl]...
 
 =head1 DESCRIPTION
 
@@ -468,6 +468,7 @@ my($opt_tdr_parser);
 my($opt_ws_parser);
 my($opt_swig);
 my($opt_ejs);
+my($opt_python);
 my($opt_quiet) = 0;
 my($opt_outputdir) = '.';
 my($opt_verbose) = 0;
@@ -504,6 +505,7 @@ Samba 4 output:
  --client[=OUTFILE]      create a C NDR client [ndr_BASENAME_c.c]
  --tdr-parser[=OUTFILE]  create a C TDR parser [tdr_BASENAME.c]
  --ejs[=OUTFILE]         create ejs wrapper file [BASENAME_ejs.c]
+ --python[=OUTFILE]      create python wrapper file [py_BASENAME.c]
  --swig[=OUTFILE]        create swig wrapper file [BASENAME.i]
  --server[=OUTFILE]      create server boilerplate [ndr_BASENAME_s.c]
  --template              print a template for a pipe
@@ -538,6 +540,7 @@ my $result = GetOptions (
 	    'client:s' => \$opt_client,
 	    'ws-parser:s' => \$opt_ws_parser,
 	    'ejs' => \$opt_ejs,
+		'python' => \$opt_python,
 	    'diff' => \$opt_diff,
 	    'swig:s' => \$opt_swig,
 	    'quiet' => \$opt_quiet,
@@ -606,6 +609,7 @@ sub process_file($)
 	    defined($opt_header) or
 	    defined($opt_ndr_parser) or
 	    defined($opt_ejs) or 
+	    defined($opt_python) or 
 	    defined($opt_dump_ndr_tree) or
 	    defined($opt_samba3_header) or 
 	    defined($opt_samba3_parser) or 
@@ -657,6 +661,14 @@ sub process_file($)
 		FileSave("$outputdir/ndr_$basename\_ejs.h", $hdr);
 	}
 
+	if (defined($opt_python)) {
+		require Parse::Pidl::Samba4::Python;
+		my $generator = new Parse::Pidl::Samba4::Python(); 
+		my ($hdr,$prsr) = $generator->Parse($basename, $ndr, $h_filename);
+		FileSave("$outputdir/py_$basename.c", $prsr);
+		FileSave("$outputdir/py_$basename.h", $hdr);
+	}
+
 	if (defined($opt_server)) {
 		require Parse::Pidl::Samba4::NDR::Server;
 
diff --git a/source/script/build_idl.sh b/source/script/build_idl.sh
index ecf6657..ea0cb78 100755
--- a/source/script/build_idl.sh
+++ b/source/script/build_idl.sh
@@ -6,7 +6,7 @@ PIDL_EXTRA_ARGS="$*"
 
 [ -d librpc/gen_ndr ] || mkdir -p librpc/gen_ndr || exit 1
 
-PIDL="$PERL $srcdir/pidl/pidl --outputdir librpc/gen_ndr --header --ndr-parser --server --client --swig --ejs $PIDL_EXTRA_ARGS"
+PIDL="$PERL $srcdir/pidl/pidl --outputdir librpc/gen_ndr --header --ndr-parser --server --client --swig --ejs --python $PIDL_EXTRA_ARGS"
 
 if [ x$FULLBUILD = xFULL ]; then
       echo Rebuilding all idl files in librpc/idl
diff --git a/source/scripting/python/STATUS b/source/scripting/python/STATUS
new file mode 100644
index 0000000..b39563d
--- /dev/null
+++ b/source/scripting/python/STATUS
@@ -0,0 +1,20 @@
+dsdb/samdb/ldb_modules/tests/samba3sam.py
+lib/ldb/tests/python/ldap.py
+SWAT
+hierarchy
+DCE/RPC bindings
+ - pidl:
+     Parse::Pidl::Samba::Python
+	 - wrap struct/bitmap/enum/union types
+	  - __ndr_pack__/__ndr_unpack__ members
+	 Parse::Pidl::Samba::NDR::Python
+	 - pidl generated client fns
+	  - one class per interface
+	  - AddOne()
+
+ - scripting/bin/smbstatus.py
+ - scripting/bin/winreg.py
+
+not important before making Python the default:
+- scripting/python/samba/upgrade.py
+- install python modules into system
diff --git a/source/scripting/python/modules.c b/source/scripting/python/modules.c
index 6094cb4..55df51d 100644
--- a/source/scripting/python/modules.c
+++ b/source/scripting/python/modules.c
@@ -34,6 +34,7 @@ extern void init_dcerpc(void);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list