From: Noel Power Date: Fri, 9 Apr 2021 13:54:44 +0000 (+0200) Subject: s3/modules: VFS: shadow_copy2: Add new fchmod_fn implementation X-Git-Tag: tevent-0.11.0~1221 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a412b5cc793b89d6e79f5031ba462777af14c656;p=thirdparty%2Fsamba.git s3/modules: VFS: shadow_copy2: Add new fchmod_fn implementation Signed-off-by: Noel Power Reviewed-by: Ralph Boehme --- diff --git a/source3/modules/vfs_shadow_copy2.c b/source3/modules/vfs_shadow_copy2.c index 5d414f9b098..53061927bc7 100644 --- a/source3/modules/vfs_shadow_copy2.c +++ b/source3/modules/vfs_shadow_copy2.c @@ -1448,6 +1448,28 @@ static int shadow_copy2_chmod(vfs_handle_struct *handle, return SMB_VFS_NEXT_CHMOD(handle, smb_fname, mode); } +static int shadow_copy2_fchmod(vfs_handle_struct *handle, + struct files_struct *fsp, + mode_t mode) +{ + time_t timestamp = 0; + const struct smb_filename *smb_fname = NULL; + + smb_fname = fsp->fsp_name; + if (!shadow_copy2_strip_snapshot(talloc_tos(), + handle, + smb_fname, + ×tamp, + NULL)) { + return -1; + } + if (timestamp != 0) { + errno = EROFS; + return -1; + } + return SMB_VFS_NEXT_FCHMOD(handle, fsp, mode); +} + static void store_cwd_data(vfs_handle_struct *handle, const char *connectpath) { @@ -3171,6 +3193,7 @@ static struct vfs_fn_pointers vfs_shadow_copy2_fns = { .openat_fn = shadow_copy2_openat, .unlinkat_fn = shadow_copy2_unlinkat, .chmod_fn = shadow_copy2_chmod, + .fchmod_fn = shadow_copy2_fchmod, .chdir_fn = shadow_copy2_chdir, .ntimes_fn = shadow_copy2_ntimes, .readlinkat_fn = shadow_copy2_readlinkat,