From abe77f35201f60a71f8fa4f9968c1d83a95b3afe Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Tue, 25 Feb 2025 12:09:58 +0100 Subject: [PATCH] vfs: Fix vfs_streams_depot's fstatat a24c7d566f2 does not cover subdirectories Bug: https://bugzilla.samba.org/show_bug.cgi?id=15816 Signed-off-by: Volker Lendecke Reviewed-by: Ralph Boehme Autobuild-User(master): Volker Lendecke Autobuild-Date(master): Wed Feb 26 09:00:34 UTC 2025 on atb-devel-224 (cherry picked from commit 125862c617efae6926c91acae44206f29e61b148) --- source3/modules/vfs_streams_depot.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/source3/modules/vfs_streams_depot.c b/source3/modules/vfs_streams_depot.c index dd4f8f524f8..951f1af17a9 100644 --- a/source3/modules/vfs_streams_depot.c +++ b/source3/modules/vfs_streams_depot.c @@ -678,6 +678,7 @@ static int streams_depot_fstatat(struct vfs_handle_struct *handle, { struct smb_filename *smb_fname_stream = NULL; struct smb_filename *base_fname = NULL; + struct smb_filename *full_basename = NULL; NTSTATUS status; int ret = -1; @@ -696,6 +697,14 @@ static int streams_depot_fstatat(struct vfs_handle_struct *handle, goto done; } + full_basename = full_path_from_dirfsp_atname(base_fname, + dirfsp, + smb_fname); + if (full_basename == NULL) { + errno = ENOMEM; + goto done; + } + ret = SMB_VFS_NEXT_FSTATAT( handle, dirfsp, base_fname, &base_fname->st, flags); if (ret == -1) { @@ -703,8 +712,11 @@ static int streams_depot_fstatat(struct vfs_handle_struct *handle, } /* lstat the actual stream now. */ - status = stream_smb_fname( - handle, &base_fname->st, smb_fname, &smb_fname_stream, false); + status = stream_smb_fname(handle, + &base_fname->st, + full_basename, + &smb_fname_stream, + false); if (!NT_STATUS_IS_OK(status)) { ret = -1; errno = map_errno_from_nt_status(status); -- 2.39.5