]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: VFS: ceph_snapshots: Implement SMB_VFS_FNTIMES()
authorSamuel Cabrero <scabrero@samba.org>
Tue, 13 Apr 2021 14:28:34 +0000 (16:28 +0200)
committerSamuel Cabrero <scabrero@sn-devel-184>
Mon, 19 Apr 2021 12:28:30 +0000 (12:28 +0000)
Signed-off-by: Samuel Cabrero <scabrero@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/modules/vfs_ceph_snapshots.c

index eccc5fcbf3e045f57b5a88393960b68dc42c7900..b455a654c22fa97ab90b948e8aa055b519ac3f1e 100644 (file)
@@ -1024,6 +1024,29 @@ static int ceph_snap_gmt_ntimes(vfs_handle_struct *handle,
        return SMB_VFS_NEXT_NTIMES(handle, csmb_fname, ft);
 }
 
+static int ceph_snap_gmt_fntimes(vfs_handle_struct *handle,
+                                files_struct *fsp,
+                                struct smb_file_time *ft)
+{
+       time_t timestamp = 0;
+       int ret;
+
+       ret = ceph_snap_gmt_strip_snapshot(handle,
+                                          fsp->fsp_name,
+                                          &timestamp,
+                                          NULL,
+                                          0);
+       if (ret < 0) {
+               errno = -ret;
+               return -1;
+       }
+       if (timestamp != 0) {
+               errno = EROFS;
+               return -1;
+       }
+       return SMB_VFS_NEXT_FNTIMES(handle, fsp, ft);
+}
+
 static int ceph_snap_gmt_readlinkat(vfs_handle_struct *handle,
                                const struct files_struct *dirfsp,
                                const struct smb_filename *csmb_fname,
@@ -1465,6 +1488,7 @@ static struct vfs_fn_pointers ceph_snap_fns = {
        .fchmod_fn = ceph_snap_gmt_fchmod,
        .chdir_fn = ceph_snap_gmt_chdir,
        .ntimes_fn = ceph_snap_gmt_ntimes,
+       .fntimes_fn = ceph_snap_gmt_fntimes,
        .readlinkat_fn = ceph_snap_gmt_readlinkat,
        .mknodat_fn = ceph_snap_gmt_mknodat,
        .realpath_fn = ceph_snap_gmt_realpath,