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-19 17:54:45 +0200
commitca441a0f8ddde4458cb729eaabc6906a45458f1d (patch)
tree2d09b2205ee4acb4e3f8bc36036bd512db57fc2a /source3
parent03cfdb0d758d9b0697844d4c5053bd2428b16a6d (diff)
downloadsamba-ca441a0f8ddde4458cb729eaabc6906a45458f1d.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-7-test): Karolin Seeger <kseeger@samba.org> Autobuild-Date(v4-7-test): Tue Jun 19 17:54:45 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);