]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
vfs_default: support pathref fd's in vfswrap_fsetxattr()
authorRalph Boehme <slow@samba.org>
Tue, 29 Sep 2020 09:11:53 +0000 (11:11 +0200)
committerRalph Boehme <slow@samba.org>
Wed, 16 Dec 2020 09:08:30 +0000 (09:08 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/modules/vfs_default.c

index 11112fcb962d33c7ec28b50af044e34c3e947bda..c8325cbe6331be2226bf07c95ed17c817dfdcbe0 100644 (file)
@@ -3659,7 +3659,28 @@ static int vfswrap_setxattr(struct vfs_handle_struct *handle,
 
 static int vfswrap_fsetxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, const void *value, size_t size, int flags)
 {
-       return fsetxattr(fsp_get_io_fd(fsp), name, value, size, flags);
+       int fd = fsp_get_pathref_fd(fsp);
+
+       if (!fsp->fsp_flags.is_pathref) {
+               return fsetxattr(fd, name, value, size, flags);
+       }
+
+       if (fsp->fsp_flags.have_proc_fds) {
+               const char *p = NULL;
+               char buf[PATH_MAX];
+
+               p = sys_proc_fd_path(fd, buf, sizeof(buf));
+               if (p == NULL) {
+                       return -1;
+               }
+
+               return setxattr(p, name, value, size, flags);
+       }
+
+       /*
+        * This is no longer a handle based call.
+        */
+       return setxattr(fsp->fsp_name->base_name, name, value, size, flags);
 }
 
 static bool vfswrap_aio_force(struct vfs_handle_struct *handle, struct files_struct *fsp)