The branch, master has been updated via 00224d0 Fix bug #7987 - ACL can get lost when files are being renamed. from ac216c1 Fix bug #8047 - mdns registration doesn't work if "interfaces" is used in smb.conf
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 00224d06c389e9744b83bcec09a9d002086058fc Author: Jeremy Allison <j...@samba.org> Date: Fri Apr 1 16:50:28 2011 -0700 Fix bug #7987 - ACL can get lost when files are being renamed. There is no reason for smbd with Windows ACLs to use chmod or fchmod unless it's a file opened with UNIX extensions or with posix pathnames. Autobuild-User: Jeremy Allison <j...@samba.org> Autobuild-Date: Sat Apr 2 02:40:43 CEST 2011 on sn-devel-104 ----------------------------------------------------------------------- Summary of changes: source3/modules/vfs_acl_common.c | 40 ++++++++++++++++++++++++++++++++++++++ source3/modules/vfs_acl_tdb.c | 6 ++++- source3/modules/vfs_acl_xattr.c | 4 +++ 3 files changed, 49 insertions(+), 1 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/modules/vfs_acl_common.c b/source3/modules/vfs_acl_common.c index b3e9973..827c954 100644 --- a/source3/modules/vfs_acl_common.c +++ b/source3/modules/vfs_acl_common.c @@ -1020,3 +1020,43 @@ static int unlink_acl_common(struct vfs_handle_struct *handle, smb_fname->base_name, false); } + +static int chmod_acl_module_common(struct vfs_handle_struct *handle, + const char *path, mode_t mode) +{ + if (lp_posix_pathnames()) { + /* Only allow this on POSIX pathnames. */ + return SMB_VFS_NEXT_CHMOD(handle, path, mode); + } + return 0; +} + +static int fchmod_acl_module_common(struct vfs_handle_struct *handle, + struct files_struct *fsp, mode_t mode) +{ + if (fsp->posix_open) { + /* Only allow this on POSIX opens. */ + return SMB_VFS_NEXT_FCHMOD(handle, fsp, mode); + } + return 0; +} + +static int chmod_acl_acl_module_common(struct vfs_handle_struct *handle, + const char *name, mode_t mode) +{ + if (lp_posix_pathnames()) { + /* Only allow this on POSIX pathnames. */ + return SMB_VFS_NEXT_CHMOD_ACL(handle, name, mode); + } + return 0; +} + +static int fchmod_acl_acl_module_common(struct vfs_handle_struct *handle, + struct files_struct *fsp, mode_t mode) +{ + if (fsp->posix_open) { + /* Only allow this on POSIX opens. */ + return SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, mode); + } + return 0; +} diff --git a/source3/modules/vfs_acl_tdb.c b/source3/modules/vfs_acl_tdb.c index 7a9e10d..17cf493 100644 --- a/source3/modules/vfs_acl_tdb.c +++ b/source3/modules/vfs_acl_tdb.c @@ -401,13 +401,17 @@ static struct vfs_fn_pointers vfs_acl_tdb_fns = { .disconnect = disconnect_acl_tdb, .opendir = opendir_acl_common, .mkdir = mkdir_acl_common, + .rmdir = rmdir_acl_tdb, .open = open_acl_common, .create_file = create_file_acl_common, .unlink = unlink_acl_tdb, - .rmdir = rmdir_acl_tdb, + .chmod = chmod_acl_module_common, + .fchmod = fchmod_acl_module_common, .fget_nt_acl = fget_nt_acl_common, .get_nt_acl = get_nt_acl_common, .fset_nt_acl = fset_nt_acl_common, + .chmod_acl = chmod_acl_acl_module_common, + .fchmod_acl = fchmod_acl_acl_module_common, .sys_acl_set_file = sys_acl_set_file_tdb, .sys_acl_set_fd = sys_acl_set_fd_tdb }; diff --git a/source3/modules/vfs_acl_xattr.c b/source3/modules/vfs_acl_xattr.c index 213ba9a..90959f3 100644 --- a/source3/modules/vfs_acl_xattr.c +++ b/source3/modules/vfs_acl_xattr.c @@ -209,9 +209,13 @@ static struct vfs_fn_pointers vfs_acl_xattr_fns = { .open = open_acl_common, .create_file = create_file_acl_common, .unlink = unlink_acl_common, + .chmod = chmod_acl_module_common, + .fchmod = fchmod_acl_module_common, .fget_nt_acl = fget_nt_acl_common, .get_nt_acl = get_nt_acl_common, .fset_nt_acl = fset_nt_acl_common, + .chmod_acl = chmod_acl_acl_module_common, + .fchmod_acl = fchmod_acl_acl_module_common, .sys_acl_set_file = sys_acl_set_file_xattr, .sys_acl_set_fd = sys_acl_set_fd_xattr }; -- Samba Shared Repository