vfs_zfsacl: use a helper variable in zfs_get_nt_acl_common()
authorRalph Boehme <slow@samba.org>
Thu, 20 Aug 2020 14:41:36 +0000 (16:41 +0200)
committerKarolin Seeger <kseeger@samba.org>
Fri, 30 Oct 2020 13:54:18 +0000 (13:54 +0000)
No change in behaviour.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14471

Pair-Programmed-With: Andrew Walker <awalker@ixsystems.com>
Signed-off-by: Ralph Boehme <slow@samba.org>
Signed-off-by: Andrew Walker <awalker@ixsystems.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
(cherry picked from commit 13b4f913b06457d8e1f7cf71c85722bbecabd990)

source3/modules/vfs_zfsacl.c

index 18bd84ea99c3a1feb3f102f21e3c654f77c9f97a..092ad33504ad74d6b5a0266e1a4297a348a12ecb 100644 (file)
@@ -87,6 +87,7 @@ static NTSTATUS zfs_get_nt_acl_common(struct connection_struct *conn,
        }
        for(i=0; i<naces; i++) {
                SMB_ACE4PROP_T aceprop;
+               uint16_t special = 0;
 
                aceprop.aceType  = (uint32_t) acebuf[i].a_type;
                aceprop.aceFlags = (uint32_t) acebuf[i].a_flags;
@@ -109,6 +110,8 @@ static NTSTATUS zfs_get_nt_acl_common(struct connection_struct *conn,
                        aceprop.aceMask |= SMB_ACE4_SYNCHRONIZE;
                }
 
+               special = acebuf[i].a_flags & (ACE_OWNER|ACE_GROUP|ACE_EVERYONE);
+
                if (is_dir && (aceprop.aceMask & SMB_ACE4_ADD_FILE)) {
                        aceprop.aceMask |= SMB_ACE4_DELETE_CHILD;
                }
@@ -118,16 +121,20 @@ static NTSTATUS zfs_get_nt_acl_common(struct connection_struct *conn,
                        inherited_is_present = true;
                }
 #endif
-               if(aceprop.aceFlags & ACE_OWNER) {
+               switch(special) {
+               case(ACE_OWNER):
                        aceprop.flags = SMB_ACE4_ID_SPECIAL;
                        aceprop.who.special_id = SMB_ACE4_WHO_OWNER;
-               } else if(aceprop.aceFlags & ACE_GROUP) {
+                       break;
+               case(ACE_GROUP):
                        aceprop.flags = SMB_ACE4_ID_SPECIAL;
                        aceprop.who.special_id = SMB_ACE4_WHO_GROUP;
-               } else if(aceprop.aceFlags & ACE_EVERYONE) {
+                       break;
+               case(ACE_EVERYONE):
                        aceprop.flags = SMB_ACE4_ID_SPECIAL;
                        aceprop.who.special_id = SMB_ACE4_WHO_EVERYONE;
-               } else {
+                       break;
+               default:
                        aceprop.flags   = 0;
                }
                if (smb_add_ace4(pacl, &aceprop) == NULL) {