The branch, v3-3-test has been updated via efc3de5e2490be615121f7231cd1611df2163e78 (commit) from 6be98cbb23f4cdb65353a426ae5edbf0290774d8 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test - Log ----------------------------------------------------------------- commit efc3de5e2490be615121f7231cd1611df2163e78 Author: Jeremy Allison <[EMAIL PROTECTED]> Date: Wed Oct 8 15:19:04 2008 -0700 Deal with inheritance from parent directory when setting Windows ACLs. Jeremy. ----------------------------------------------------------------------- Summary of changes: source/include/proto.h | 3 +++ source/modules/vfs_acl_xattr.c | 16 ++++++++++++++++ source/smbd/posix_acls.c | 2 +- 3 files changed, 20 insertions(+), 1 deletions(-) Changeset truncated at 500 lines: diff --git a/source/include/proto.h b/source/include/proto.h index 23a5683..46933d6 100644 --- a/source/include/proto.h +++ b/source/include/proto.h @@ -10024,6 +10024,9 @@ NTSTATUS posix_fget_nt_acl(struct files_struct *fsp, uint32_t security_info, NTSTATUS posix_get_nt_acl(struct connection_struct *conn, const char *name, uint32_t security_info, SEC_DESC **ppdesc); int try_chown(connection_struct *conn, const char *fname, uid_t uid, gid_t gid); +NTSTATUS append_parent_acl(files_struct *fsp, + const SEC_DESC *pcsd, + SEC_DESC **pp_new_sd); NTSTATUS set_nt_acl(files_struct *fsp, uint32 security_info_sent, const SEC_DESC *psd); int get_acl_group_bits( connection_struct *conn, const char *fname, mode_t *mode ); int chmod_acl(connection_struct *conn, const char *name, mode_t mode); diff --git a/source/modules/vfs_acl_xattr.c b/source/modules/vfs_acl_xattr.c index f390786..106c33e 100644 --- a/source/modules/vfs_acl_xattr.c +++ b/source/modules/vfs_acl_xattr.c @@ -317,6 +317,22 @@ static NTSTATUS fset_nt_acl_xattr(vfs_handle_struct *handle, files_struct *fsp, return status; } + if ((security_info_sent & DACL_SECURITY_INFORMATION) && + psd->dacl != NULL && + (psd->type & (SE_DESC_DACL_AUTO_INHERITED| + SE_DESC_DACL_AUTO_INHERIT_REQ))== + (SE_DESC_DACL_AUTO_INHERITED| + SE_DESC_DACL_AUTO_INHERIT_REQ) ) { + SEC_DESC *new_psd = NULL; + status = append_parent_acl(fsp, psd, &new_psd); + if (!NT_STATUS_IS_OK(status)) { + /* Lower level acl set succeeded, + * so still return OK. */ + return NT_STATUS_OK; + } + psd = new_psd; + } + create_acl_blob(psd, &blob); store_acl_blob(fsp, &blob); diff --git a/source/smbd/posix_acls.c b/source/smbd/posix_acls.c index 48ea993..da17e53 100644 --- a/source/smbd/posix_acls.c +++ b/source/smbd/posix_acls.c @@ -3227,7 +3227,7 @@ int try_chown(connection_struct *conn, const char *fname, uid_t uid, gid_t gid) Take care of parent ACL inheritance. ****************************************************************************/ -static NTSTATUS append_parent_acl(files_struct *fsp, +NTSTATUS append_parent_acl(files_struct *fsp, const SEC_DESC *pcsd, SEC_DESC **pp_new_sd) { -- Samba Shared Repository