vfs_nfs4acl_xattr: fsp->fh->fd can legally be -1
authorRalph Boehme <slow@samba.org>
Mon, 23 Oct 2017 14:38:51 +0000 (16:38 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 7 Nov 2017 23:20:08 +0000 (00:20 +0100)
We only open the underlying file if the open access mode contains

FILE_READ_DATA|FILE_WRITE_DATA|FILE_APPEND_DATA|FILE_EXECUTE

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
selftest/knownfail
source3/modules/vfs_nfs4acl_xattr.c

index 030520f7e582b657b4c3205532c137444eabe8e4..f3c605ba5823af7b8ef1bdda7d7e13ec36d4c0ac 100644 (file)
 ^samba3.raw.acls nfs4acl_xattr-simple.create_owner_file\(nt4_dc\)
 ^samba3.raw.acls nfs4acl_xattr-simple.create_owner_dir\(nt4_dc\)
 ^samba3.raw.acls nfs4acl_xattr-simple.nulldacl\(nt4_dc\)
-^samba3.raw.acls nfs4acl_xattr-simple.generic\(nt4_dc\)
 ^samba3.raw.acls nfs4acl_xattr-special.INHERITFLAGS\(nt4_dc\)
 ^samba3.raw.acls nfs4acl_xattr-special.create_owner_file\(nt4_dc\)
 ^samba3.raw.acls nfs4acl_xattr-special.create_owner_dir\(nt4_dc\)
 ^samba3.raw.acls nfs4acl_xattr-special.nulldacl\(nt4_dc\)
-^samba3.raw.acls nfs4acl_xattr-special.generic\(nt4_dc\)
 ^samba3.raw.acls nfs4acl_xattr-special.inherit_creator_owner\(nt4_dc\)
 ^samba3.raw.acls nfs4acl_xattr-special.inherit_creator_group\(nt4_dc\)
 ^samba3.base.delete.deltest16a
index 2bc546150e08f4ca617f042875b0c3d8af06a8a5..b3b5e497061c08936ab58b9574eacb630e664490 100644 (file)
@@ -463,8 +463,14 @@ static bool nfs4acl_smb4acl_set_fn(vfs_handle_struct *handle,
                return false;
        }
 
-       ret = SMB_VFS_NEXT_FSETXATTR(handle, fsp, config->xattr_name,
-                                    blob.data, blob.length, 0);
+       if (fsp->fh->fd != -1) {
+               ret = SMB_VFS_NEXT_FSETXATTR(handle, fsp, config->xattr_name,
+                                            blob.data, blob.length, 0);
+       } else {
+               ret = SMB_VFS_NEXT_SETXATTR(handle, fsp->fsp_name,
+                                           config->xattr_name,
+                                           blob.data, blob.length, 0);
+       }
        data_blob_free(&blob);
        if (ret != 0) {
                DBG_ERR("can't store acl in xattr: %s\n", strerror(errno));