Fix bug #7909 - map SYNCHRONIZE acl permission statically in zfs_acl vfs module.
authorPaul B. Henson <henson@acm.org>
Thu, 13 Jan 2011 18:16:13 +0000 (10:16 -0800)
committerJeremy Allison <jra@samba.org>
Thu, 13 Jan 2011 19:02:31 +0000 (20:02 +0100)
Autobuild-User: Jeremy Allison <jra@samba.org>
Autobuild-Date: Thu Jan 13 20:02:32 CET 2011 on sn-devel-104

source3/modules/nfs4_acls.c
source3/modules/vfs_zfsacl.c

index 19139461441c4abc35c23fe4de3427d6851113cf..e2f9fe3a81588b6c0f7db3276c8ec1446d5fb0c1 100644 (file)
@@ -280,7 +280,9 @@ static bool smbacl4_nfs42win(TALLOC_CTX *mem_ctx, SMB4ACL_T *theacl, /* in */
                DEBUG(10, ("mapped ace flags: 0x%x => 0x%x\n",
                      ace->aceFlags, mapped_ace_flags));
 
-               mask = ace->aceMask;
+               /* Windows clients expect SYNC on acls to
+                  correctly allow rename. See bug #7909. */
+               mask = ace->aceMask | SMB_ACE4_SYNCHRONIZE;
                init_sec_ace(&nt_ace_list[good_aces++], &sid,
                        ace->aceType, mask,
                        mapped_ace_flags);
index 98c9bcf7606a652ae3e6062a7052d4a3f0b023b3..8a2c378e057721af128ecbfb9e4a8837b896f0a5 100644 (file)
@@ -124,6 +124,9 @@ static bool zfs_process_smbacl(files_struct *fsp, SMB4ACL_T *smbacl)
                acebuf[i].a_type        = aceprop->aceType;
                acebuf[i].a_flags       = aceprop->aceFlags;
                acebuf[i].a_access_mask = aceprop->aceMask;
+               /* SYNC on acls is a no-op on ZFS.
+                  See bug #7909. */
+               acebuf[i].a_access_mask &= ~SMB_ACE4_SYNCHRONIZE;
                acebuf[i].a_who         = aceprop->who.id;
                if(aceprop->flags & SMB_ACE4_ID_SPECIAL) {
                        switch(aceprop->who.special_id) {