From 6f60a6e71aa9b734ec80865f598ff302d45f2bf3 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 21 Apr 2009 11:53:00 +0200 Subject: [PATCH] python/dcerpc: Custom implementations of policy_handle.__init__ and policy_handle.__repr__ pair-programmed with Jelmer --- source4/librpc/ndr/py_misc.c | 38 ++++++++++++++++++++++ .../scripting/python/samba/tests/dcerpc/misc.py | 11 +++++++ 2 files changed, 49 insertions(+) diff --git a/source4/librpc/ndr/py_misc.c b/source4/librpc/ndr/py_misc.c index 4e255661484..b56c355fc3b 100644 --- a/source4/librpc/ndr/py_misc.c +++ b/source4/librpc/ndr/py_misc.c @@ -90,3 +90,41 @@ static void py_GUID_patch(PyTypeObject *type) #define PY_GUID_PATCH py_GUID_patch +static int py_policy_handle_init(PyObject *self, PyObject *args, PyObject *kwargs) +{ + char *str = NULL; + NTSTATUS status; + struct policy_handle *handle = py_talloc_get_ptr(self); + const char *kwnames[] = { "uuid", "type", NULL }; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|si", discard_const_p(char *, kwnames), &str, &handle->handle_type)) + return -1; + + if (str != NULL) { + status = GUID_from_string(str, &handle->uuid); + if (!NT_STATUS_IS_OK(status)) { + PyErr_SetNTSTATUS(status); + return -1; + } + } + + return 0; +} + +static PyObject *py_policy_handle_repr(PyObject *py_self) +{ + struct policy_handle *self = py_talloc_get_ptr(py_self); + char *uuid_str = GUID_string(NULL, &self->uuid); + PyObject *ret = PyString_FromFormat("policy_handle('%s', %d)", uuid_str, self->handle_type); + talloc_free(uuid_str); + return ret; +} + +static void py_policy_handle_patch(PyTypeObject *type) +{ + type->tp_init = py_policy_handle_init; + type->tp_repr = py_policy_handle_repr; +} + +#define PY_POLICY_HANDLE_PATCH py_policy_handle_patch + diff --git a/source4/scripting/python/samba/tests/dcerpc/misc.py b/source4/scripting/python/samba/tests/dcerpc/misc.py index d9a5573980c..8726e8bde5c 100644 --- a/source4/scripting/python/samba/tests/dcerpc/misc.py +++ b/source4/scripting/python/samba/tests/dcerpc/misc.py @@ -46,3 +46,14 @@ class GUIDTests(unittest.TestCase): +class PolicyHandleTests(unittest.TestCase): + + def test_init(self): + x = misc.policy_handle(text1, 1) + self.assertEquals(1, x.handle_type) + self.assertEquals(text1, str(x.uuid)) + + def test_repr(self): + x = misc.policy_handle(text1, 42) + self.assertEquals("policy_handle('%s', %d)" % (text1, 42), repr(x)) + -- 2.11.4.GIT