diff options
author | Jeremy Allison <jra@samba.org> | 2009-12-07 14:36:12 -0800 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2009-12-07 14:36:12 -0800 |
commit | 12bac42a93cd6afd3cd29460b97bbd61852a9d44 (patch) | |
tree | b0258097d58eecf03f7cab0c46c704c8992cdbe2 /source3/modules/vfs_acl_xattr.c | |
parent | 909cd2617fa1c170183664af1fc4253af2dc2f21 (diff) | |
download | samba-12bac42a93cd6afd3cd29460b97bbd61852a9d44.tar.gz samba-12bac42a93cd6afd3cd29460b97bbd61852a9d44.tar.bz2 samba-12bac42a93cd6afd3cd29460b97bbd61852a9d44.zip |
Hopefullt final fix for 6802 - acl_xattr.c module: A created folder does not properly inherit permissions from parent and 6938 - No hook exists to check creation rights when using acl_xattr module
Volker was right (dammit :-). It's much easier to catch
this case in the create_file() vfs call instead of trying
to do everything inside open() and mkdir(). Hook all these
functions to gain the desired effect.
Jeremy.
Diffstat (limited to 'source3/modules/vfs_acl_xattr.c')
-rw-r--r-- | source3/modules/vfs_acl_xattr.c | 36 |
1 files changed, 1 insertions, 35 deletions
diff --git a/source3/modules/vfs_acl_xattr.c b/source3/modules/vfs_acl_xattr.c index c1812b9278..625ef91e8f 100644 --- a/source3/modules/vfs_acl_xattr.c +++ b/source3/modules/vfs_acl_xattr.c @@ -127,41 +127,6 @@ static NTSTATUS store_acl_blob_fsp(vfs_handle_struct *handle, return NT_STATUS_OK; } -/******************************************************************* - Store a DATA_BLOB into an xattr given a pathname. -*******************************************************************/ - -static NTSTATUS store_acl_blob_pathname(vfs_handle_struct *handle, - const char *fname, - DATA_BLOB *pblob) -{ - connection_struct *conn = handle->conn; - int ret; - int saved_errno = 0; - - DEBUG(10,("store_acl_blob_pathname: storing blob " - "length %u on file %s\n", - (unsigned int)pblob->length, fname)); - - become_root(); - ret = SMB_VFS_SETXATTR(conn, fname, - XATTR_NTACL_NAME, - pblob->data, pblob->length, 0); - if (ret) { - saved_errno = errno; - } - unbecome_root(); - if (ret) { - errno = saved_errno; - DEBUG(5, ("store_acl_blob_pathname: setting attr failed " - "for file %s with error %s\n", - fname, - strerror(errno) )); - return map_nt_error_from_unix(errno); - } - return NT_STATUS_OK; -} - /********************************************************************* Remove a Windows ACL - we're setting the underlying POSIX ACL. *********************************************************************/ @@ -235,6 +200,7 @@ static struct vfs_fn_pointers vfs_acl_xattr_fns = { .opendir = opendir_acl_common, .mkdir = mkdir_acl_common, .open = open_acl_common, + .create_file = create_file_acl_common, .fget_nt_acl = fget_nt_acl_common, .get_nt_acl = get_nt_acl_common, .fset_nt_acl = fset_nt_acl_common, |