Py_RETURN_NONE;
}
+static PyObject *py_descriptor_dacl_del_ace(PyObject *self, PyObject *args)
+{
+ struct security_descriptor *desc = pytalloc_get_ptr(self);
+ NTSTATUS status;
+ struct security_ace *ace = NULL;
+ PyObject *py_ace = Py_None;
+
+ if (!PyArg_ParseTuple(args, "O!", &security_ace_Type, &py_ace))
+ return NULL;
+
+ if (!PyObject_TypeCheck(py_ace, &security_ace_Type)) {
+ PyErr_SetString(PyExc_TypeError,
+ "expected security.security_ace "
+ "for first argument to .dacl_del_ace");
+ return NULL;
+ }
+
+ ace = pytalloc_get_ptr(py_ace);
+ status = security_descriptor_dacl_del_ace(desc, ace);
+ PyErr_NTSTATUS_IS_ERR_RAISE(status);
+ Py_RETURN_NONE;
+}
+
+static PyObject *py_descriptor_sacl_del_ace(PyObject *self, PyObject *args)
+{
+ struct security_descriptor *desc = pytalloc_get_ptr(self);
+ NTSTATUS status;
+ struct security_ace *ace = NULL;
+ PyObject *py_ace = Py_None;
+
+ if (!PyArg_ParseTuple(args, "O!", &security_ace_Type, &py_ace))
+ return NULL;
+
+ if (!PyObject_TypeCheck(py_ace, &security_ace_Type)) {
+ PyErr_SetString(PyExc_TypeError,
+ "expected security.security_ace "
+ "for first argument to .sacl_del_ace");
+ return NULL;
+ }
+
+ ace = pytalloc_get_ptr(py_ace);
+ status = security_descriptor_sacl_del_ace(desc, ace);
+ PyErr_NTSTATUS_IS_ERR_RAISE(status);
+ Py_RETURN_NONE;
+}
+
static PyObject *py_descriptor_new(PyTypeObject *self, PyObject *args, PyObject *kwargs)
{
return pytalloc_steal(self, security_descriptor_initialise(NULL));
NULL },
{ "sacl_del", (PyCFunction)py_descriptor_sacl_del, METH_VARARGS,
NULL },
- { "from_sddl", (PyCFunction)py_descriptor_from_sddl, METH_VARARGS|METH_CLASS,
+ { "dacl_del_ace", (PyCFunction)py_descriptor_dacl_del_ace, METH_VARARGS,
+ NULL },
+ { "sacl_del_ace", (PyCFunction)py_descriptor_sacl_del_ace, METH_VARARGS,
+ NULL },
+ { "from_sddl", (PyCFunction)py_descriptor_from_sddl, METH_VARARGS|METH_CLASS,
NULL },
{ "as_sddl", (PyCFunction)py_descriptor_as_sddl, METH_VARARGS,
NULL },