From: Volker Lendecke Date: Tue, 28 Jan 2025 04:58:24 +0000 (+0100) Subject: vfs: Implement cap_fstatat() X-Git-Tag: tevent-0.17.0~464 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b6d7152f92864c2767a5748624d208348dd55c92;p=thirdparty%2Fsamba.git vfs: Implement cap_fstatat() Signed-off-by: Volker Lendecke Reviewed-by: Anoop C S --- diff --git a/source3/modules/vfs_cap.c b/source3/modules/vfs_cap.c index 2d4ea76bb78..c61380d64f6 100644 --- a/source3/modules/vfs_cap.c +++ b/source3/modules/vfs_cap.c @@ -269,6 +269,39 @@ static int cap_renameat(vfs_handle_struct *handle, return ret; } +static int cap_fstatat(struct vfs_handle_struct *handle, + const struct files_struct *dirfsp, + const struct smb_filename *smb_fname, + SMB_STRUCT_STAT *sbuf, + int flags) +{ + struct smb_filename *tmp = NULL; + int ret; + + tmp = cp_smb_filename(talloc_tos(), smb_fname); + if (tmp == NULL) { + errno = ENOMEM; + return -1; + } + + tmp->base_name = capencode(talloc_tos(), smb_fname->base_name); + if (tmp->base_name == NULL) { + TALLOC_FREE(tmp); + errno = ENOMEM; + return -1; + } + + ret = SMB_VFS_NEXT_FSTATAT(handle, dirfsp, tmp, sbuf, flags); + + { + int err = errno; + TALLOC_FREE(tmp); + errno = err; + } + + return ret; +} + static int cap_stat(vfs_handle_struct *handle, struct smb_filename *smb_fname) { char *cappath; @@ -873,6 +906,7 @@ static struct vfs_fn_pointers vfs_cap_fns = { .mkdirat_fn = cap_mkdirat, .openat_fn = cap_openat, .renameat_fn = cap_renameat, + .fstatat_fn = cap_fstatat, .stat_fn = cap_stat, .lstat_fn = cap_lstat, .unlinkat_fn = cap_unlinkat,