return result;
}
+static int smb_time_audit_readlinkat(vfs_handle_struct *handle,
+ files_struct *dirfsp,
+ const struct smb_filename *smb_fname,
+ char *buf,
+ size_t bufsiz)
+{
+ int result;
+ struct timespec ts1,ts2;
+ double timediff;
+
+ clock_gettime_mono(&ts1);
+ result = SMB_VFS_NEXT_READLINKAT(handle,
+ dirfsp,
+ smb_fname,
+ buf,
+ bufsiz);
+ clock_gettime_mono(&ts2);
+ timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
+
+ if (timediff > audit_timeout) {
+ smb_time_audit_log_fname("readlinkat", timediff,
+ smb_fname->base_name);
+ }
+
+ return result;
+}
+
static int smb_time_audit_linkat(vfs_handle_struct *handle,
files_struct *srcfsp,
const struct smb_filename *old_smb_fname,
.getlock_fn = smb_time_audit_getlock,
.symlink_fn = smb_time_audit_symlink,
.readlink_fn = smb_time_audit_readlink,
+ .readlinkat_fn = smb_time_audit_readlinkat,
.linkat_fn = smb_time_audit_linkat,
.mknodat_fn = smb_time_audit_mknodat,
.realpath_fn = smb_time_audit_realpath,