2 * Time auditing VFS module for samba. Log time taken for VFS call to syslog
5 * Copyright (C) Abhidnya Chirmule <achirmul@in.ibm.com> 2009
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22 * This module implements logging for time taken for all Samba VFS operations.
24 * vfs objects = time_audit
31 #define DBGC_CLASS DBGC_VFS
33 static double audit_timeout;
35 static void smb_time_audit_log(const char *syscallname, double elapsed)
37 DEBUG(0, ("WARNING: System call \"%s\" took unexpectedly long "
38 "(%.2f seconds) -- Validate that file and storage "
39 "subsystems are operating normally\n", syscallname,
43 static int smb_time_audit_connect(vfs_handle_struct *handle,
44 const char *svc, const char *user)
55 result = SMB_VFS_NEXT_CONNECT(handle, svc, user);
56 timediff = timeval_elapsed(&tv);
57 if (timediff > audit_timeout) {
58 smb_time_audit_log("connect", timediff);
63 static void smb_time_audit_disconnect(vfs_handle_struct *handle)
69 SMB_VFS_NEXT_DISCONNECT(handle);
70 timediff = timeval_elapsed(&tv);
72 if (timediff > audit_timeout) {
73 smb_time_audit_log("disconnect", timediff);
79 static uint64_t smb_time_audit_disk_free(vfs_handle_struct *handle,
81 bool small_query, uint64_t *bsize,
82 uint64_t *dfree, uint64_t *dsize)
89 result = SMB_VFS_NEXT_DISK_FREE(handle, path, small_query, bsize,
91 timediff = timeval_elapsed(&tv);
93 /* Don't have a reasonable notion of failure here */
94 if (timediff > audit_timeout) {
95 smb_time_audit_log("disk_free", timediff);
101 static int smb_time_audit_get_quota(struct vfs_handle_struct *handle,
102 enum SMB_QUOTA_TYPE qtype, unid_t id,
110 result = SMB_VFS_NEXT_GET_QUOTA(handle, qtype, id, qt);
111 timediff = timeval_elapsed(&tv);
113 if (timediff > audit_timeout) {
114 smb_time_audit_log("get_quota", timediff);
119 static int smb_time_audit_set_quota(struct vfs_handle_struct *handle,
120 enum SMB_QUOTA_TYPE qtype, unid_t id,
128 result = SMB_VFS_NEXT_SET_QUOTA(handle, qtype, id, qt);
129 timediff = timeval_elapsed(&tv);
131 if (timediff > audit_timeout) {
132 smb_time_audit_log("set_quota", timediff);
138 static int smb_time_audit_get_shadow_copy_data(struct vfs_handle_struct *handle,
139 struct files_struct *fsp,
140 SHADOW_COPY_DATA *shadow_copy_data,
148 result = SMB_VFS_NEXT_GET_SHADOW_COPY_DATA(handle, fsp,
149 shadow_copy_data, labels);
150 timediff = timeval_elapsed(&tv);
152 if (timediff > audit_timeout) {
153 smb_time_audit_log("get_shadow_copy_data", timediff);
159 static int smb_time_audit_statvfs(struct vfs_handle_struct *handle,
161 struct vfs_statvfs_struct *statbuf)
168 result = SMB_VFS_NEXT_STATVFS(handle, path, statbuf);
169 timediff = timeval_elapsed(&tv);
171 if (timediff > audit_timeout) {
172 smb_time_audit_log("statvfs", timediff);
178 static int smb_time_audit_fs_capabilities(struct vfs_handle_struct *handle)
185 result = SMB_VFS_NEXT_FS_CAPABILITIES(handle);
186 timediff = timeval_elapsed(&tv);
188 if (timediff > audit_timeout) {
189 smb_time_audit_log("fs_capabilities", timediff);
195 static SMB_STRUCT_DIR *smb_time_audit_opendir(vfs_handle_struct *handle,
197 const char *mask, uint32 attr)
199 SMB_STRUCT_DIR *result;
204 result = SMB_VFS_NEXT_OPENDIR(handle, fname, mask, attr);
205 timediff = timeval_elapsed(&tv);
207 if (timediff > audit_timeout) {
208 smb_time_audit_log("opendir", timediff);
214 static SMB_STRUCT_DIRENT *smb_time_audit_readdir(vfs_handle_struct *handle,
215 SMB_STRUCT_DIR *dirp,
216 SMB_STRUCT_STAT *sbuf)
218 SMB_STRUCT_DIRENT *result;
223 result = SMB_VFS_NEXT_READDIR(handle, dirp, sbuf);
224 timediff = timeval_elapsed(&tv);
226 if (timediff > audit_timeout) {
227 smb_time_audit_log("readdir", timediff);
233 static void smb_time_audit_seekdir(vfs_handle_struct *handle,
234 SMB_STRUCT_DIR *dirp, long offset)
240 SMB_VFS_NEXT_SEEKDIR(handle, dirp, offset);
241 timediff = timeval_elapsed(&tv);
243 if (timediff > audit_timeout) {
244 smb_time_audit_log("seekdir", timediff);
250 static long smb_time_audit_telldir(vfs_handle_struct *handle,
251 SMB_STRUCT_DIR *dirp)
258 result = SMB_VFS_NEXT_TELLDIR(handle, dirp);
259 timediff = timeval_elapsed(&tv);
261 if (timediff > audit_timeout) {
262 smb_time_audit_log("telldir", timediff);
268 static void smb_time_audit_rewinddir(vfs_handle_struct *handle,
269 SMB_STRUCT_DIR *dirp)
275 SMB_VFS_NEXT_REWINDDIR(handle, dirp);
276 timediff = timeval_elapsed(&tv);
278 if (timediff > audit_timeout) {
279 smb_time_audit_log("rewinddir", timediff);
285 static int smb_time_audit_mkdir(vfs_handle_struct *handle,
286 const char *path, mode_t mode)
293 result = SMB_VFS_NEXT_MKDIR(handle, path, mode);
294 timediff = timeval_elapsed(&tv);
296 if (timediff > audit_timeout) {
297 smb_time_audit_log("mkdir", timediff);
303 static int smb_time_audit_rmdir(vfs_handle_struct *handle,
311 result = SMB_VFS_NEXT_RMDIR(handle, path);
312 timediff = timeval_elapsed(&tv);
314 if (timediff > audit_timeout) {
315 smb_time_audit_log("rmdir", timediff);
321 static int smb_time_audit_closedir(vfs_handle_struct *handle,
322 SMB_STRUCT_DIR *dirp)
329 result = SMB_VFS_NEXT_CLOSEDIR(handle, dirp);
330 timediff = timeval_elapsed(&tv);
332 if (timediff > audit_timeout) {
333 smb_time_audit_log("closedir", timediff);
339 static void smb_time_audit_init_search_op(vfs_handle_struct *handle,
340 SMB_STRUCT_DIR *dirp)
346 SMB_VFS_NEXT_INIT_SEARCH_OP(handle, dirp);
347 timediff = timeval_elapsed(&tv);
349 if (timediff > audit_timeout) {
350 smb_time_audit_log("init_search_op", timediff);
355 static int smb_time_audit_open(vfs_handle_struct *handle,
356 const char *fname, files_struct *fsp,
357 int flags, mode_t mode)
364 result = SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
365 timediff = timeval_elapsed(&tv);
367 if (timediff > audit_timeout) {
368 smb_time_audit_log("open", timediff);
374 static NTSTATUS smb_time_audit_create_file(vfs_handle_struct *handle,
375 struct smb_request *req,
376 uint16_t root_dir_fid,
378 uint32_t create_file_flags,
379 uint32_t access_mask,
380 uint32_t share_access,
381 uint32_t create_disposition,
382 uint32_t create_options,
383 uint32_t file_attributes,
384 uint32_t oplock_request,
385 uint64_t allocation_size,
386 struct security_descriptor *sd,
387 struct ea_list *ea_list,
388 files_struct **result_fsp,
390 SMB_STRUCT_STAT *psbuf)
397 result = SMB_VFS_NEXT_CREATE_FILE(
400 root_dir_fid, /* root_dir_fid */
402 create_file_flags, /* create_file_flags */
403 access_mask, /* access_mask */
404 share_access, /* share_access */
405 create_disposition, /* create_disposition*/
406 create_options, /* create_options */
407 file_attributes, /* file_attributes */
408 oplock_request, /* oplock_request */
409 allocation_size, /* allocation_size */
411 ea_list, /* ea_list */
412 result_fsp, /* result */
415 timediff = timeval_elapsed(&tv);
417 if (timediff > audit_timeout) {
418 smb_time_audit_log("create_file", timediff);
424 static int smb_time_audit_close(vfs_handle_struct *handle, files_struct *fsp)
431 result = SMB_VFS_NEXT_CLOSE(handle, fsp);
432 timediff = timeval_elapsed(&tv);
434 if (timediff > audit_timeout) {
435 smb_time_audit_log("close", timediff);
441 static ssize_t smb_time_audit_read(vfs_handle_struct *handle,
442 files_struct *fsp, void *data, size_t n)
449 result = SMB_VFS_NEXT_READ(handle, fsp, data, n);
450 timediff = timeval_elapsed(&tv);
452 if (timediff > audit_timeout) {
453 smb_time_audit_log("read", timediff);
459 static ssize_t smb_time_audit_pread(vfs_handle_struct *handle,
461 void *data, size_t n, SMB_OFF_T offset)
468 result = SMB_VFS_NEXT_PREAD(handle, fsp, data, n, offset);
469 timediff = timeval_elapsed(&tv);
471 if (timediff > audit_timeout) {
472 smb_time_audit_log("pread", timediff);
478 static ssize_t smb_time_audit_write(vfs_handle_struct *handle,
480 const void *data, size_t n)
487 result = SMB_VFS_NEXT_WRITE(handle, fsp, data, n);
488 timediff = timeval_elapsed(&tv);
490 if (timediff > audit_timeout) {
491 smb_time_audit_log("write", timediff);
497 static ssize_t smb_time_audit_pwrite(vfs_handle_struct *handle,
499 const void *data, size_t n,
507 result = SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
508 timediff = timeval_elapsed(&tv);
510 if (timediff > audit_timeout) {
511 smb_time_audit_log("pwrite", timediff);
517 static SMB_OFF_T smb_time_audit_lseek(vfs_handle_struct *handle,
519 SMB_OFF_T offset, int whence)
526 result = SMB_VFS_NEXT_LSEEK(handle, fsp, offset, whence);
527 timediff = timeval_elapsed(&tv);
529 if (timediff > audit_timeout) {
530 smb_time_audit_log("lseek", timediff);
536 static ssize_t smb_time_audit_sendfile(vfs_handle_struct *handle, int tofd,
537 files_struct *fromfsp,
538 const DATA_BLOB *hdr, SMB_OFF_T offset,
546 result = SMB_VFS_NEXT_SENDFILE(handle, tofd, fromfsp, hdr, offset, n);
547 timediff = timeval_elapsed(&tv);
549 if (timediff > audit_timeout) {
550 smb_time_audit_log("sendfile", timediff);
556 static ssize_t smb_time_audit_recvfile(vfs_handle_struct *handle, int fromfd,
566 result = SMB_VFS_NEXT_RECVFILE(handle, fromfd, tofsp, offset, n);
567 timediff = timeval_elapsed(&tv);
569 if (timediff > audit_timeout) {
570 smb_time_audit_log("recvfile", timediff);
576 static int smb_time_audit_rename(vfs_handle_struct *handle,
577 const char *oldname, const char *newname)
584 result = SMB_VFS_NEXT_RENAME(handle, oldname, newname);
585 timediff = timeval_elapsed(&tv);
587 if (timediff > audit_timeout) {
588 smb_time_audit_log("rename", timediff);
594 static int smb_time_audit_fsync(vfs_handle_struct *handle, files_struct *fsp)
601 result = SMB_VFS_NEXT_FSYNC(handle, fsp);
602 timediff = timeval_elapsed(&tv);
604 if (timediff > audit_timeout) {
605 smb_time_audit_log("fsync", timediff);
611 static int smb_time_audit_stat(vfs_handle_struct *handle,
612 const char *fname, SMB_STRUCT_STAT *sbuf)
619 result = SMB_VFS_NEXT_STAT(handle, fname, sbuf);
620 timediff = timeval_elapsed(&tv);
622 if (timediff > audit_timeout) {
623 smb_time_audit_log("stat", timediff);
629 static int smb_time_audit_fstat(vfs_handle_struct *handle, files_struct *fsp,
630 SMB_STRUCT_STAT *sbuf)
637 result = SMB_VFS_NEXT_FSTAT(handle, fsp, sbuf);
638 timediff = timeval_elapsed(&tv);
640 if (timediff > audit_timeout) {
641 smb_time_audit_log("fstat", timediff);
647 static int smb_time_audit_lstat(vfs_handle_struct *handle,
648 const char *path, SMB_STRUCT_STAT *sbuf)
655 result = SMB_VFS_NEXT_LSTAT(handle, path, sbuf);
656 timediff = timeval_elapsed(&tv);
658 if (timediff > audit_timeout) {
659 smb_time_audit_log("lstat", timediff);
665 static int smb_time_audit_get_alloc_size(vfs_handle_struct *handle,
667 const SMB_STRUCT_STAT *sbuf)
674 result = SMB_VFS_NEXT_GET_ALLOC_SIZE(handle, fsp, sbuf);
675 timediff = timeval_elapsed(&tv);
677 if (timediff > audit_timeout) {
678 smb_time_audit_log("get_alloc_size", timediff);
684 static int smb_time_audit_unlink(vfs_handle_struct *handle,
692 result = SMB_VFS_NEXT_UNLINK(handle, path);
693 timediff = timeval_elapsed(&tv);
695 if (timediff > audit_timeout) {
696 smb_time_audit_log("unlink", timediff);
702 static int smb_time_audit_chmod(vfs_handle_struct *handle,
703 const char *path, mode_t mode)
710 result = SMB_VFS_NEXT_CHMOD(handle, path, mode);
711 timediff = timeval_elapsed(&tv);
713 if (timediff > audit_timeout) {
714 smb_time_audit_log("chmod", timediff);
720 static int smb_time_audit_fchmod(vfs_handle_struct *handle, files_struct *fsp,
728 result = SMB_VFS_NEXT_FCHMOD(handle, fsp, mode);
729 timediff = timeval_elapsed(&tv);
731 if (timediff > audit_timeout) {
732 smb_time_audit_log("fchmod", timediff);
738 static int smb_time_audit_chown(vfs_handle_struct *handle,
739 const char *path, uid_t uid, gid_t gid)
746 result = SMB_VFS_NEXT_CHOWN(handle, path, uid, gid);
747 timediff = timeval_elapsed(&tv);
749 if (timediff > audit_timeout) {
750 smb_time_audit_log("chown", timediff);
756 static int smb_time_audit_fchown(vfs_handle_struct *handle, files_struct *fsp,
757 uid_t uid, gid_t gid)
764 result = SMB_VFS_NEXT_FCHOWN(handle, fsp, uid, gid);
765 timediff = timeval_elapsed(&tv);
767 if (timediff > audit_timeout) {
768 smb_time_audit_log("fchown", timediff);
774 static int smb_time_audit_lchown(vfs_handle_struct *handle,
775 const char *path, uid_t uid, gid_t gid)
782 result = SMB_VFS_NEXT_LCHOWN(handle, path, uid, gid);
783 timediff = timeval_elapsed(&tv);
785 if (timediff > audit_timeout) {
786 smb_time_audit_log("lchown", timediff);
792 static int smb_time_audit_chdir(vfs_handle_struct *handle, const char *path)
799 result = SMB_VFS_NEXT_CHDIR(handle, path);
800 timediff = timeval_elapsed(&tv);
802 if (timediff > audit_timeout) {
803 smb_time_audit_log("chdir", timediff);
809 static char *smb_time_audit_getwd(vfs_handle_struct *handle, char *path)
816 result = SMB_VFS_NEXT_GETWD(handle, path);
817 timediff = timeval_elapsed(&tv);
819 if (timediff > audit_timeout) {
820 smb_time_audit_log("getwd", timediff);
826 static int smb_time_audit_ntimes(vfs_handle_struct *handle,
827 const char *path, struct smb_file_time *ft)
834 result = SMB_VFS_NEXT_NTIMES(handle, path, ft);
835 timediff = timeval_elapsed(&tv);
837 if (timediff > audit_timeout) {
838 smb_time_audit_log("ntimes", timediff);
844 static int smb_time_audit_ftruncate(vfs_handle_struct *handle,
853 result = SMB_VFS_NEXT_FTRUNCATE(handle, fsp, len);
854 timediff = timeval_elapsed(&tv);
856 if (timediff > audit_timeout) {
857 smb_time_audit_log("ftruncate", timediff);
863 static bool smb_time_audit_lock(vfs_handle_struct *handle, files_struct *fsp,
864 int op, SMB_OFF_T offset, SMB_OFF_T count,
872 result = SMB_VFS_NEXT_LOCK(handle, fsp, op, offset, count, type);
873 timediff = timeval_elapsed(&tv);
875 if (timediff > audit_timeout) {
876 smb_time_audit_log("lock", timediff);
882 static int smb_time_audit_kernel_flock(struct vfs_handle_struct *handle,
883 struct files_struct *fsp,
884 uint32 share_mode, uint32 access_mask)
891 result = SMB_VFS_NEXT_KERNEL_FLOCK(handle, fsp, share_mode,
893 timediff = timeval_elapsed(&tv);
895 if (timediff > audit_timeout) {
896 smb_time_audit_log("kernel_flock", timediff);
902 static int smb_time_audit_linux_setlease(vfs_handle_struct *handle,
911 result = SMB_VFS_NEXT_LINUX_SETLEASE(handle, fsp, leasetype);
912 timediff = timeval_elapsed(&tv);
914 if (timediff > audit_timeout) {
915 smb_time_audit_log("linux_setlease", timediff);
921 static bool smb_time_audit_getlock(vfs_handle_struct *handle,
923 SMB_OFF_T *poffset, SMB_OFF_T *pcount,
924 int *ptype, pid_t *ppid)
931 result = SMB_VFS_NEXT_GETLOCK(handle, fsp, poffset, pcount, ptype,
933 timediff = timeval_elapsed(&tv);
935 if (timediff > audit_timeout) {
936 smb_time_audit_log("getlock", timediff);
942 static int smb_time_audit_symlink(vfs_handle_struct *handle,
943 const char *oldpath, const char *newpath)
950 result = SMB_VFS_NEXT_SYMLINK(handle, oldpath, newpath);
951 timediff = timeval_elapsed(&tv);
953 if (timediff > audit_timeout) {
954 smb_time_audit_log("symlink", timediff);
960 static int smb_time_audit_readlink(vfs_handle_struct *handle,
961 const char *path, char *buf, size_t bufsiz)
968 result = SMB_VFS_NEXT_READLINK(handle, path, buf, bufsiz);
969 timediff = timeval_elapsed(&tv);
971 if (timediff > audit_timeout) {
972 smb_time_audit_log("readlink", timediff);
978 static int smb_time_audit_link(vfs_handle_struct *handle,
979 const char *oldpath, const char *newpath)
986 result = SMB_VFS_NEXT_LINK(handle, oldpath, newpath);
987 timediff = timeval_elapsed(&tv);
989 if (timediff > audit_timeout) {
990 smb_time_audit_log("link", timediff);
996 static int smb_time_audit_mknod(vfs_handle_struct *handle,
997 const char *pathname, mode_t mode,
1005 result = SMB_VFS_NEXT_MKNOD(handle, pathname, mode, dev);
1006 timediff = timeval_elapsed(&tv);
1008 if (timediff > audit_timeout) {
1009 smb_time_audit_log("mknod", timediff);
1015 static char *smb_time_audit_realpath(vfs_handle_struct *handle,
1016 const char *path, char *resolved_path)
1023 result = SMB_VFS_NEXT_REALPATH(handle, path, resolved_path);
1024 timediff = timeval_elapsed(&tv);
1026 if (timediff > audit_timeout) {
1027 smb_time_audit_log("realpath", timediff);
1033 static NTSTATUS smb_time_audit_notify_watch(struct vfs_handle_struct *handle,
1034 struct sys_notify_context *ctx,
1035 struct notify_entry *e,
1036 void (*callback)(struct sys_notify_context *ctx,
1038 struct notify_event *ev),
1039 void *private_data, void *handle_p)
1046 result = SMB_VFS_NEXT_NOTIFY_WATCH(handle, ctx, e, callback,
1047 private_data, handle_p);
1048 timediff = timeval_elapsed(&tv);
1050 if (timediff > audit_timeout) {
1051 smb_time_audit_log("notify_watch", timediff);
1057 static int smb_time_audit_chflags(vfs_handle_struct *handle,
1058 const char *path, unsigned int flags)
1065 result = SMB_VFS_NEXT_CHFLAGS(handle, path, flags);
1066 timediff = timeval_elapsed(&tv);
1068 if (timediff > audit_timeout) {
1069 smb_time_audit_log("chflags", timediff);
1075 static struct file_id smb_time_audit_file_id_create(struct vfs_handle_struct *handle,
1076 const SMB_STRUCT_STAT *sbuf)
1078 struct file_id id_zero;
1079 struct file_id result;
1083 ZERO_STRUCT(id_zero);
1086 result = SMB_VFS_NEXT_FILE_ID_CREATE(handle, sbuf);
1087 timediff = timeval_elapsed(&tv);
1089 if (timediff > audit_timeout) {
1090 smb_time_audit_log("file_id_create", timediff);
1096 static NTSTATUS smb_time_audit_streaminfo(vfs_handle_struct *handle,
1097 struct files_struct *fsp,
1099 TALLOC_CTX *mem_ctx,
1100 unsigned int *pnum_streams,
1101 struct stream_struct **pstreams)
1108 result = SMB_VFS_NEXT_STREAMINFO(handle, fsp, fname, mem_ctx,
1109 pnum_streams, pstreams);
1110 timediff = timeval_elapsed(&tv);
1112 if (timediff > audit_timeout) {
1113 smb_time_audit_log("streaminfo", timediff);
1119 static int smb_time_audit_get_real_filename(struct vfs_handle_struct *handle,
1122 TALLOC_CTX *mem_ctx,
1130 result = SMB_VFS_NEXT_GET_REAL_FILENAME(handle, path, name, mem_ctx,
1132 timediff = timeval_elapsed(&tv);
1134 if (timediff > audit_timeout) {
1135 smb_time_audit_log("get_real_filename", timediff);
1141 static const char *smb_time_audit_connectpath(vfs_handle_struct *handle,
1149 result = SMB_VFS_NEXT_CONNECTPATH(handle, fname);
1150 timediff = timeval_elapsed(&tv);
1152 if (timediff > audit_timeout) {
1153 smb_time_audit_log("connectpath", timediff);
1159 static NTSTATUS smb_time_audit_brl_lock_windows(struct vfs_handle_struct *handle,
1160 struct byte_range_lock *br_lck,
1161 struct lock_struct *plock,
1163 struct blocking_lock_record *blr)
1170 result = SMB_VFS_NEXT_BRL_LOCK_WINDOWS(handle, br_lck, plock,
1171 blocking_lock, blr);
1172 timediff = timeval_elapsed(&tv);
1174 if (timediff > audit_timeout) {
1175 smb_time_audit_log("brl_lock_windows", timediff);
1181 static bool smb_time_audit_brl_unlock_windows(struct vfs_handle_struct *handle,
1182 struct messaging_context *msg_ctx,
1183 struct byte_range_lock *br_lck,
1184 const struct lock_struct *plock)
1191 result = SMB_VFS_NEXT_BRL_UNLOCK_WINDOWS(handle, msg_ctx, br_lck,
1193 timediff = timeval_elapsed(&tv);
1195 if (timediff > audit_timeout) {
1196 smb_time_audit_log("brl_unlock_windows", timediff);
1202 static bool smb_time_audit_brl_cancel_windows(struct vfs_handle_struct *handle,
1203 struct byte_range_lock *br_lck,
1204 struct lock_struct *plock,
1205 struct blocking_lock_record *blr)
1212 result = SMB_VFS_NEXT_BRL_CANCEL_WINDOWS(handle, br_lck, plock, blr);
1213 timediff = timeval_elapsed(&tv);
1215 if (timediff > audit_timeout) {
1216 smb_time_audit_log("brl_cancel_windows", timediff);
1222 static bool smb_time_audit_strict_lock(struct vfs_handle_struct *handle,
1223 struct files_struct *fsp,
1224 struct lock_struct *plock)
1231 result = SMB_VFS_NEXT_STRICT_LOCK(handle, fsp, plock);
1232 timediff = timeval_elapsed(&tv);
1234 if (timediff > audit_timeout) {
1235 smb_time_audit_log("strict_lock", timediff);
1241 static void smb_time_audit_strict_unlock(struct vfs_handle_struct *handle,
1242 struct files_struct *fsp,
1243 struct lock_struct *plock)
1249 SMB_VFS_NEXT_STRICT_UNLOCK(handle, fsp, plock);
1250 timediff = timeval_elapsed(&tv);
1252 if (timediff > audit_timeout) {
1253 smb_time_audit_log("strict_unlock", timediff);
1259 static NTSTATUS smb_time_audit_fget_nt_acl(vfs_handle_struct *handle,
1261 uint32 security_info,
1269 result = SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, security_info, ppdesc);
1270 timediff = timeval_elapsed(&tv);
1272 if (timediff > audit_timeout) {
1273 smb_time_audit_log("fget_nt_acl", timediff);
1279 static NTSTATUS smb_time_audit_get_nt_acl(vfs_handle_struct *handle,
1281 uint32 security_info,
1289 result = SMB_VFS_NEXT_GET_NT_ACL(handle, name, security_info, ppdesc);
1290 timediff = timeval_elapsed(&tv);
1292 if (timediff > audit_timeout) {
1293 smb_time_audit_log("get_nt_acl", timediff);
1299 static NTSTATUS smb_time_audit_fset_nt_acl(vfs_handle_struct *handle,
1301 uint32 security_info_sent,
1302 const SEC_DESC *psd)
1309 result = SMB_VFS_NEXT_FSET_NT_ACL(handle, fsp, security_info_sent,
1311 timediff = timeval_elapsed(&tv);
1313 if (timediff > audit_timeout) {
1314 smb_time_audit_log("fset_nt_acl", timediff);
1320 static int smb_time_audit_chmod_acl(vfs_handle_struct *handle,
1321 const char *path, mode_t mode)
1328 result = SMB_VFS_NEXT_CHMOD_ACL(handle, path, mode);
1329 timediff = timeval_elapsed(&tv);
1331 if (timediff > audit_timeout) {
1332 smb_time_audit_log("chmod_acl", timediff);
1338 static int smb_time_audit_fchmod_acl(vfs_handle_struct *handle,
1339 files_struct *fsp, mode_t mode)
1346 result = SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, mode);
1347 timediff = timeval_elapsed(&tv);
1349 if (timediff > audit_timeout) {
1350 smb_time_audit_log("fchmod_acl", timediff);
1356 static int smb_time_audit_sys_acl_get_entry(vfs_handle_struct *handle,
1357 SMB_ACL_T theacl, int entry_id,
1358 SMB_ACL_ENTRY_T *entry_p)
1365 result = SMB_VFS_NEXT_SYS_ACL_GET_ENTRY(handle, theacl, entry_id,
1367 timediff = timeval_elapsed(&tv);
1369 if (timediff > audit_timeout) {
1370 smb_time_audit_log("sys_acl_get_entry", timediff);
1376 static int smb_time_audit_sys_acl_get_tag_type(vfs_handle_struct *handle,
1377 SMB_ACL_ENTRY_T entry_d,
1378 SMB_ACL_TAG_T *tag_type_p)
1385 result = SMB_VFS_NEXT_SYS_ACL_GET_TAG_TYPE(handle, entry_d,
1387 timediff = timeval_elapsed(&tv);
1389 if (timediff > audit_timeout) {
1390 smb_time_audit_log("sys_acl_get_tag_type", timediff);
1396 static int smb_time_audit_sys_acl_get_permset(vfs_handle_struct *handle,
1397 SMB_ACL_ENTRY_T entry_d,
1398 SMB_ACL_PERMSET_T *permset_p)
1405 result = SMB_VFS_NEXT_SYS_ACL_GET_PERMSET(handle, entry_d,
1407 timediff = timeval_elapsed(&tv);
1409 if (timediff > audit_timeout) {
1410 smb_time_audit_log("sys_acl_get_permset", timediff);
1416 static void * smb_time_audit_sys_acl_get_qualifier(vfs_handle_struct *handle,
1417 SMB_ACL_ENTRY_T entry_d)
1424 result = SMB_VFS_NEXT_SYS_ACL_GET_QUALIFIER(handle, entry_d);
1425 timediff = timeval_elapsed(&tv);
1427 if (timediff > audit_timeout) {
1428 smb_time_audit_log("sys_acl_get_qualifier", timediff);
1434 static SMB_ACL_T smb_time_audit_sys_acl_get_file(vfs_handle_struct *handle,
1436 SMB_ACL_TYPE_T type)
1443 result = SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle, path_p, type);
1444 timediff = timeval_elapsed(&tv);
1446 if (timediff > audit_timeout) {
1447 smb_time_audit_log("sys_acl_get_file", timediff);
1453 static SMB_ACL_T smb_time_audit_sys_acl_get_fd(vfs_handle_struct *handle,
1461 result = SMB_VFS_NEXT_SYS_ACL_GET_FD(handle, fsp);
1462 timediff = timeval_elapsed(&tv);
1464 if (timediff > audit_timeout) {
1465 smb_time_audit_log("sys_acl_get_fd", timediff);
1471 static int smb_time_audit_sys_acl_clear_perms(vfs_handle_struct *handle,
1472 SMB_ACL_PERMSET_T permset)
1479 result = SMB_VFS_NEXT_SYS_ACL_CLEAR_PERMS(handle, permset);
1480 timediff = timeval_elapsed(&tv);
1482 if (timediff > audit_timeout) {
1483 smb_time_audit_log("sys_acl_clear_perms", timediff);
1489 static int smb_time_audit_sys_acl_add_perm(vfs_handle_struct *handle,
1490 SMB_ACL_PERMSET_T permset,
1491 SMB_ACL_PERM_T perm)
1498 result = SMB_VFS_NEXT_SYS_ACL_ADD_PERM(handle, permset, perm);
1499 timediff = timeval_elapsed(&tv);
1501 if (timediff > audit_timeout) {
1502 smb_time_audit_log("sys_acl_add_perm", timediff);
1508 static char * smb_time_audit_sys_acl_to_text(vfs_handle_struct *handle,
1517 result = SMB_VFS_NEXT_SYS_ACL_TO_TEXT(handle, theacl, plen);
1518 timediff = timeval_elapsed(&tv);
1520 if (timediff > audit_timeout) {
1521 smb_time_audit_log("sys_acl_to_text", timediff);
1527 static SMB_ACL_T smb_time_audit_sys_acl_init(vfs_handle_struct *handle,
1535 result = SMB_VFS_NEXT_SYS_ACL_INIT(handle, count);
1536 timediff = timeval_elapsed(&tv);
1538 if (timediff > audit_timeout) {
1539 smb_time_audit_log("sys_acl_init", timediff);
1545 static int smb_time_audit_sys_acl_create_entry(vfs_handle_struct *handle,
1547 SMB_ACL_ENTRY_T *pentry)
1554 result = SMB_VFS_NEXT_SYS_ACL_CREATE_ENTRY(handle, pacl, pentry);
1555 timediff = timeval_elapsed(&tv);
1557 if (timediff > audit_timeout) {
1558 smb_time_audit_log("sys_acl_create_entry", timediff);
1564 static int smb_time_audit_sys_acl_set_tag_type(vfs_handle_struct *handle,
1565 SMB_ACL_ENTRY_T entry,
1566 SMB_ACL_TAG_T tagtype)
1573 result = SMB_VFS_NEXT_SYS_ACL_SET_TAG_TYPE(handle, entry,
1575 timediff = timeval_elapsed(&tv);
1577 if (timediff > audit_timeout) {
1578 smb_time_audit_log("sys_acl_set_tag_type", timediff);
1584 static int smb_time_audit_sys_acl_set_qualifier(vfs_handle_struct *handle,
1585 SMB_ACL_ENTRY_T entry,
1593 result = SMB_VFS_NEXT_SYS_ACL_SET_QUALIFIER(handle, entry, qual);
1594 timediff = timeval_elapsed(&tv);
1596 if (timediff > audit_timeout) {
1597 smb_time_audit_log("sys_acl_set_qualifier", timediff);
1603 static int smb_time_audit_sys_acl_set_permset(vfs_handle_struct *handle,
1604 SMB_ACL_ENTRY_T entry,
1605 SMB_ACL_PERMSET_T permset)
1612 result = SMB_VFS_NEXT_SYS_ACL_SET_PERMSET(handle, entry, permset);
1613 timediff = timeval_elapsed(&tv);
1615 if (timediff > audit_timeout) {
1616 smb_time_audit_log("sys_acl_set_permset", timediff);
1622 static int smb_time_audit_sys_acl_valid(vfs_handle_struct *handle,
1630 result = SMB_VFS_NEXT_SYS_ACL_VALID(handle, theacl);
1631 timediff = timeval_elapsed(&tv);
1633 if (timediff > audit_timeout) {
1634 smb_time_audit_log("sys_acl_valid", timediff);
1640 static int smb_time_audit_sys_acl_set_file(vfs_handle_struct *handle,
1642 SMB_ACL_TYPE_T acltype,
1650 result = SMB_VFS_NEXT_SYS_ACL_SET_FILE(handle, name, acltype,
1652 timediff = timeval_elapsed(&tv);
1654 if (timediff > audit_timeout) {
1655 smb_time_audit_log("sys_acl_set_file", timediff);
1661 static int smb_time_audit_sys_acl_set_fd(vfs_handle_struct *handle,
1670 result = SMB_VFS_NEXT_SYS_ACL_SET_FD(handle, fsp, theacl);
1671 timediff = timeval_elapsed(&tv);
1673 if (timediff > audit_timeout) {
1674 smb_time_audit_log("sys_acl_set_fd", timediff);
1680 static int smb_time_audit_sys_acl_delete_def_file(vfs_handle_struct *handle,
1688 result = SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FILE(handle, path);
1689 timediff = timeval_elapsed(&tv);
1691 if (timediff > audit_timeout) {
1692 smb_time_audit_log("sys_acl_delete_def_file", timediff);
1698 static int smb_time_audit_sys_acl_get_perm(vfs_handle_struct *handle,
1699 SMB_ACL_PERMSET_T permset,
1700 SMB_ACL_PERM_T perm)
1707 result = SMB_VFS_NEXT_SYS_ACL_GET_PERM(handle, permset, perm);
1708 timediff = timeval_elapsed(&tv);
1710 if (timediff > audit_timeout) {
1711 smb_time_audit_log("sys_acl_get_perm", timediff);
1717 static int smb_time_audit_sys_acl_free_text(vfs_handle_struct *handle,
1725 result = SMB_VFS_NEXT_SYS_ACL_FREE_TEXT(handle, text);
1726 timediff = timeval_elapsed(&tv);
1728 if (timediff > audit_timeout) {
1729 smb_time_audit_log("sys_acl_free_text", timediff);
1735 static int smb_time_audit_sys_acl_free_acl(vfs_handle_struct *handle,
1736 SMB_ACL_T posix_acl)
1743 result = SMB_VFS_NEXT_SYS_ACL_FREE_ACL(handle, posix_acl);
1744 timediff = timeval_elapsed(&tv);
1746 if (timediff > audit_timeout) {
1747 smb_time_audit_log("sys_acl_free_acl", timediff);
1753 static int smb_time_audit_sys_acl_free_qualifier(vfs_handle_struct *handle,
1755 SMB_ACL_TAG_T tagtype)
1762 result = SMB_VFS_NEXT_SYS_ACL_FREE_QUALIFIER(handle, qualifier,
1764 timediff = timeval_elapsed(&tv);
1766 if (timediff > audit_timeout) {
1767 smb_time_audit_log("sys_acl_free_qualifier", timediff);
1773 static ssize_t smb_time_audit_getxattr(struct vfs_handle_struct *handle,
1774 const char *path, const char *name,
1775 void *value, size_t size)
1782 result = SMB_VFS_NEXT_GETXATTR(handle, path, name, value, size);
1783 timediff = timeval_elapsed(&tv);
1785 if (timediff > audit_timeout) {
1786 smb_time_audit_log("getxattr", timediff);
1792 static ssize_t smb_time_audit_lgetxattr(struct vfs_handle_struct *handle,
1793 const char *path, const char *name,
1794 void *value, size_t size)
1801 result = SMB_VFS_NEXT_LGETXATTR(handle, path, name, value, size);
1802 timediff = timeval_elapsed(&tv);
1804 if (timediff > audit_timeout) {
1805 smb_time_audit_log("lgetxattr", timediff);
1811 static ssize_t smb_time_audit_fgetxattr(struct vfs_handle_struct *handle,
1812 struct files_struct *fsp,
1813 const char *name, void *value,
1821 result = SMB_VFS_NEXT_FGETXATTR(handle, fsp, name, value, size);
1822 timediff = timeval_elapsed(&tv);
1824 if (timediff > audit_timeout) {
1825 smb_time_audit_log("fgetxattr", timediff);
1831 static ssize_t smb_time_audit_listxattr(struct vfs_handle_struct *handle,
1832 const char *path, char *list,
1840 result = SMB_VFS_NEXT_LISTXATTR(handle, path, list, size);
1841 timediff = timeval_elapsed(&tv);
1843 if (timediff > audit_timeout) {
1844 smb_time_audit_log("listxattr", timediff);
1850 static ssize_t smb_time_audit_llistxattr(struct vfs_handle_struct *handle,
1851 const char *path, char *list,
1859 result = SMB_VFS_NEXT_LLISTXATTR(handle, path, list, size);
1860 timediff = timeval_elapsed(&tv);
1862 if (timediff > audit_timeout) {
1863 smb_time_audit_log("llistxattr", timediff);
1869 static ssize_t smb_time_audit_flistxattr(struct vfs_handle_struct *handle,
1870 struct files_struct *fsp, char *list,
1878 result = SMB_VFS_NEXT_FLISTXATTR(handle, fsp, list, size);
1879 timediff = timeval_elapsed(&tv);
1881 if (timediff > audit_timeout) {
1882 smb_time_audit_log("flistxattr", timediff);
1888 static int smb_time_audit_removexattr(struct vfs_handle_struct *handle,
1889 const char *path, const char *name)
1896 result = SMB_VFS_NEXT_REMOVEXATTR(handle, path, name);
1897 timediff = timeval_elapsed(&tv);
1899 if (timediff > audit_timeout) {
1900 smb_time_audit_log("removexattr", timediff);
1906 static int smb_time_audit_lremovexattr(struct vfs_handle_struct *handle,
1907 const char *path, const char *name)
1914 result = SMB_VFS_NEXT_LREMOVEXATTR(handle, path, name);
1915 timediff = timeval_elapsed(&tv);
1917 if (timediff > audit_timeout) {
1918 smb_time_audit_log("lremovexattr", timediff);
1924 static int smb_time_audit_fremovexattr(struct vfs_handle_struct *handle,
1925 struct files_struct *fsp,
1933 result = SMB_VFS_NEXT_FREMOVEXATTR(handle, fsp, name);
1934 timediff = timeval_elapsed(&tv);
1936 if (timediff > audit_timeout) {
1937 smb_time_audit_log("fremovexattr", timediff);
1943 static int smb_time_audit_setxattr(struct vfs_handle_struct *handle,
1944 const char *path, const char *name,
1945 const void *value, size_t size,
1953 result = SMB_VFS_NEXT_SETXATTR(handle, path, name, value, size,
1955 timediff = timeval_elapsed(&tv);
1957 if (timediff > audit_timeout) {
1958 smb_time_audit_log("setxattr", timediff);
1964 static int smb_time_audit_lsetxattr(struct vfs_handle_struct *handle,
1965 const char *path, const char *name,
1966 const void *value, size_t size,
1974 result = SMB_VFS_NEXT_LSETXATTR(handle, path, name, value, size,
1976 timediff = timeval_elapsed(&tv);
1978 if (timediff > audit_timeout) {
1979 smb_time_audit_log("lsetxattr", timediff);
1985 static int smb_time_audit_fsetxattr(struct vfs_handle_struct *handle,
1986 struct files_struct *fsp, const char *name,
1987 const void *value, size_t size, int flags)
1994 result = SMB_VFS_NEXT_FSETXATTR(handle, fsp, name, value, size, flags);
1995 timediff = timeval_elapsed(&tv);
1997 if (timediff > audit_timeout) {
1998 smb_time_audit_log("fsetxattr", timediff);
2004 static int smb_time_audit_aio_read(struct vfs_handle_struct *handle,
2005 struct files_struct *fsp,
2006 SMB_STRUCT_AIOCB *aiocb)
2013 result = SMB_VFS_NEXT_AIO_READ(handle, fsp, aiocb);
2014 timediff = timeval_elapsed(&tv);
2016 if (timediff > audit_timeout) {
2017 smb_time_audit_log("aio_read", timediff);
2023 static int smb_time_audit_aio_write(struct vfs_handle_struct *handle,
2024 struct files_struct *fsp,
2025 SMB_STRUCT_AIOCB *aiocb)
2032 result = SMB_VFS_NEXT_AIO_WRITE(handle, fsp, aiocb);
2033 timediff = timeval_elapsed(&tv);
2035 if (timediff > audit_timeout) {
2036 smb_time_audit_log("aio_write", timediff);
2042 static ssize_t smb_time_audit_aio_return(struct vfs_handle_struct *handle,
2043 struct files_struct *fsp,
2044 SMB_STRUCT_AIOCB *aiocb)
2051 result = SMB_VFS_NEXT_AIO_RETURN(handle, fsp, aiocb);
2052 timediff = timeval_elapsed(&tv);
2054 if (timediff > audit_timeout) {
2055 smb_time_audit_log("aio_return", timediff);
2061 static int smb_time_audit_aio_cancel(struct vfs_handle_struct *handle,
2062 struct files_struct *fsp,
2063 SMB_STRUCT_AIOCB *aiocb)
2070 result = SMB_VFS_NEXT_AIO_CANCEL(handle, fsp, aiocb);
2071 timediff = timeval_elapsed(&tv);
2073 if (timediff > audit_timeout) {
2074 smb_time_audit_log("aio_cancel", timediff);
2080 static int smb_time_audit_aio_error(struct vfs_handle_struct *handle,
2081 struct files_struct *fsp,
2082 SMB_STRUCT_AIOCB *aiocb)
2089 result = SMB_VFS_NEXT_AIO_ERROR(handle, fsp, aiocb);
2090 timediff = timeval_elapsed(&tv);
2092 if (timediff > audit_timeout) {
2093 smb_time_audit_log("aio_error", timediff);
2099 static int smb_time_audit_aio_fsync(struct vfs_handle_struct *handle,
2100 struct files_struct *fsp, int op,
2101 SMB_STRUCT_AIOCB *aiocb)
2108 result = SMB_VFS_NEXT_AIO_FSYNC(handle, fsp, op, aiocb);
2109 timediff = timeval_elapsed(&tv);
2111 if (timediff > audit_timeout) {
2112 smb_time_audit_log("aio_fsync", timediff);
2118 static int smb_time_audit_aio_suspend(struct vfs_handle_struct *handle,
2119 struct files_struct *fsp,
2120 const SMB_STRUCT_AIOCB * const aiocb[],
2121 int n, const struct timespec *ts)
2128 result = SMB_VFS_NEXT_AIO_SUSPEND(handle, fsp, aiocb, n, ts);
2129 timediff = timeval_elapsed(&tv);
2131 if (timediff > audit_timeout) {
2132 smb_time_audit_log("aio_suspend", timediff);
2138 static bool smb_time_audit_aio_force(struct vfs_handle_struct *handle,
2139 struct files_struct *fsp)
2146 result = SMB_VFS_NEXT_AIO_FORCE(handle, fsp);
2147 timediff = timeval_elapsed(&tv);
2149 if (timediff > audit_timeout) {
2150 smb_time_audit_log("aio_force", timediff);
2158 /* VFS operations */
2160 static vfs_op_tuple audit_op_tuples[] = {
2162 /* Disk operations */
2164 {SMB_VFS_OP(smb_time_audit_connect), SMB_VFS_OP_CONNECT,
2165 SMB_VFS_LAYER_LOGGER},
2166 {SMB_VFS_OP(smb_time_audit_disconnect), SMB_VFS_OP_DISCONNECT,
2167 SMB_VFS_LAYER_LOGGER},
2168 {SMB_VFS_OP(smb_time_audit_disk_free), SMB_VFS_OP_DISK_FREE,
2169 SMB_VFS_LAYER_LOGGER},
2170 {SMB_VFS_OP(smb_time_audit_get_quota), SMB_VFS_OP_GET_QUOTA,
2171 SMB_VFS_LAYER_LOGGER},
2172 {SMB_VFS_OP(smb_time_audit_set_quota), SMB_VFS_OP_SET_QUOTA,
2173 SMB_VFS_LAYER_LOGGER},
2174 {SMB_VFS_OP(smb_time_audit_get_shadow_copy_data),
2175 SMB_VFS_OP_GET_SHADOW_COPY_DATA,
2176 SMB_VFS_LAYER_LOGGER},
2177 {SMB_VFS_OP(smb_time_audit_statvfs), SMB_VFS_OP_STATVFS,
2178 SMB_VFS_LAYER_LOGGER},
2179 {SMB_VFS_OP(smb_time_audit_fs_capabilities),
2180 SMB_VFS_OP_FS_CAPABILITIES,
2181 SMB_VFS_LAYER_LOGGER},
2183 /* Directory operations */
2185 {SMB_VFS_OP(smb_time_audit_opendir), SMB_VFS_OP_OPENDIR,
2186 SMB_VFS_LAYER_LOGGER},
2187 {SMB_VFS_OP(smb_time_audit_readdir), SMB_VFS_OP_READDIR,
2188 SMB_VFS_LAYER_LOGGER},
2189 {SMB_VFS_OP(smb_time_audit_seekdir), SMB_VFS_OP_SEEKDIR,
2190 SMB_VFS_LAYER_LOGGER},
2191 {SMB_VFS_OP(smb_time_audit_telldir), SMB_VFS_OP_TELLDIR,
2192 SMB_VFS_LAYER_LOGGER},
2193 {SMB_VFS_OP(smb_time_audit_rewinddir), SMB_VFS_OP_REWINDDIR,
2194 SMB_VFS_LAYER_LOGGER},
2195 {SMB_VFS_OP(smb_time_audit_mkdir), SMB_VFS_OP_MKDIR,
2196 SMB_VFS_LAYER_LOGGER},
2197 {SMB_VFS_OP(smb_time_audit_rmdir), SMB_VFS_OP_RMDIR,
2198 SMB_VFS_LAYER_LOGGER},
2199 {SMB_VFS_OP(smb_time_audit_closedir), SMB_VFS_OP_CLOSEDIR,
2200 SMB_VFS_LAYER_LOGGER},
2201 {SMB_VFS_OP(smb_time_audit_init_search_op), SMB_VFS_OP_INIT_SEARCH_OP,
2202 SMB_VFS_LAYER_LOGGER},
2204 /* File operations */
2206 {SMB_VFS_OP(smb_time_audit_open), SMB_VFS_OP_OPEN,
2207 SMB_VFS_LAYER_LOGGER},
2208 {SMB_VFS_OP(smb_time_audit_create_file),SMB_VFS_OP_CREATE_FILE,
2209 SMB_VFS_LAYER_LOGGER},
2210 {SMB_VFS_OP(smb_time_audit_close), SMB_VFS_OP_CLOSE,
2211 SMB_VFS_LAYER_LOGGER},
2212 {SMB_VFS_OP(smb_time_audit_read), SMB_VFS_OP_READ,
2213 SMB_VFS_LAYER_LOGGER},
2214 {SMB_VFS_OP(smb_time_audit_pread), SMB_VFS_OP_PREAD,
2215 SMB_VFS_LAYER_LOGGER},
2216 {SMB_VFS_OP(smb_time_audit_write), SMB_VFS_OP_WRITE,
2217 SMB_VFS_LAYER_LOGGER},
2218 {SMB_VFS_OP(smb_time_audit_pwrite), SMB_VFS_OP_PWRITE,
2219 SMB_VFS_LAYER_LOGGER},
2220 {SMB_VFS_OP(smb_time_audit_lseek), SMB_VFS_OP_LSEEK,
2221 SMB_VFS_LAYER_LOGGER},
2222 {SMB_VFS_OP(smb_time_audit_sendfile), SMB_VFS_OP_SENDFILE,
2223 SMB_VFS_LAYER_LOGGER},
2224 {SMB_VFS_OP(smb_time_audit_recvfile), SMB_VFS_OP_RECVFILE,
2225 SMB_VFS_LAYER_LOGGER},
2226 {SMB_VFS_OP(smb_time_audit_rename), SMB_VFS_OP_RENAME,
2227 SMB_VFS_LAYER_LOGGER},
2228 {SMB_VFS_OP(smb_time_audit_fsync), SMB_VFS_OP_FSYNC,
2229 SMB_VFS_LAYER_LOGGER},
2230 {SMB_VFS_OP(smb_time_audit_stat), SMB_VFS_OP_STAT,
2231 SMB_VFS_LAYER_LOGGER},
2232 {SMB_VFS_OP(smb_time_audit_fstat), SMB_VFS_OP_FSTAT,
2233 SMB_VFS_LAYER_LOGGER},
2234 {SMB_VFS_OP(smb_time_audit_lstat), SMB_VFS_OP_LSTAT,
2235 SMB_VFS_LAYER_LOGGER},
2236 {SMB_VFS_OP(smb_time_audit_get_alloc_size),
2237 SMB_VFS_OP_GET_ALLOC_SIZE,
2238 SMB_VFS_LAYER_LOGGER},
2239 {SMB_VFS_OP(smb_time_audit_unlink), SMB_VFS_OP_UNLINK,
2240 SMB_VFS_LAYER_LOGGER},
2241 {SMB_VFS_OP(smb_time_audit_chmod), SMB_VFS_OP_CHMOD,
2242 SMB_VFS_LAYER_LOGGER},
2243 {SMB_VFS_OP(smb_time_audit_fchmod), SMB_VFS_OP_FCHMOD,
2244 SMB_VFS_LAYER_LOGGER},
2245 {SMB_VFS_OP(smb_time_audit_chown), SMB_VFS_OP_CHOWN,
2246 SMB_VFS_LAYER_LOGGER},
2247 {SMB_VFS_OP(smb_time_audit_fchown), SMB_VFS_OP_FCHOWN,
2248 SMB_VFS_LAYER_LOGGER},
2249 {SMB_VFS_OP(smb_time_audit_lchown), SMB_VFS_OP_LCHOWN,
2250 SMB_VFS_LAYER_LOGGER},
2251 {SMB_VFS_OP(smb_time_audit_chdir), SMB_VFS_OP_CHDIR,
2252 SMB_VFS_LAYER_LOGGER},
2253 {SMB_VFS_OP(smb_time_audit_getwd), SMB_VFS_OP_GETWD,
2254 SMB_VFS_LAYER_LOGGER},
2255 {SMB_VFS_OP(smb_time_audit_ntimes), SMB_VFS_OP_NTIMES,
2256 SMB_VFS_LAYER_LOGGER},
2257 {SMB_VFS_OP(smb_time_audit_ftruncate), SMB_VFS_OP_FTRUNCATE,
2258 SMB_VFS_LAYER_LOGGER},
2259 {SMB_VFS_OP(smb_time_audit_lock), SMB_VFS_OP_LOCK,
2260 SMB_VFS_LAYER_LOGGER},
2261 {SMB_VFS_OP(smb_time_audit_kernel_flock),
2262 SMB_VFS_OP_KERNEL_FLOCK,
2263 SMB_VFS_LAYER_LOGGER},
2264 {SMB_VFS_OP(smb_time_audit_linux_setlease),
2265 SMB_VFS_OP_LINUX_SETLEASE,
2266 SMB_VFS_LAYER_LOGGER},
2267 {SMB_VFS_OP(smb_time_audit_getlock), SMB_VFS_OP_GETLOCK,
2268 SMB_VFS_LAYER_LOGGER},
2269 {SMB_VFS_OP(smb_time_audit_symlink), SMB_VFS_OP_SYMLINK,
2270 SMB_VFS_LAYER_LOGGER},
2271 {SMB_VFS_OP(smb_time_audit_readlink), SMB_VFS_OP_READLINK,
2272 SMB_VFS_LAYER_LOGGER},
2273 {SMB_VFS_OP(smb_time_audit_link), SMB_VFS_OP_LINK,
2274 SMB_VFS_LAYER_LOGGER},
2275 {SMB_VFS_OP(smb_time_audit_mknod), SMB_VFS_OP_MKNOD,
2276 SMB_VFS_LAYER_LOGGER},
2277 {SMB_VFS_OP(smb_time_audit_realpath), SMB_VFS_OP_REALPATH,
2278 SMB_VFS_LAYER_LOGGER},
2279 {SMB_VFS_OP(smb_time_audit_notify_watch),SMB_VFS_OP_NOTIFY_WATCH,
2280 SMB_VFS_LAYER_LOGGER},
2281 {SMB_VFS_OP(smb_time_audit_chflags), SMB_VFS_OP_CHFLAGS,
2282 SMB_VFS_LAYER_LOGGER},
2283 {SMB_VFS_OP(smb_time_audit_file_id_create),
2284 SMB_VFS_OP_FILE_ID_CREATE,
2285 SMB_VFS_LAYER_LOGGER},
2286 {SMB_VFS_OP(smb_time_audit_streaminfo), SMB_VFS_OP_STREAMINFO,
2287 SMB_VFS_LAYER_LOGGER},
2288 {SMB_VFS_OP(smb_time_audit_get_real_filename),
2289 SMB_VFS_OP_GET_REAL_FILENAME,
2290 SMB_VFS_LAYER_LOGGER},
2291 {SMB_VFS_OP(smb_time_audit_connectpath), SMB_VFS_OP_CONNECTPATH,
2292 SMB_VFS_LAYER_LOGGER},
2293 {SMB_VFS_OP(smb_time_audit_brl_lock_windows),
2294 SMB_VFS_OP_BRL_LOCK_WINDOWS,
2295 SMB_VFS_LAYER_LOGGER},
2296 {SMB_VFS_OP(smb_time_audit_brl_unlock_windows),
2297 SMB_VFS_OP_BRL_UNLOCK_WINDOWS,
2298 SMB_VFS_LAYER_LOGGER},
2299 {SMB_VFS_OP(smb_time_audit_brl_cancel_windows),
2300 SMB_VFS_OP_BRL_CANCEL_WINDOWS,
2301 SMB_VFS_LAYER_LOGGER},
2302 {SMB_VFS_OP(smb_time_audit_strict_lock), SMB_VFS_OP_STRICT_LOCK,
2303 SMB_VFS_LAYER_LOGGER},
2304 {SMB_VFS_OP(smb_time_audit_strict_unlock), SMB_VFS_OP_STRICT_UNLOCK,
2305 SMB_VFS_LAYER_LOGGER},
2307 /* NT ACL operations. */
2309 {SMB_VFS_OP(smb_time_audit_fget_nt_acl), SMB_VFS_OP_FGET_NT_ACL,
2310 SMB_VFS_LAYER_LOGGER},
2311 {SMB_VFS_OP(smb_time_audit_get_nt_acl), SMB_VFS_OP_GET_NT_ACL,
2312 SMB_VFS_LAYER_LOGGER},
2313 {SMB_VFS_OP(smb_time_audit_fset_nt_acl), SMB_VFS_OP_FSET_NT_ACL,
2314 SMB_VFS_LAYER_LOGGER},
2316 /* POSIX ACL operations. */
2318 {SMB_VFS_OP(smb_time_audit_chmod_acl), SMB_VFS_OP_CHMOD_ACL,
2319 SMB_VFS_LAYER_LOGGER},
2320 {SMB_VFS_OP(smb_time_audit_fchmod_acl), SMB_VFS_OP_FCHMOD_ACL,
2321 SMB_VFS_LAYER_LOGGER},
2322 {SMB_VFS_OP(smb_time_audit_sys_acl_get_entry),
2323 SMB_VFS_OP_SYS_ACL_GET_ENTRY,
2324 SMB_VFS_LAYER_LOGGER},
2325 {SMB_VFS_OP(smb_time_audit_sys_acl_get_tag_type),
2326 SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE,
2327 SMB_VFS_LAYER_LOGGER},
2328 {SMB_VFS_OP(smb_time_audit_sys_acl_get_permset),
2329 SMB_VFS_OP_SYS_ACL_GET_PERMSET,
2330 SMB_VFS_LAYER_LOGGER},
2331 {SMB_VFS_OP(smb_time_audit_sys_acl_get_qualifier),
2332 SMB_VFS_OP_SYS_ACL_GET_QUALIFIER,
2333 SMB_VFS_LAYER_LOGGER},
2334 {SMB_VFS_OP(smb_time_audit_sys_acl_get_file),
2335 SMB_VFS_OP_SYS_ACL_GET_FILE,
2336 SMB_VFS_LAYER_LOGGER},
2337 {SMB_VFS_OP(smb_time_audit_sys_acl_get_fd),
2338 SMB_VFS_OP_SYS_ACL_GET_FD,
2339 SMB_VFS_LAYER_LOGGER},
2340 {SMB_VFS_OP(smb_time_audit_sys_acl_clear_perms),
2341 SMB_VFS_OP_SYS_ACL_CLEAR_PERMS,
2342 SMB_VFS_LAYER_LOGGER},
2343 {SMB_VFS_OP(smb_time_audit_sys_acl_add_perm),
2344 SMB_VFS_OP_SYS_ACL_ADD_PERM,
2345 SMB_VFS_LAYER_LOGGER},
2346 {SMB_VFS_OP(smb_time_audit_sys_acl_to_text),
2347 SMB_VFS_OP_SYS_ACL_TO_TEXT,
2348 SMB_VFS_LAYER_LOGGER},
2349 {SMB_VFS_OP(smb_time_audit_sys_acl_init),
2350 SMB_VFS_OP_SYS_ACL_INIT,
2351 SMB_VFS_LAYER_LOGGER},
2352 {SMB_VFS_OP(smb_time_audit_sys_acl_create_entry),
2353 SMB_VFS_OP_SYS_ACL_CREATE_ENTRY,
2354 SMB_VFS_LAYER_LOGGER},
2355 {SMB_VFS_OP(smb_time_audit_sys_acl_set_tag_type),
2356 SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE,
2357 SMB_VFS_LAYER_LOGGER},
2358 {SMB_VFS_OP(smb_time_audit_sys_acl_set_qualifier),
2359 SMB_VFS_OP_SYS_ACL_SET_QUALIFIER,
2360 SMB_VFS_LAYER_LOGGER},
2361 {SMB_VFS_OP(smb_time_audit_sys_acl_set_permset),
2362 SMB_VFS_OP_SYS_ACL_SET_PERMSET,
2363 SMB_VFS_LAYER_LOGGER},
2364 {SMB_VFS_OP(smb_time_audit_sys_acl_valid),
2365 SMB_VFS_OP_SYS_ACL_VALID,
2366 SMB_VFS_LAYER_LOGGER},
2367 {SMB_VFS_OP(smb_time_audit_sys_acl_set_file),
2368 SMB_VFS_OP_SYS_ACL_SET_FILE,
2369 SMB_VFS_LAYER_LOGGER},
2370 {SMB_VFS_OP(smb_time_audit_sys_acl_set_fd),
2371 SMB_VFS_OP_SYS_ACL_SET_FD,
2372 SMB_VFS_LAYER_LOGGER},
2373 {SMB_VFS_OP(smb_time_audit_sys_acl_delete_def_file),
2374 SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE,
2375 SMB_VFS_LAYER_LOGGER},
2376 {SMB_VFS_OP(smb_time_audit_sys_acl_get_perm),
2377 SMB_VFS_OP_SYS_ACL_GET_PERM,
2378 SMB_VFS_LAYER_LOGGER},
2379 {SMB_VFS_OP(smb_time_audit_sys_acl_free_text),
2380 SMB_VFS_OP_SYS_ACL_FREE_TEXT,
2381 SMB_VFS_LAYER_LOGGER},
2382 {SMB_VFS_OP(smb_time_audit_sys_acl_free_acl),
2383 SMB_VFS_OP_SYS_ACL_FREE_ACL,
2384 SMB_VFS_LAYER_LOGGER},
2385 {SMB_VFS_OP(smb_time_audit_sys_acl_free_qualifier),
2386 SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER,
2387 SMB_VFS_LAYER_LOGGER},
2389 /* EA operations. */
2391 {SMB_VFS_OP(smb_time_audit_getxattr), SMB_VFS_OP_GETXATTR,
2392 SMB_VFS_LAYER_LOGGER},
2393 {SMB_VFS_OP(smb_time_audit_lgetxattr), SMB_VFS_OP_LGETXATTR,
2394 SMB_VFS_LAYER_LOGGER},
2395 {SMB_VFS_OP(smb_time_audit_fgetxattr), SMB_VFS_OP_FGETXATTR,
2396 SMB_VFS_LAYER_LOGGER},
2397 {SMB_VFS_OP(smb_time_audit_listxattr), SMB_VFS_OP_LISTXATTR,
2398 SMB_VFS_LAYER_LOGGER},
2399 {SMB_VFS_OP(smb_time_audit_llistxattr), SMB_VFS_OP_LLISTXATTR,
2400 SMB_VFS_LAYER_LOGGER},
2401 {SMB_VFS_OP(smb_time_audit_flistxattr), SMB_VFS_OP_FLISTXATTR,
2402 SMB_VFS_LAYER_LOGGER},
2403 {SMB_VFS_OP(smb_time_audit_removexattr),
2404 SMB_VFS_OP_REMOVEXATTR,
2405 SMB_VFS_LAYER_LOGGER},
2406 {SMB_VFS_OP(smb_time_audit_lremovexattr),
2407 SMB_VFS_OP_LREMOVEXATTR,
2408 SMB_VFS_LAYER_LOGGER},
2409 {SMB_VFS_OP(smb_time_audit_fremovexattr),
2410 SMB_VFS_OP_FREMOVEXATTR,
2411 SMB_VFS_LAYER_LOGGER},
2412 {SMB_VFS_OP(smb_time_audit_setxattr), SMB_VFS_OP_SETXATTR,
2413 SMB_VFS_LAYER_LOGGER},
2414 {SMB_VFS_OP(smb_time_audit_lsetxattr), SMB_VFS_OP_LSETXATTR,
2415 SMB_VFS_LAYER_LOGGER},
2416 {SMB_VFS_OP(smb_time_audit_fsetxattr), SMB_VFS_OP_FSETXATTR,
2417 SMB_VFS_LAYER_LOGGER},
2419 {SMB_VFS_OP(smb_time_audit_aio_read), SMB_VFS_OP_AIO_READ,
2420 SMB_VFS_LAYER_LOGGER},
2421 {SMB_VFS_OP(smb_time_audit_aio_write), SMB_VFS_OP_AIO_WRITE,
2422 SMB_VFS_LAYER_LOGGER},
2423 {SMB_VFS_OP(smb_time_audit_aio_return), SMB_VFS_OP_AIO_RETURN,
2424 SMB_VFS_LAYER_LOGGER},
2425 {SMB_VFS_OP(smb_time_audit_aio_cancel), SMB_VFS_OP_AIO_CANCEL,
2426 SMB_VFS_LAYER_LOGGER},
2427 {SMB_VFS_OP(smb_time_audit_aio_error), SMB_VFS_OP_AIO_ERROR,
2428 SMB_VFS_LAYER_LOGGER},
2429 {SMB_VFS_OP(smb_time_audit_aio_fsync), SMB_VFS_OP_AIO_FSYNC,
2430 SMB_VFS_LAYER_LOGGER},
2431 {SMB_VFS_OP(smb_time_audit_aio_suspend),SMB_VFS_OP_AIO_SUSPEND,
2432 SMB_VFS_LAYER_LOGGER},
2433 {SMB_VFS_OP(smb_time_audit_aio_force),SMB_VFS_OP_AIO_FORCE,
2434 SMB_VFS_LAYER_LOGGER},
2436 /* Finish VFS operations definition */
2438 {SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP,
2443 NTSTATUS vfs_time_audit_init(void);
2444 NTSTATUS vfs_time_audit_init(void)
2446 audit_timeout = (double)lp_parm_int(-1, "time_audit", "timeout",
2448 return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "time_audit",