summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/scripting/swig/dcerpc.i28
-rw-r--r--source4/scripting/swig/samr.i13
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);