s3: VFS: snapper: Implement SMB_VFS_FNTIMES()
authorSamuel Cabrero <scabrero@samba.org>
Tue, 13 Apr 2021 11:39:09 +0000 (13:39 +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_snapper.c

index 7ee769b0d589184ffc291e46358dd23f18341a19..8215ca108930e5a17df5142e22fec1095e552315 100644 (file)
@@ -2240,6 +2240,28 @@ static int snapper_gmt_ntimes(vfs_handle_struct *handle,
        return SMB_VFS_NEXT_NTIMES(handle, smb_fname, ft);
 }
 
+static int snapper_gmt_fntimes(vfs_handle_struct *handle,
+                              files_struct *fsp,
+                              struct smb_file_time *ft)
+{
+       time_t timestamp = 0;
+
+       if (!snapper_gmt_strip_snapshot(talloc_tos(),
+                                       handle,
+                                       fsp->fsp_name,
+                                       &timestamp,
+                                       NULL)) {
+               return -1;
+       }
+
+       if (timestamp != 0) {
+               errno = EROFS;
+               return -1;
+       }
+
+       return SMB_VFS_NEXT_FNTIMES(handle, fsp, ft);
+}
+
 static int snapper_gmt_readlinkat(vfs_handle_struct *handle,
                                const struct files_struct *dirfsp,
                                const struct smb_filename *smb_fname,
@@ -2732,6 +2754,7 @@ static struct vfs_fn_pointers snapper_fns = {
        .fchmod_fn = snapper_gmt_fchmod,
        .chdir_fn = snapper_gmt_chdir,
        .ntimes_fn = snapper_gmt_ntimes,
+       .fntimes_fn = snapper_gmt_fntimes,
        .readlinkat_fn = snapper_gmt_readlinkat,
        .mknodat_fn = snapper_gmt_mknodat,
        .realpath_fn = snapper_gmt_realpath,