lsa.String: add String constructor, str and repr
authorGary Lockyer <gary@catalyst.net.nz>
Mon, 29 May 2017 04:04:14 +0000 (16:04 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 22 Jun 2017 06:56:22 +0000 (08:56 +0200)
Add a String constructor, str and repr methods to the
samba.dcerpc.lsa.String python object

Signed-off-by: Gary Lockyer <gary@catalyst.net.nz>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
librpc/idl/lsa.idl
selftest/knownfail.d/lsa_string [deleted file]
source4/librpc/ndr/py_lsa.c [new file with mode: 0644]

index 68569db9177cbbbac063e002364e86900b29dd8e..1682dbd27e982b932462beba8dce66a457fd6c4f 100644 (file)
@@ -9,6 +9,7 @@ import "misc.idl", "security.idl";
 [ uuid("12345778-1234-abcd-ef00-0123456789ab"),
   version(0.0),
   endpoint("ncacn_np:[\\pipe\\lsarpc]","ncacn_np:[\\pipe\\lsass]", "ncacn_ip_tcp:", "ncalrpc:"),
+  pyhelper("librpc/ndr/py_lsa.c"),
   pointer_default(unique),
   helpstring("Local Security Authority")
 ] interface lsarpc
diff --git a/selftest/knownfail.d/lsa_string b/selftest/knownfail.d/lsa_string
deleted file mode 100644 (file)
index 10726b4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Tests for String constructor on lsa.String
-# Currently failing as the constructor has not been implemented.
-^samba.tests.lsa_string.samba.tests.lsa_string.LsaStringTests.test_repr\(ad_dc_ntvfs:local\)
-^samba.tests.lsa_string.samba.tests.lsa_string.LsaStringTests.test_string_constructor\(ad_dc_ntvfs:local\)
-^samba.tests.lsa_string.samba.tests.lsa_string.LsaStringTests.test_to_string\(ad_dc_ntvfs:local\)
diff --git a/source4/librpc/ndr/py_lsa.c b/source4/librpc/ndr/py_lsa.c
new file mode 100644 (file)
index 0000000..f9857a5
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+   Unix SMB/CIFS implementation.
+   Samba utility functions
+
+   Copyright (C) Catalyst IT 2017
+
+   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 <http://www.gnu.org/licenses/>.
+*/
+#include <Python.h>
+#include "librpc/gen_ndr/lsa.h"
+
+static PyObject *py_lsa_String_str(PyObject *py_self)
+{
+       struct lsa_String *self = pytalloc_get_ptr(py_self);
+       PyObject *ret = NULL;
+       if (self->string == NULL) {
+               const char *empty = "";
+               ret = PyStr_FromString(empty);
+       } else {
+               ret = PyStr_FromString(self->string);
+       }
+       return ret;
+}
+
+static PyObject *py_lsa_String_repr(PyObject *py_self)
+{
+       struct lsa_String *self = pytalloc_get_ptr(py_self);
+       PyObject *ret = NULL;
+       if (self->string == NULL) {
+               const char *empty = "lsaString(None)";
+               ret = PyStr_FromString(empty);
+       } else {
+               ret = PyStr_FromFormat("lsaString('%s')", self->string);
+       }
+       return ret;
+}
+
+static int py_lsa_String_init(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+       struct lsa_String *string = pytalloc_get_ptr(self);
+       const char *str = NULL;
+       const char *kwnames[] = { "str", NULL };
+
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|s", discard_const_p(char *, kwnames), &str))
+               return -1;
+
+       string->string = talloc_strdup(string, str);
+
+       if (str != NULL && string->string == NULL) {
+               PyErr_NoMemory();
+               return -1;
+       }
+
+       return 0;
+}
+
+
+static void py_lsa_String_patch(PyTypeObject *type)
+{
+       type->tp_init = py_lsa_String_init;
+       type->tp_str = py_lsa_String_str;
+       type->tp_repr = py_lsa_String_repr;
+}
+
+#define PY_STRING_PATCH py_lsa_String_patch
+