diff options
author | Jeremy Allison <jra@samba.org> | 2018-06-14 14:08:36 -0700 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2018-06-19 17:54:45 +0200 |
commit | ca441a0f8ddde4458cb729eaabc6906a45458f1d (patch) | |
tree | 2d09b2205ee4acb4e3f8bc36036bd512db57fc2a /source3 | |
parent | 03cfdb0d758d9b0697844d4c5053bd2428b16a6d (diff) | |
download | samba-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.c | 49 |
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); |