From: Noel Power Date: Fri, 9 Apr 2021 13:49:15 +0000 (+0200) Subject: s3/modules: VFS: ceph_snapshots: Add new fchmod_fn implementation X-Git-Tag: tevent-0.11.0~1223 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c1e9aea0da1f1f0ad40e5089d92a76c29f51ceee;p=thirdparty%2Fsamba.git s3/modules: VFS: ceph_snapshots: Add new fchmod_fn implementation Signed-off-by: Noel Power Reviewed-by: Ralph Boehme --- diff --git a/source3/modules/vfs_ceph_snapshots.c b/source3/modules/vfs_ceph_snapshots.c index 7b2307b19ee..0e72aae574a 100644 --- a/source3/modules/vfs_ceph_snapshots.c +++ b/source3/modules/vfs_ceph_snapshots.c @@ -960,6 +960,29 @@ static int ceph_snap_gmt_chmod(vfs_handle_struct *handle, return SMB_VFS_NEXT_CHMOD(handle, csmb_fname, mode); } +static int ceph_snap_gmt_fchmod(vfs_handle_struct *handle, + struct files_struct *fsp, + mode_t mode) +{ + const struct smb_filename *csmb_fname = NULL; + time_t timestamp = 0; + int ret; + + csmb_fname = fsp->fsp_name; + ret = ceph_snap_gmt_strip_snapshot(handle, + csmb_fname, + ×tamp, NULL, 0); + if (ret < 0) { + errno = -ret; + return -1; + } + if (timestamp != 0) { + errno = EROFS; + return -1; + } + return SMB_VFS_NEXT_FCHMOD(handle, fsp, mode); +} + static int ceph_snap_gmt_chdir(vfs_handle_struct *handle, const struct smb_filename *csmb_fname) { @@ -1461,6 +1484,7 @@ static struct vfs_fn_pointers ceph_snap_fns = { .openat_fn = ceph_snap_gmt_openat, .unlinkat_fn = ceph_snap_gmt_unlinkat, .chmod_fn = ceph_snap_gmt_chmod, + .fchmod_fn = ceph_snap_gmt_fchmod, .chdir_fn = ceph_snap_gmt_chdir, .ntimes_fn = ceph_snap_gmt_ntimes, .readlinkat_fn = ceph_snap_gmt_readlinkat,