/* Unix SMB/CIFS implementation. Swig interface to librpc functions. Copyright (C) Tim Potter 2004 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 2 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, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ %module dcerpc %{ /* This symbol is used in both includes.h and Python.h which causes an annoying compiler warning. */ #ifdef HAVE_FSTAT #undef HAVE_FSTAT #endif #include "includes.h" #undef strcpy PyObject *ntstatus_exception; /* Set up return of a dcerpc.NTSTATUS exception */ void set_ntstatus_exception(int status) { PyObject *obj = Py_BuildValue("(i,s)", status, nt_errstr(NT_STATUS(status))); PyErr_SetObject(ntstatus_exception, obj); } char *get_string_property(PyObject *dict, char *key) { PyObject *item = PyDict_GetItem(dict, PyString_FromString(key)); if (!item) return 0; /* TODO: throw exception */ return PyString_AsString(item); } uint32 get_uint32_property(PyObject *dict, char *key) { PyObject *item = PyDict_GetItem(dict, PyString_FromString(key)); if (!item) return 0; /* TODO: throw exception */ return (uint32)PyInt_AsLong(item); } %} %include "samba.i" %init %{ /* setup_logging("python", DEBUG_STDOUT); */ lp_load(dyn_CONFIGFILE, True, False, False); load_interfaces(); ntstatus_exception = PyErr_NewException("dcerpc.NTSTATUS", NULL, NULL); %} %typemap(in, numinputs=0) struct dcerpc_pipe **OUT (struct dcerpc_pipe *temp_dcerpc_pipe) { $1 = &temp_dcerpc_pipe; } %typemap(in, numinputs=0) TALLOC_CTX * { $1 = talloc_init("$symname"); } %typemap(freearg) TALLOC_CTX * { talloc_free($1); } %typemap(argout) struct dcerpc_pipe ** { long status = PyLong_AsLong(resultobj); /* Throw exception if result was not OK */ if (status != 0) { set_ntstatus_exception(status); return NULL; } /* Set REF_ALLOC flag so we don't have to do too much extra mucking around with ref variables in ndr unmarshalling. */ (*$1)->flags |= DCERPC_NDR_REF_ALLOC; /* Return swig handle on dcerpc_pipe */ resultobj = SWIG_NewPointerObj(*$1, SWIGTYPE_p_dcerpc_pipe, 0); } %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, uint32 pipe_version, const char *domain, const char *username, const char *password); %include "librpc/gen_ndr/samr.i" %include "librpc/gen_ndr/lsa.i"