From: Volker Lendecke Date: Thu, 12 Nov 2020 08:26:10 +0000 (+0100) Subject: pylibsmb: Move set_acl() to python X-Git-Tag: samba-4.14.0rc1~605 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=42be033b0b0c02413a74f984c8622b5baed2689a;p=thirdparty%2Fsamba.git pylibsmb: Move set_acl() to python The previous code was not available in threaded environments Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/python/samba/samba3/libsmb_samba_internal.py b/python/samba/samba3/libsmb_samba_internal.py index 25628bb4d43..84729b2041d 100644 --- a/python/samba/samba3/libsmb_samba_internal.py +++ b/python/samba/samba3/libsmb_samba_internal.py @@ -49,3 +49,17 @@ class Conn(LibsmbCConn): finally: self.close(fnum) return sd + + def set_acl(self, + filename, + sd, + sinfo = SECINFO_DEFAULT_FLAGS): + """Set security descriptor for file.""" + fnum = self.create( + Name=filename, + DesiredAccess=security.SEC_FLAG_MAXIMUM_ALLOWED, + ShareAccess=(FILE_SHARE_READ|FILE_SHARE_WRITE)) + try: + self.set_sd(fnum, sd, sinfo) + finally: + self.close(fnum) diff --git a/source3/libsmb/pylibsmb.c b/source3/libsmb/pylibsmb.c index 023e8e20b6c..5d106df9d05 100644 --- a/source3/libsmb/pylibsmb.c +++ b/source3/libsmb/pylibsmb.c @@ -1360,54 +1360,6 @@ static PyObject *py_smb_get_sd(struct py_cli_state *self, PyObject *args) "samba.dcerpc.security", "descriptor", sd, sd); } -/* - * Set ACL on file/directory using given security descriptor object - */ -static PyObject *py_smb_setacl(struct py_cli_state *self, PyObject *args) -{ - NTSTATUS status; - char *filename = NULL; - PyObject *py_sd = NULL; - struct security_descriptor *sd = NULL; - unsigned int sinfo = SECINFO_DEFAULT_FLAGS; - uint16_t fnum; - - /* there's no async version of cli_set_security_descriptor() */ - if (self->thread_state != NULL) { - PyErr_SetString(PyExc_RuntimeError, - "set_acl() is not supported on " - "a multi_threaded connection"); - return NULL; - } - - if (!PyArg_ParseTuple(args, "sO|I:set_acl", &filename, &py_sd, - &sinfo)) { - return NULL; - } - - sd = pytalloc_get_type(py_sd, struct security_descriptor); - if (!sd) { - PyErr_Format(PyExc_TypeError, - "Expected dcerpc.security.descriptor as argument, got %s", - pytalloc_get_name(py_sd)); - return NULL; - } - - status = cli_ntcreate(self->cli, filename, 0, - SEC_FLAG_MAXIMUM_ALLOWED, 0, - FILE_SHARE_READ|FILE_SHARE_WRITE, - FILE_OPEN, 0x0, 0x0, &fnum, NULL); - PyErr_NTSTATUS_IS_ERR_RAISE(status); - - status = cli_set_security_descriptor(self->cli, fnum, sinfo, sd); - PyErr_NTSTATUS_IS_ERR_RAISE(status); - - status = cli_close(self->cli, fnum); - PyErr_NTSTATUS_IS_ERR_RAISE(status); - - Py_RETURN_NONE; -} - static PyObject *py_smb_set_sd(struct py_cli_state *self, PyObject *args) { PyObject *py_sd = NULL; @@ -1496,9 +1448,6 @@ static PyMethodDef py_cli_state_methods[] = { { "get_sd", (PyCFunction)py_smb_get_sd, METH_VARARGS, "get_sd(fnum[, security_info=0]) -> security_descriptor object\n\n" "\t\tGet security descriptor for opened file." }, - { "set_acl", (PyCFunction)py_smb_setacl, METH_VARARGS, - "set_acl(path, security_descriptor[, security_info=0]) -> None\n\n" - "\t\tSet security descriptor for file." }, { "set_sd", (PyCFunction)py_smb_set_sd, METH_VARARGS, "set_sd(fnum, security_descriptor[, security_info=0]) -> None\n\n" "\t\tSet security descriptor for opened file." },