From 80cf4c86594ca1210d23712daadecb6deb829066 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Mon, 19 Sep 2022 23:12:59 +0200 Subject: [PATCH] librpc ndr/py_security: Export sddl_encode_ace to python Added sddl_encode_ace as new method as_sddl to security_ace class in python. Signed-off-by: Christian Merten Reviewed-by: Douglas Bagnall Reviewed-by: Jeremy Allison --- source4/librpc/ndr/py_security.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/source4/librpc/ndr/py_security.c b/source4/librpc/ndr/py_security.c index ae4041b528d..ff3de775af6 100644 --- a/source4/librpc/ndr/py_security.c +++ b/source4/librpc/ndr/py_security.c @@ -19,6 +19,7 @@ */ #include #include "py3compat.h" +#include "libcli/security/sddl.h" #include "libcli/security/security.h" static void PyType_AddMethods(PyTypeObject *type, PyMethodDef *methods) @@ -618,9 +619,45 @@ static PyObject *py_security_ace_equal(PyObject *py_self, PyObject *py_other, in Py_RETURN_NOTIMPLEMENTED; } +static PyObject *py_security_ace_as_sddl(PyObject *self, PyObject *args) +{ + struct security_ace *ace = pytalloc_get_ptr(self); + PyObject *py_sid = Py_None; + struct dom_sid *sid = NULL; + char *text = NULL; + PyObject *ret = Py_None; + + if (!PyArg_ParseTuple(args, "O!", &dom_sid_Type, &py_sid)) + return NULL; + + if (!PyObject_TypeCheck(py_sid, &dom_sid_Type)) { + PyErr_SetString(PyExc_TypeError, + "expected security.dom_sid " + "for second argument to .sddl_encode_ace"); + return NULL; + } + + sid = pytalloc_get_ptr(py_sid); + + text = sddl_encode_ace(NULL, ace, sid); + if (text == NULL) { + return NULL; + } + ret = PyUnicode_FromString(text); + talloc_free(text); + + return ret; +} + +static PyMethodDef py_security_ace_extra_methods[] = { + { "as_sddl", (PyCFunction)py_security_ace_as_sddl, METH_VARARGS, NULL }, + {0} +}; + #define PY_ACE_PATCH py_security_ace_patch static void py_security_ace_patch(PyTypeObject *type) { type->tp_richcompare = py_security_ace_equal; + PyType_AddMethods(type, py_security_ace_extra_methods); } -- 2.11.4.GIT