summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--librpc/idl/lsa.idl1
-rw-r--r--selftest/knownfail.d/lsa_string5
-rw-r--r--source4/librpc/ndr/py_lsa.c77
3 files changed, 78 insertions, 5 deletions
diff --git a/librpc/idl/lsa.idl b/librpc/idl/lsa.idl
index 68569db9177..1682dbd27e9 100644
--- a/librpc/idl/lsa.idl
+++ b/librpc/idl/lsa.idl
@@ -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
index 10726b4b5e6..00000000000
--- a/selftest/knownfail.d/lsa_string
+++ /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
index 00000000000..f9857a56957
--- /dev/null
+++ b/source4/librpc/ndr/py_lsa.c
@@ -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
+