diff options
-rw-r--r-- | source4/scripting/swig/dcerpc.i | 28 | ||||
-rw-r--r-- | source4/scripting/swig/samr.i | 13 |
2 files changed, 39 insertions, 2 deletions
diff --git a/source4/scripting/swig/dcerpc.i b/source4/scripting/swig/dcerpc.i index 6130f85a60..c843ec3c36 100644 --- a/source4/scripting/swig/dcerpc.i +++ b/source4/scripting/swig/dcerpc.i @@ -50,6 +50,26 @@ void set_ntstatus_exception(int 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" @@ -61,8 +81,12 @@ void set_ntstatus_exception(int status) ntstatus_exception = PyErr_NewException("dcerpc.NTSTATUS", NULL, NULL); %} -%typemap(in, numinputs=0) struct dcerpc_pipe **OUT (struct dcerpc_pipe *temp) { - $1 = &temp; +%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("foo"); } %typemap(argout) struct dcerpc_pipe ** { diff --git a/source4/scripting/swig/samr.i b/source4/scripting/swig/samr.i index ceb21db17a..030f5defc2 100644 --- a/source4/scripting/swig/samr.i +++ b/source4/scripting/swig/samr.i @@ -23,3 +23,16 @@ #define DCERPC_SAMR_UUID "12345778-1234-abcd-ef00-0123456789ac" const int DCERPC_SAMR_VERSION = 1.0; #define DCERPC_SAMR_NAME "samr" + +%typemap(in) struct samr_Connect2 * (struct samr_Connect2 temp) { + if (!PyDict_Check($input)) { + PyErr_SetString(PyExc_TypeError, "dict arg expected"); + return NULL; + } + temp.in.system_name = get_string_property($input, "system_name"); + temp.in.access_mask = get_uint32_property($input, "access_mask"); + $1 = &temp; +} + +%rename(samr_Connect2) dcerpc_samr_Connect2; +NTSTATUS dcerpc_samr_Connect2(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_Connect2 *r); |