From: Ralph Boehme Date: Wed, 24 Aug 2016 18:31:00 +0000 (+0200) Subject: vfs_acl_xattr|tdb: add option to control default ACL style X-Git-Tag: samba-4.3.12~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=63d0f968eb72ec2d9074570d1bc14cf9013263ca;p=thirdparty%2Fsamba.git vfs_acl_xattr|tdb: add option to control default ACL style Existing behaviour is "posix" style. Next commit will (re)add the "windows" style. This commit doesn't change behaviour in any way. Bug: https://bugzilla.samba.org/show_bug.cgi?id=12177 Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison (backported from commit 26a9867ae1a9c69659252ce03c280c7c18a6c58f) --- diff --git a/docs-xml/manpages/vfs_acl_tdb.8.xml b/docs-xml/manpages/vfs_acl_tdb.8.xml index becbc55b324..9ef3962d81e 100644 --- a/docs-xml/manpages/vfs_acl_tdb.8.xml +++ b/docs-xml/manpages/vfs_acl_tdb.8.xml @@ -63,6 +63,31 @@ + + + acl_tdb:default acl style = [posix|windows] + + + This parameter determines the type of ACL that is synthesized in + case a file or directory lacks an + security.NTACL xattr. + + + When set to posix, an ACL will be + synthesized based on the POSIX mode permissions for user, group + and others, with an additional ACE for NT + Authority\SYSTEM will full rights. + + + When set to windows, an ACL is synthesized + the same way Windows does it, only including permissions for the + owner and NT Authority\SYSTEM. + + + The default for this option is posix. + + + diff --git a/docs-xml/manpages/vfs_acl_xattr.8.xml b/docs-xml/manpages/vfs_acl_xattr.8.xml index 82a919a5726..17cb3d3c9e3 100644 --- a/docs-xml/manpages/vfs_acl_xattr.8.xml +++ b/docs-xml/manpages/vfs_acl_xattr.8.xml @@ -67,6 +67,31 @@ + + + acl_xattr:default acl style = [posix|windows] + + + This parameter determines the type of ACL that is synthesized in + case a file or directory lacks an + security.NTACL xattr. + + + When set to posix, an ACL will be + synthesized based on the POSIX mode permissions for user, group + and others, with an additional ACE for NT + Authority\SYSTEM will full rights. + + + When set to windows, an ACL is synthesized + the same way Windows does it, only including permissions for the + owner and NT Authority\SYSTEM. + + + The default for this option is posix. + + + diff --git a/source3/modules/vfs_acl_common.c b/source3/modules/vfs_acl_common.c index 15002ec5c5a..e8eaa4fcd2c 100644 --- a/source3/modules/vfs_acl_common.c +++ b/source3/modules/vfs_acl_common.c @@ -46,8 +46,16 @@ static NTSTATUS store_acl_blob_fsp(vfs_handle_struct *handle, SECINFO_DACL | \ SECINFO_SACL) +enum default_acl_style {DEFAULT_ACL_POSIX, DEFAULT_ACL_WINDOWS}; + +static const struct enum_list default_acl_style[] = { + {DEFAULT_ACL_POSIX, "posix"}, + {DEFAULT_ACL_WINDOWS, "windows"} +}; + struct acl_common_config { bool ignore_system_acls; + enum default_acl_style default_acl_style; }; static bool init_acl_common_config(vfs_handle_struct *handle) @@ -65,6 +73,11 @@ static bool init_acl_common_config(vfs_handle_struct *handle) ACL_MODULE_NAME, "ignore system acls", false); + config->default_acl_style = lp_parm_enum(SNUM(handle->conn), + ACL_MODULE_NAME, + "default acl style", + default_acl_style, + DEFAULT_ACL_POSIX); SMB_VFS_HANDLE_SET_DATA(handle, config, NULL, struct acl_common_config, @@ -387,10 +400,10 @@ static NTSTATUS add_directory_inheritable_components(vfs_handle_struct *handle, return NT_STATUS_OK; } -static NTSTATUS make_default_filesystem_acl(TALLOC_CTX *ctx, - const char *name, - SMB_STRUCT_STAT *psbuf, - struct security_descriptor **ppdesc) +static NTSTATUS make_default_acl_posix(TALLOC_CTX *ctx, + const char *name, + SMB_STRUCT_STAT *psbuf, + struct security_descriptor **ppdesc) { struct dom_sid owner_sid, group_sid; size_t size = 0; @@ -400,8 +413,7 @@ static NTSTATUS make_default_filesystem_acl(TALLOC_CTX *ctx, struct security_acl *new_dacl = NULL; int idx = 0; - DEBUG(10,("make_default_filesystem_acl: file %s mode = 0%o\n", - name, (int)mode )); + DBG_DEBUG("file %s mode = 0%o\n",name, (int)mode); uid_to_sid(&owner_sid, psbuf->st_ex_uid); gid_to_sid(&group_sid, psbuf->st_ex_gid); @@ -495,6 +507,29 @@ static NTSTATUS make_default_filesystem_acl(TALLOC_CTX *ctx, return NT_STATUS_OK; } +static NTSTATUS make_default_filesystem_acl(TALLOC_CTX *ctx, + struct acl_common_config *config, + const char *name, + SMB_STRUCT_STAT *psbuf, + struct security_descriptor **ppdesc) +{ + NTSTATUS status; + + switch (config->default_acl_style) { + + case DEFAULT_ACL_POSIX: + status = make_default_acl_posix(ctx, name, psbuf, ppdesc); + break; + + default: + DBG_ERR("unknown acl style %d", config->default_acl_style); + status = NT_STATUS_INTERNAL_ERROR; + break; + } + + return status; +} + /** * Validate an ACL blob * @@ -800,6 +835,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct *handle, status = make_default_filesystem_acl( mem_ctx, + config, name, psbuf, &psd);