[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Fri Apr 1 18:41:02 MDT 2011


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 <jra at 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 <jra at 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


More information about the samba-cvs mailing list