summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2018-06-14 14:08:36 -0700
committerKarolin Seeger <kseeger@samba.org>2018-06-20 13:53:29 +0200
commit7f32430cb99fdae882889b8dc460883dc1511906 (patch)
treeabc4f8ca36431222c6874737b489b4e55b14a13e /source3
parent6121a6fec193b28e04329a4fde4ea058b9b7cfec (diff)
downloadsamba-7f32430cb99fdae882889b8dc460883dc1511906.tar.gz
python: Fix talloc frame use in make_simple_acl().
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13474 Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org> This was fixed differently by commit 539f51f0dfbe4ce317a2978982fd0fc9a7fd6922 in master. Autobuild-User(v4-8-test): Karolin Seeger <kseeger@samba.org> Autobuild-Date(v4-8-test): Wed Jun 20 13:53:29 CEST 2018 on sn-devel-144
Diffstat (limited to 'source3')
-rw-r--r--source3/smbd/pysmbd.c49
1 files changed, 26 insertions, 23 deletions
diff --git a/source3/smbd/pysmbd.c b/source3/smbd/pysmbd.c
index be30b866e20..41b44ad2d42 100644
--- a/source3/smbd/pysmbd.c
+++ b/source3/smbd/pysmbd.c
@@ -268,101 +268,101 @@ static int set_acl_entry_perms(SMB_ACL_ENTRY_T entry, mode_t perm_mask)
return 0;
}
-static SMB_ACL_T make_simple_acl(gid_t gid, mode_t chmod_mode)
+static SMB_ACL_T make_simple_acl(TALLOC_CTX *mem_ctx,
+ gid_t gid,
+ mode_t chmod_mode)
{
- TALLOC_CTX *frame = talloc_stackframe();
-
mode_t mode = SMB_ACL_READ|SMB_ACL_WRITE|SMB_ACL_EXECUTE;
mode_t mode_user = (chmod_mode & 0700) >> 6;
mode_t mode_group = (chmod_mode & 070) >> 3;
mode_t mode_other = chmod_mode & 07;
SMB_ACL_ENTRY_T entry;
- SMB_ACL_T acl = sys_acl_init(frame);
+ SMB_ACL_T acl = sys_acl_init(mem_ctx);
if (!acl) {
return NULL;
}
if (sys_acl_create_entry(&acl, &entry) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (sys_acl_set_tag_type(entry, SMB_ACL_USER_OBJ) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (set_acl_entry_perms(entry, mode_user) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (sys_acl_create_entry(&acl, &entry) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (sys_acl_set_tag_type(entry, SMB_ACL_GROUP_OBJ) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (set_acl_entry_perms(entry, mode_group) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (sys_acl_create_entry(&acl, &entry) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (sys_acl_set_tag_type(entry, SMB_ACL_OTHER) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (set_acl_entry_perms(entry, mode_other) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (gid != -1) {
if (sys_acl_create_entry(&acl, &entry) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (sys_acl_set_tag_type(entry, SMB_ACL_GROUP) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (sys_acl_set_qualifier(entry, &gid) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (set_acl_entry_perms(entry, mode_group) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
}
if (sys_acl_create_entry(&acl, &entry) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (sys_acl_set_tag_type(entry, SMB_ACL_MASK) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
if (set_acl_entry_perms(entry, mode) != 0) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(acl);
return NULL;
}
return acl;
@@ -386,17 +386,20 @@ static PyObject *py_smbd_set_simple_acl(PyObject *self, PyObject *args, PyObject
&fname, &mode, &gid, &service))
return NULL;
- acl = make_simple_acl(gid, mode);
-
frame = talloc_stackframe();
+ acl = make_simple_acl(frame, gid, mode);
+ if (acl == NULL) {
+ TALLOC_FREE(frame);
+ return NULL;
+ }
+
conn = get_conn(frame, service);
if (!conn) {
return NULL;
}
ret = set_sys_acl_conn(fname, SMB_ACL_TYPE_ACCESS, acl, conn);
- TALLOC_FREE(acl);
if (ret != 0) {
TALLOC_FREE(frame);