From: Ralph Boehme Date: Fri, 11 Dec 2020 11:59:28 +0000 (+0100) Subject: vfs_fruit: fix close for fake_fd X-Git-Tag: samba-4.12.11~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=121fbf80523e4456a0fc068e08b0e6379d39200d;p=thirdparty%2Fsamba.git vfs_fruit: fix close for fake_fd If the next backend doesn't use kernel fd's should not pass a fake_fd to the next backend. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14596 Signed-off-by: Ralph Boehme Reviewed-by: Stefan Metzmacher Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Fri Jan 8 21:38:18 UTC 2021 on sn-devel-184 (back-ported from commit 564b62a6f7c0a9b9712946d723118122b9c3785f) Autobuild-User(v4-12-test): Karolin Seeger Autobuild-Date(v4-12-test): Wed Jan 13 13:45:00 UTC 2021 on sn-devel-184 --- diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c index 5f0ac1d28b3..a3b823fc6af 100644 --- a/source3/modules/vfs_fruit.c +++ b/source3/modules/vfs_fruit.c @@ -1632,6 +1632,7 @@ static int fruit_open(vfs_handle_struct *handle, static int fruit_close_meta(vfs_handle_struct *handle, files_struct *fsp) { + struct fio *fio = (struct fio *)VFS_FETCH_FSP_EXTENSION(handle, fsp); int ret; struct fruit_config_data *config = NULL; @@ -1640,7 +1641,12 @@ static int fruit_close_meta(vfs_handle_struct *handle, switch (config->meta) { case FRUIT_META_STREAM: - ret = SMB_VFS_NEXT_CLOSE(handle, fsp); + if (fio->fake_fd) { + ret = vfs_fake_fd_close(fsp->fh->fd); + fsp->fh->fd = -1; + } else { + ret = SMB_VFS_NEXT_CLOSE(handle, fsp); + } break; case FRUIT_META_NETATALK: @@ -2529,13 +2535,13 @@ static ssize_t fruit_pwrite_meta_stream(vfs_handle_struct *handle, } if (fio->fake_fd) { - int fd; + int fd = fsp->fh->fd; - ret = SMB_VFS_NEXT_CLOSE(handle, fsp); + ret = vfs_fake_fd_close(fd); + fsp->fh->fd = -1; if (ret != 0) { DBG_ERR("Close [%s] failed: %s\n", fsp_str_dbg(fsp), strerror(errno)); - fsp->fh->fd = -1; return -1; }