From d5903fd75e9640831f0e78fc04d3ffa5ea3b1b4a Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 14 Jan 2008 02:48:50 +0100 Subject: pidl/python: Fix compilation of py_echo. (This used to be commit 5ee99ff31c80ece6861b2a0323d71170ef9346b9) --- source4/foo.py | 22 ++++++++++++++++++++++ source4/librpc/config.mk | 2 +- source4/pidl/lib/Parse/Pidl/Samba4/Python.pm | 16 ++++++++++++++-- source4/scripting/python/config.mk | 2 +- source4/scripting/python/pytalloc.c | 7 ++++--- 5 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 source4/foo.py diff --git a/source4/foo.py b/source4/foo.py new file mode 100644 index 0000000000..0e2d35f080 --- /dev/null +++ b/source4/foo.py @@ -0,0 +1,22 @@ +#!/usr/bin/python + +# Unix SMB/CIFS implementation. +# Copyright (C) Jelmer Vernooij 2008 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +from echo import rpcecho + +x = rpcecho("ncalrpc:") diff --git a/source4/librpc/config.mk b/source4/librpc/config.mk index debfbb6869..e491f69b34 100644 --- a/source4/librpc/config.mk +++ b/source4/librpc/config.mk @@ -597,4 +597,4 @@ PUBLIC_DEPENDENCIES = LIBCLI_SMB NDR_MISC LIBSAMBA-UTIL LIBSAMBA-CONFIG dcerpc_s [PYTHON::python_echo] OBJ_FILES = gen_ndr/py_echo.o -PRIVATE_DEPENDENCIES = NDR_ECHO +PRIVATE_DEPENDENCIES = RPC_NDR_ECHO diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm b/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm index a7e1791793..f569f013dc 100644 --- a/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm +++ b/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm @@ -384,7 +384,7 @@ sub PythonType($$$) $self->EnumAndBitmapConsts($d->{NAME}, $d->{DATA}); } - if ($actual_ctype->{TYPE} eq "UNION") { + if ($actual_ctype->{TYPE} eq "UNION" and defined($actual_ctype->{ELEMENTS})) { $self->pidl("PyObject *py_import_$d->{NAME}(int level, " .mapTypeName($d) . " *in)"); $self->pidl("{"); $self->indent; @@ -486,7 +486,7 @@ sub Interface($$$) $self->pidl(""); $self->register_module_method($interface->{NAME}, "interface_$interface->{NAME}", "METH_VARARGS|METH_KEYWORDS", "NULL"); - $self->pidl("static PyObject *interface_$interface->{NAME}(PyObject *self, PyObject *args)"); + $self->pidl("static PyObject *interface_$interface->{NAME}(PyObject *self, PyObject *args, PyObject *kwargs)"); $self->pidl("{"); $self->indent; $self->pidl("$interface->{NAME}_InterfaceObject *ret;"); @@ -496,6 +496,18 @@ sub Interface($$$) $self->pidl("TALLOC_CTX *mem_ctx = NULL;"); $self->pidl("NTSTATUS status;"); $self->pidl(""); + $self->pidl("const char *kwnames[] = {"); + $self->indent; + $self->pidl("\"binding\", NULL"); + $self->deindent; + $self->pidl("};"); + $self->pidl(""); + $self->pidl("if (!PyArg_ParseTupleAndKeywords(args, kwargs, \"s:$interface->{NAME}\", discard_const_p(char *, kwnames), &binding_string)) {"); + $self->indent; + $self->pidl("return NULL;"); + $self->deindent; + $self->pidl("}"); + $self->pidl(""); # FIXME: Arguments: binding string, credentials, loadparm context $self->pidl("ret = PyObject_New($interface->{NAME}_InterfaceObject, &$interface->{NAME}_InterfaceType);"); diff --git a/source4/scripting/python/config.mk b/source4/scripting/python/config.mk index cfd179aff5..f00b477919 100644 --- a/source4/scripting/python/config.mk +++ b/source4/scripting/python/config.mk @@ -5,7 +5,7 @@ OBJ_FILES = smbpython.o [SUBSYSTEM::LIBPYTHON] PUBLIC_DEPENDENCIES = EXT_LIB_PYTHON INIT_FUNCTION_SENTINEL = { NULL, NULL } -OBJ_FILES = modules.o +OBJ_FILES = modules.o pytalloc.o [PYTHON::python_uuid] PRIVATE_DEPENDENCIES = LIBNDR diff --git a/source4/scripting/python/pytalloc.c b/source4/scripting/python/pytalloc.c index d0b8cb83f2..dc61a0a13d 100644 --- a/source4/scripting/python/pytalloc.c +++ b/source4/scripting/python/pytalloc.c @@ -18,6 +18,7 @@ */ #include "includes.h" +#include "scripting/python/pytalloc.h" void py_talloc_dealloc(PyObject* self) { @@ -26,13 +27,13 @@ void py_talloc_dealloc(PyObject* self) PyObject_Del(self); } -PyObject *py_talloc_import(PyTypeObject *py_type, TALLOC_CTX *mem_ctx, +PyObject *py_talloc_import_ex(PyTypeObject *py_type, TALLOC_CTX *mem_ctx, void *ptr) { - PyObject *ret = PyObject_New(py_talloc_Object, &py_type); + py_talloc_Object *ret = PyObject_New(py_talloc_Object, py_type); ret->talloc_ctx = talloc_reference(mem_ctx, ptr); ret->ptr = ptr; - return ret; + return (PyObject *)ret; } PyObject *py_talloc_default_repr(PyObject *py_obj) -- cgit