From: Volker Lendecke Date: Tue, 25 Feb 2025 11:09:58 +0000 (+0100) Subject: vfs: Fix vfs_streams_depot's fstatat X-Git-Tag: tevent-0.17.0~621 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=125862c617efae6926c91acae44206f29e61b148;p=thirdparty%2Fsamba.git 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 --- diff --git a/source3/modules/vfs_streams_depot.c b/source3/modules/vfs_streams_depot.c index 322e04268b8..4da66d6cce4 100644 --- a/source3/modules/vfs_streams_depot.c +++ b/source3/modules/vfs_streams_depot.c @@ -680,6 +680,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; @@ -698,6 +699,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) { @@ -705,8 +714,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);