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 *syscall, double elapsed)
37 DEBUG(0, ("System call \"%s\" took unexpectedly long (%.2f seconds) "
38 "-- check your file system and disks!\n", syscall,
42 static int smb_time_audit_connect(vfs_handle_struct *handle,
43 const char *svc, const char *user)
54 result = SMB_VFS_NEXT_CONNECT(handle, svc, user);
55 timediff = timeval_elapsed(&tv);
56 if (timediff > audit_timeout) {
57 smb_time_audit_log("connect", timediff);
62 static void smb_time_audit_disconnect(vfs_handle_struct *handle)
68 SMB_VFS_NEXT_DISCONNECT(handle);
69 timediff = timeval_elapsed(&tv);
71 if (timediff > audit_timeout) {
72 smb_time_audit_log("disconnect", timediff);
78 static uint64_t smb_time_audit_disk_free(vfs_handle_struct *handle,
80 bool small_query, uint64_t *bsize,
81 uint64_t *dfree, uint64_t *dsize)
88 result = SMB_VFS_NEXT_DISK_FREE(handle, path, small_query, bsize,
90 timediff = timeval_elapsed(&tv);
92 /* Don't have a reasonable notion of failure here */
93 if (timediff > audit_timeout) {
94 smb_time_audit_log("disk_free", timediff);
100 static int smb_time_audit_get_quota(struct vfs_handle_struct *handle,
101 enum SMB_QUOTA_TYPE qtype, unid_t id,
109 result = SMB_VFS_NEXT_GET_QUOTA(handle, qtype, id, qt);
110 timediff = timeval_elapsed(&tv);
112 if (timediff > audit_timeout) {
113 smb_time_audit_log("get_quota", timediff);
118 static int smb_time_audit_set_quota(struct vfs_handle_struct *handle,
119 enum SMB_QUOTA_TYPE qtype, unid_t id,
127 result = SMB_VFS_NEXT_SET_QUOTA(handle, qtype, id, qt);
128 timediff = timeval_elapsed(&tv);
130 if (timediff > audit_timeout) {
131 smb_time_audit_log("set_quota", timediff);
137 static int smb_time_audit_get_shadow_copy_data(struct vfs_handle_struct *handle,
138 struct files_struct *fsp,
139 SHADOW_COPY_DATA *shadow_copy_data,
147 result = SMB_VFS_NEXT_GET_SHADOW_COPY_DATA(handle, fsp,
148 shadow_copy_data, labels);
149 timediff = timeval_elapsed(&tv);
151 if (timediff > audit_timeout) {
152 smb_time_audit_log("get_shadow_copy_data", timediff);
158 static int smb_time_audit_statvfs(struct vfs_handle_struct *handle,
160 struct vfs_statvfs_struct *statbuf)
167 result = SMB_VFS_NEXT_STATVFS(handle, path, statbuf);
168 timediff = timeval_elapsed(&tv);
170 if (timediff > audit_timeout) {
171 smb_time_audit_log("statvfs", timediff);
177 static int smb_time_audit_fs_capabilities(struct vfs_handle_struct *handle)
184 result = SMB_VFS_NEXT_FS_CAPABILITIES(handle);
185 timediff = timeval_elapsed(&tv);
187 if (timediff > audit_timeout) {
188 smb_time_audit_log("fs_capabilities", timediff);
194 static SMB_STRUCT_DIR *smb_time_audit_opendir(vfs_handle_struct *handle,
196 const char *mask, uint32 attr)
198 SMB_STRUCT_DIR *result;
203 result = SMB_VFS_NEXT_OPENDIR(handle, fname, mask, attr);
204 timediff = timeval_elapsed(&tv);
206 if (timediff > audit_timeout) {
207 smb_time_audit_log("opendir", timediff);
213 static SMB_STRUCT_DIRENT *smb_time_audit_readdir(vfs_handle_struct *handle,
214 SMB_STRUCT_DIR *dirp,
215 SMB_STRUCT_STAT *sbuf)
217 SMB_STRUCT_DIRENT *result;
222 result = SMB_VFS_NEXT_READDIR(handle, dirp, sbuf);
223 timediff = timeval_elapsed(&tv);
225 if (timediff > audit_timeout) {
226 smb_time_audit_log("readdir", timediff);
232 static void smb_time_audit_seekdir(vfs_handle_struct *handle,
233 SMB_STRUCT_DIR *dirp, long offset)
239 SMB_VFS_NEXT_SEEKDIR(handle, dirp, offset);
240 timediff = timeval_elapsed(&tv);
242 if (timediff > audit_timeout) {
243 smb_time_audit_log("seekdir", timediff);
249 static long smb_time_audit_telldir(vfs_handle_struct *handle,
250 SMB_STRUCT_DIR *dirp)
257 result = SMB_VFS_NEXT_TELLDIR(handle, dirp);
258 timediff = timeval_elapsed(&tv);
260 if (timediff > audit_timeout) {
261 smb_time_audit_log("telldir", timediff);
267 static void smb_time_audit_rewinddir(vfs_handle_struct *handle,
268 SMB_STRUCT_DIR *dirp)
274 SMB_VFS_NEXT_REWINDDIR(handle, dirp);
275 timediff = timeval_elapsed(&tv);
277 if (timediff > audit_timeout) {
278 smb_time_audit_log("rewinddir", timediff);
284 static int smb_time_audit_mkdir(vfs_handle_struct *handle,
285 const char *path, mode_t mode)
292 result = SMB_VFS_NEXT_MKDIR(handle, path, mode);
293 timediff = timeval_elapsed(&tv);
295 if (timediff > audit_timeout) {
296 smb_time_audit_log("mkdir", timediff);
302 static int smb_time_audit_rmdir(vfs_handle_struct *handle,
310 result = SMB_VFS_NEXT_RMDIR(handle, path);
311 timediff = timeval_elapsed(&tv);
313 if (timediff > audit_timeout) {
314 smb_time_audit_log("rmdir", timediff);
320 static int smb_time_audit_closedir(vfs_handle_struct *handle,
321 SMB_STRUCT_DIR *dirp)
328 result = SMB_VFS_NEXT_CLOSEDIR(handle, dirp);
329 timediff = timeval_elapsed(&tv);
331 if (timediff > audit_timeout) {
332 smb_time_audit_log("closedir", timediff);
338 static void smb_time_audit_init_search_op(vfs_handle_struct *handle,
339 SMB_STRUCT_DIR *dirp)
345 SMB_VFS_NEXT_INIT_SEARCH_OP(handle, dirp);
346 timediff = timeval_elapsed(&tv);
348 if (timediff > audit_timeout) {
349 smb_time_audit_log("init_search_op", timediff);
354 static int smb_time_audit_open(vfs_handle_struct *handle,
355 const char *fname, files_struct *fsp,
356 int flags, mode_t mode)
363 result = SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
364 timediff = timeval_elapsed(&tv);
366 if (timediff > audit_timeout) {
367 smb_time_audit_log("open", timediff);
373 static NTSTATUS smb_time_audit_create_file(vfs_handle_struct *handle,
374 struct smb_request *req,
375 uint16_t root_dir_fid,
377 uint32_t create_file_flags,
378 uint32_t access_mask,
379 uint32_t share_access,
380 uint32_t create_disposition,
381 uint32_t create_options,
382 uint32_t file_attributes,
383 uint32_t oplock_request,
384 uint64_t allocation_size,
385 struct security_descriptor *sd,
386 struct ea_list *ea_list,
387 files_struct **result_fsp,
389 SMB_STRUCT_STAT *psbuf)
396 result = SMB_VFS_NEXT_CREATE_FILE(
399 root_dir_fid, /* root_dir_fid */
401 create_file_flags, /* create_file_flags */
402 access_mask, /* access_mask */
403 share_access, /* share_access */
404 create_disposition, /* create_disposition*/
405 create_options, /* create_options */
406 file_attributes, /* file_attributes */
407 oplock_request, /* oplock_request */
408 allocation_size, /* allocation_size */
410 ea_list, /* ea_list */
411 result_fsp, /* result */
414 timediff = timeval_elapsed(&tv);
416 if (timediff > audit_timeout) {
417 smb_time_audit_log("create_file", timediff);
423 static int smb_time_audit_close(vfs_handle_struct *handle, files_struct *fsp)
430 result = SMB_VFS_NEXT_CLOSE(handle, fsp);
431 timediff = timeval_elapsed(&tv);
433 if (timediff > audit_timeout) {
434 smb_time_audit_log("close", timediff);
440 static ssize_t smb_time_audit_read(vfs_handle_struct *handle,
441 files_struct *fsp, void *data, size_t n)
448 result = SMB_VFS_NEXT_READ(handle, fsp, data, n);
449 timediff = timeval_elapsed(&tv);
451 if (timediff > audit_timeout) {
452 smb_time_audit_log("read", timediff);
458 static ssize_t smb_time_audit_pread(vfs_handle_struct *handle,
460 void *data, size_t n, SMB_OFF_T offset)
467 result = SMB_VFS_NEXT_PREAD(handle, fsp, data, n, offset);
468 timediff = timeval_elapsed(&tv);
470 if (timediff > audit_timeout) {
471 smb_time_audit_log("pread", timediff);
477 static ssize_t smb_time_audit_write(vfs_handle_struct *handle,
479 const void *data, size_t n)
486 result = SMB_VFS_NEXT_WRITE(handle, fsp, data, n);
487 timediff = timeval_elapsed(&tv);
489 if (timediff > audit_timeout) {
490 smb_time_audit_log("write", timediff);
496 static ssize_t smb_time_audit_pwrite(vfs_handle_struct *handle,
498 const void *data, size_t n,
506 result = SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
507 timediff = timeval_elapsed(&tv);
509 if (timediff > audit_timeout) {
510 smb_time_audit_log("pwrite", timediff);
516 static SMB_OFF_T smb_time_audit_lseek(vfs_handle_struct *handle,
518 SMB_OFF_T offset, int whence)
525 result = SMB_VFS_NEXT_LSEEK(handle, fsp, offset, whence);
526 timediff = timeval_elapsed(&tv);
528 if (timediff > audit_timeout) {
529 smb_time_audit_log("lseek", timediff);
535 static ssize_t smb_time_audit_sendfile(vfs_handle_struct *handle, int tofd,
536 files_struct *fromfsp,
537 const DATA_BLOB *hdr, SMB_OFF_T offset,
545 result = SMB_VFS_NEXT_SENDFILE(handle, tofd, fromfsp, hdr, offset, n);
546 timediff = timeval_elapsed(&tv);
548 if (timediff > audit_timeout) {
549 smb_time_audit_log("sendfile", timediff);
555 static ssize_t smb_time_audit_recvfile(vfs_handle_struct *handle, int fromfd,
565 result = SMB_VFS_NEXT_RECVFILE(handle, fromfd, tofsp, offset, n);
566 timediff = timeval_elapsed(&tv);
568 if (timediff > audit_timeout) {
569 smb_time_audit_log("recvfile", timediff);
575 static int smb_time_audit_rename(vfs_handle_struct *handle,
576 const char *oldname, const char *newname)
583 result = SMB_VFS_NEXT_RENAME(handle, oldname, newname);
584 timediff = timeval_elapsed(&tv);
586 if (timediff > audit_timeout) {
587 smb_time_audit_log("rename", timediff);
593 static int smb_time_audit_fsync(vfs_handle_struct *handle, files_struct *fsp)
600 result = SMB_VFS_NEXT_FSYNC(handle, fsp);
601 timediff = timeval_elapsed(&tv);
603 if (timediff > audit_timeout) {
604 smb_time_audit_log("fsync", timediff);
610 static int smb_time_audit_stat(vfs_handle_struct *handle,
611 const char *fname, SMB_STRUCT_STAT *sbuf)
618 result = SMB_VFS_NEXT_STAT(handle, fname, sbuf);
619 timediff = timeval_elapsed(&tv);
621 if (timediff > audit_timeout) {
622 smb_time_audit_log("stat", timediff);
628 static int smb_time_audit_fstat(vfs_handle_struct *handle, files_struct *fsp,
629 SMB_STRUCT_STAT *sbuf)
636 result = SMB_VFS_NEXT_FSTAT(handle, fsp, sbuf);
637 timediff = timeval_elapsed(&tv);
639 if (timediff > audit_timeout) {
640 smb_time_audit_log("fstat", timediff);
646 static int smb_time_audit_lstat(vfs_handle_struct *handle,
647 const char *path, SMB_STRUCT_STAT *sbuf)
654 result = SMB_VFS_NEXT_LSTAT(handle, path, sbuf);
655 timediff = timeval_elapsed(&tv);
657 if (timediff > audit_timeout) {
658 smb_time_audit_log("lstat", timediff);
664 static int smb_time_audit_get_alloc_size(vfs_handle_struct *handle,
666 const SMB_STRUCT_STAT *sbuf)
673 result = SMB_VFS_NEXT_GET_ALLOC_SIZE(handle, fsp, sbuf);
674 timediff = timeval_elapsed(&tv);
676 if (timediff > audit_timeout) {
677 smb_time_audit_log("get_alloc_size", timediff);
683 static int smb_time_audit_unlink(vfs_handle_struct *handle,
691 result = SMB_VFS_NEXT_UNLINK(handle, path);
692 timediff = timeval_elapsed(&tv);
694 if (timediff > audit_timeout) {
695 smb_time_audit_log("unlink", timediff);
701 static int smb_time_audit_chmod(vfs_handle_struct *handle,
702 const char *path, mode_t mode)
709 result = SMB_VFS_NEXT_CHMOD(handle, path, mode);
710 timediff = timeval_elapsed(&tv);
712 if (timediff > audit_timeout) {
713 smb_time_audit_log("chmod", timediff);
719 static int smb_time_audit_fchmod(vfs_handle_struct *handle, files_struct *fsp,
727 result = SMB_VFS_NEXT_FCHMOD(handle, fsp, mode);
728 timediff = timeval_elapsed(&tv);
730 if (timediff > audit_timeout) {
731 smb_time_audit_log("fchmod", timediff);
737 static int smb_time_audit_chown(vfs_handle_struct *handle,
738 const char *path, uid_t uid, gid_t gid)
745 result = SMB_VFS_NEXT_CHOWN(handle, path, uid, gid);
746 timediff = timeval_elapsed(&tv);
748 if (timediff > audit_timeout) {
749 smb_time_audit_log("chown", timediff);
755 static int smb_time_audit_fchown(vfs_handle_struct *handle, files_struct *fsp,
756 uid_t uid, gid_t gid)
763 result = SMB_VFS_NEXT_FCHOWN(handle, fsp, uid, gid);
764 timediff = timeval_elapsed(&tv);
766 if (timediff > audit_timeout) {
767 smb_time_audit_log("fchown", timediff);
773 static int smb_time_audit_lchown(vfs_handle_struct *handle,
774 const char *path, uid_t uid, gid_t gid)
781 result = SMB_VFS_NEXT_LCHOWN(handle, path, uid, gid);
782 timediff = timeval_elapsed(&tv);
784 if (timediff > audit_timeout) {
785 smb_time_audit_log("lchown", timediff);
791 static int smb_time_audit_chdir(vfs_handle_struct *handle, const char *path)
798 result = SMB_VFS_NEXT_CHDIR(handle, path);
799 timediff = timeval_elapsed(&tv);
801 if (timediff > audit_timeout) {
802 smb_time_audit_log("chdir", timediff);
808 static char *smb_time_audit_getwd(vfs_handle_struct *handle, char *path)
815 result = SMB_VFS_NEXT_GETWD(handle, path);
816 timediff = timeval_elapsed(&tv);
818 if (timediff > audit_timeout) {
819 smb_time_audit_log("getwd", timediff);
825 static int smb_time_audit_ntimes(vfs_handle_struct *handle,
826 const char *path, struct smb_file_time *ft)
833 result = SMB_VFS_NEXT_NTIMES(handle, path, ft);
834 timediff = timeval_elapsed(&tv);
836 if (timediff > audit_timeout) {
837 smb_time_audit_log("ntimes", timediff);
843 static int smb_time_audit_ftruncate(vfs_handle_struct *handle,
852 result = SMB_VFS_NEXT_FTRUNCATE(handle, fsp, len);
853 timediff = timeval_elapsed(&tv);
855 if (timediff > audit_timeout) {
856 smb_time_audit_log("ftruncate", timediff);
862 static bool smb_time_audit_lock(vfs_handle_struct *handle, files_struct *fsp,
863 int op, SMB_OFF_T offset, SMB_OFF_T count,
871 result = SMB_VFS_NEXT_LOCK(handle, fsp, op, offset, count, type);
872 timediff = timeval_elapsed(&tv);
874 if (timediff > audit_timeout) {
875 smb_time_audit_log("lock", timediff);
881 static int smb_time_audit_kernel_flock(struct vfs_handle_struct *handle,
882 struct files_struct *fsp,
883 uint32 share_mode, uint32 access_mask)
890 result = SMB_VFS_NEXT_KERNEL_FLOCK(handle, fsp, share_mode,
892 timediff = timeval_elapsed(&tv);
894 if (timediff > audit_timeout) {
895 smb_time_audit_log("kernel_flock", timediff);
901 static int smb_time_audit_linux_setlease(vfs_handle_struct *handle,
910 result = SMB_VFS_NEXT_LINUX_SETLEASE(handle, fsp, leasetype);
911 timediff = timeval_elapsed(&tv);
913 if (timediff > audit_timeout) {
914 smb_time_audit_log("linux_setlease", timediff);
920 static bool smb_time_audit_getlock(vfs_handle_struct *handle,
922 SMB_OFF_T *poffset, SMB_OFF_T *pcount,
923 int *ptype, pid_t *ppid)
930 result = SMB_VFS_NEXT_GETLOCK(handle, fsp, poffset, pcount, ptype,
932 timediff = timeval_elapsed(&tv);
934 if (timediff > audit_timeout) {
935 smb_time_audit_log("getlock", timediff);
941 static int smb_time_audit_symlink(vfs_handle_struct *handle,
942 const char *oldpath, const char *newpath)
949 result = SMB_VFS_NEXT_SYMLINK(handle, oldpath, newpath);
950 timediff = timeval_elapsed(&tv);
952 if (timediff > audit_timeout) {
953 smb_time_audit_log("symlink", timediff);
959 static int smb_time_audit_readlink(vfs_handle_struct *handle,
960 const char *path, char *buf, size_t bufsiz)
967 result = SMB_VFS_NEXT_READLINK(handle, path, buf, bufsiz);
968 timediff = timeval_elapsed(&tv);
970 if (timediff > audit_timeout) {
971 smb_time_audit_log("readlink", timediff);
977 static int smb_time_audit_link(vfs_handle_struct *handle,
978 const char *oldpath, const char *newpath)
985 result = SMB_VFS_NEXT_LINK(handle, oldpath, newpath);
986 timediff = timeval_elapsed(&tv);
988 if (timediff > audit_timeout) {
989 smb_time_audit_log("link", timediff);
995 static int smb_time_audit_mknod(vfs_handle_struct *handle,
996 const char *pathname, mode_t mode,
1004 result = SMB_VFS_NEXT_MKNOD(handle, pathname, mode, dev);
1005 timediff = timeval_elapsed(&tv);
1007 if (timediff > audit_timeout) {
1008 smb_time_audit_log("mknod", timediff);
1014 static char *smb_time_audit_realpath(vfs_handle_struct *handle,
1015 const char *path, char *resolved_path)
1022 result = SMB_VFS_NEXT_REALPATH(handle, path, resolved_path);
1023 timediff = timeval_elapsed(&tv);
1025 if (timediff > audit_timeout) {
1026 smb_time_audit_log("realpath", timediff);
1032 static NTSTATUS smb_time_audit_notify_watch(struct vfs_handle_struct *handle,
1033 struct sys_notify_context *ctx,
1034 struct notify_entry *e,
1035 void (*callback)(struct sys_notify_context *ctx,
1037 struct notify_event *ev),
1038 void *private_data, void *handle_p)
1045 result = SMB_VFS_NEXT_NOTIFY_WATCH(handle, ctx, e, callback,
1046 private_data, handle_p);
1047 timediff = timeval_elapsed(&tv);
1049 if (timediff > audit_timeout) {
1050 smb_time_audit_log("notify_watch", timediff);
1056 static int smb_time_audit_chflags(vfs_handle_struct *handle,
1057 const char *path, unsigned int flags)
1064 result = SMB_VFS_NEXT_CHFLAGS(handle, path, flags);
1065 timediff = timeval_elapsed(&tv);
1067 if (timediff > audit_timeout) {
1068 smb_time_audit_log("chflags", timediff);
1074 static struct file_id smb_time_audit_file_id_create(struct vfs_handle_struct *handle,
1075 const SMB_STRUCT_STAT *sbuf)
1077 struct file_id id_zero;
1078 struct file_id result;
1082 ZERO_STRUCT(id_zero);
1085 result = SMB_VFS_NEXT_FILE_ID_CREATE(handle, sbuf);
1086 timediff = timeval_elapsed(&tv);
1088 if (timediff > audit_timeout) {
1089 smb_time_audit_log("file_id_create", timediff);
1095 static NTSTATUS smb_time_audit_streaminfo(vfs_handle_struct *handle,
1096 struct files_struct *fsp,
1098 TALLOC_CTX *mem_ctx,
1099 unsigned int *pnum_streams,
1100 struct stream_struct **pstreams)
1107 result = SMB_VFS_NEXT_STREAMINFO(handle, fsp, fname, mem_ctx,
1108 pnum_streams, pstreams);
1109 timediff = timeval_elapsed(&tv);
1111 if (timediff > audit_timeout) {
1112 smb_time_audit_log("streaminfo", timediff);
1118 static int smb_time_audit_get_real_filename(struct vfs_handle_struct *handle,
1121 TALLOC_CTX *mem_ctx,
1129 result = SMB_VFS_NEXT_GET_REAL_FILENAME(handle, path, name, mem_ctx,
1131 timediff = timeval_elapsed(&tv);
1133 if (timediff > audit_timeout) {
1134 smb_time_audit_log("get_real_filename", timediff);
1140 static const char *smb_time_audit_connectpath(vfs_handle_struct *handle,
1148 result = SMB_VFS_NEXT_CONNECTPATH(handle, fname);
1149 timediff = timeval_elapsed(&tv);
1151 if (timediff > audit_timeout) {
1152 smb_time_audit_log("connectpath", timediff);
1158 static NTSTATUS smb_time_audit_brl_lock_windows(struct vfs_handle_struct *handle,
1159 struct byte_range_lock *br_lck,
1160 struct lock_struct *plock,
1162 struct blocking_lock_record *blr)
1169 result = SMB_VFS_NEXT_BRL_LOCK_WINDOWS(handle, br_lck, plock,
1170 blocking_lock, blr);
1171 timediff = timeval_elapsed(&tv);
1173 if (timediff > audit_timeout) {
1174 smb_time_audit_log("brl_lock_windows", timediff);
1180 static bool smb_time_audit_brl_unlock_windows(struct vfs_handle_struct *handle,
1181 struct messaging_context *msg_ctx,
1182 struct byte_range_lock *br_lck,
1183 const struct lock_struct *plock)
1190 result = SMB_VFS_NEXT_BRL_UNLOCK_WINDOWS(handle, msg_ctx, br_lck,
1192 timediff = timeval_elapsed(&tv);
1194 if (timediff > audit_timeout) {
1195 smb_time_audit_log("brl_unlock_windows", timediff);
1201 static bool smb_time_audit_brl_cancel_windows(struct vfs_handle_struct *handle,
1202 struct byte_range_lock *br_lck,
1203 struct lock_struct *plock,
1204 struct blocking_lock_record *blr)
1211 result = SMB_VFS_NEXT_BRL_CANCEL_WINDOWS(handle, br_lck, plock, blr);
1212 timediff = timeval_elapsed(&tv);
1214 if (timediff > audit_timeout) {
1215 smb_time_audit_log("brl_cancel_windows", timediff);
1221 static bool smb_time_audit_strict_lock(struct vfs_handle_struct *handle,
1222 struct files_struct *fsp,
1223 struct lock_struct *plock)
1230 result = SMB_VFS_NEXT_STRICT_LOCK(handle, fsp, plock);
1231 timediff = timeval_elapsed(&tv);
1233 if (timediff > audit_timeout) {
1234 smb_time_audit_log("strict_lock", timediff);
1240 static void smb_time_audit_strict_unlock(struct vfs_handle_struct *handle,
1241 struct files_struct *fsp,
1242 struct lock_struct *plock)
1248 SMB_VFS_NEXT_STRICT_UNLOCK(handle, fsp, plock);
1249 timediff = timeval_elapsed(&tv);
1251 if (timediff > audit_timeout) {
1252 smb_time_audit_log("strict_unlock", timediff);
1258 static NTSTATUS smb_time_audit_fget_nt_acl(vfs_handle_struct *handle,
1260 uint32 security_info,
1268 result = SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, security_info, ppdesc);
1269 timediff = timeval_elapsed(&tv);
1271 if (timediff > audit_timeout) {
1272 smb_time_audit_log("fget_nt_acl", timediff);
1278 static NTSTATUS smb_time_audit_get_nt_acl(vfs_handle_struct *handle,
1280 uint32 security_info,
1288 result = SMB_VFS_NEXT_GET_NT_ACL(handle, name, security_info, ppdesc);
1289 timediff = timeval_elapsed(&tv);
1291 if (timediff > audit_timeout) {
1292 smb_time_audit_log("get_nt_acl", timediff);
1298 static NTSTATUS smb_time_audit_fset_nt_acl(vfs_handle_struct *handle,
1300 uint32 security_info_sent,
1301 const SEC_DESC *psd)
1308 result = SMB_VFS_NEXT_FSET_NT_ACL(handle, fsp, security_info_sent,
1310 timediff = timeval_elapsed(&tv);
1312 if (timediff > audit_timeout) {
1313 smb_time_audit_log("fset_nt_acl", timediff);
1319 static int smb_time_audit_chmod_acl(vfs_handle_struct *handle,
1320 const char *path, mode_t mode)
1327 result = SMB_VFS_NEXT_CHMOD_ACL(handle, path, mode);
1328 timediff = timeval_elapsed(&tv);
1330 if (timediff > audit_timeout) {
1331 smb_time_audit_log("chmod_acl", timediff);
1337 static int smb_time_audit_fchmod_acl(vfs_handle_struct *handle,
1338 files_struct *fsp, mode_t mode)
1345 result = SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, mode);
1346 timediff = timeval_elapsed(&tv);
1348 if (timediff > audit_timeout) {
1349 smb_time_audit_log("fchmod_acl", timediff);
1355 static int smb_time_audit_sys_acl_get_entry(vfs_handle_struct *handle,
1356 SMB_ACL_T theacl, int entry_id,
1357 SMB_ACL_ENTRY_T *entry_p)
1364 result = SMB_VFS_NEXT_SYS_ACL_GET_ENTRY(handle, theacl, entry_id,
1366 timediff = timeval_elapsed(&tv);
1368 if (timediff > audit_timeout) {
1369 smb_time_audit_log("sys_acl_get_entry", timediff);
1375 static int smb_time_audit_sys_acl_get_tag_type(vfs_handle_struct *handle,
1376 SMB_ACL_ENTRY_T entry_d,
1377 SMB_ACL_TAG_T *tag_type_p)
1384 result = SMB_VFS_NEXT_SYS_ACL_GET_TAG_TYPE(handle, entry_d,
1386 timediff = timeval_elapsed(&tv);
1388 if (timediff > audit_timeout) {
1389 smb_time_audit_log("sys_acl_get_tag_type", timediff);
1395 static int smb_time_audit_sys_acl_get_permset(vfs_handle_struct *handle,
1396 SMB_ACL_ENTRY_T entry_d,
1397 SMB_ACL_PERMSET_T *permset_p)
1404 result = SMB_VFS_NEXT_SYS_ACL_GET_PERMSET(handle, entry_d,
1406 timediff = timeval_elapsed(&tv);
1408 if (timediff > audit_timeout) {
1409 smb_time_audit_log("sys_acl_get_permset", timediff);
1415 static void * smb_time_audit_sys_acl_get_qualifier(vfs_handle_struct *handle,
1416 SMB_ACL_ENTRY_T entry_d)
1423 result = SMB_VFS_NEXT_SYS_ACL_GET_QUALIFIER(handle, entry_d);
1424 timediff = timeval_elapsed(&tv);
1426 if (timediff > audit_timeout) {
1427 smb_time_audit_log("sys_acl_get_qualifier", timediff);
1433 static SMB_ACL_T smb_time_audit_sys_acl_get_file(vfs_handle_struct *handle,
1435 SMB_ACL_TYPE_T type)
1442 result = SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle, path_p, type);
1443 timediff = timeval_elapsed(&tv);
1445 if (timediff > audit_timeout) {
1446 smb_time_audit_log("sys_acl_get_file", timediff);
1452 static SMB_ACL_T smb_time_audit_sys_acl_get_fd(vfs_handle_struct *handle,
1460 result = SMB_VFS_NEXT_SYS_ACL_GET_FD(handle, fsp);
1461 timediff = timeval_elapsed(&tv);
1463 if (timediff > audit_timeout) {
1464 smb_time_audit_log("sys_acl_get_fd", timediff);
1470 static int smb_time_audit_sys_acl_clear_perms(vfs_handle_struct *handle,
1471 SMB_ACL_PERMSET_T permset)
1478 result = SMB_VFS_NEXT_SYS_ACL_CLEAR_PERMS(handle, permset);
1479 timediff = timeval_elapsed(&tv);
1481 if (timediff > audit_timeout) {
1482 smb_time_audit_log("sys_acl_clear_perms", timediff);
1488 static int smb_time_audit_sys_acl_add_perm(vfs_handle_struct *handle,
1489 SMB_ACL_PERMSET_T permset,
1490 SMB_ACL_PERM_T perm)
1497 result = SMB_VFS_NEXT_SYS_ACL_ADD_PERM(handle, permset, perm);
1498 timediff = timeval_elapsed(&tv);
1500 if (timediff > audit_timeout) {
1501 smb_time_audit_log("sys_acl_add_perm", timediff);
1507 static char * smb_time_audit_sys_acl_to_text(vfs_handle_struct *handle,
1516 result = SMB_VFS_NEXT_SYS_ACL_TO_TEXT(handle, theacl, plen);
1517 timediff = timeval_elapsed(&tv);
1519 if (timediff > audit_timeout) {
1520 smb_time_audit_log("sys_acl_to_text", timediff);
1526 static SMB_ACL_T smb_time_audit_sys_acl_init(vfs_handle_struct *handle,
1534 result = SMB_VFS_NEXT_SYS_ACL_INIT(handle, count);
1535 timediff = timeval_elapsed(&tv);
1537 if (timediff > audit_timeout) {
1538 smb_time_audit_log("sys_acl_init", timediff);
1544 static int smb_time_audit_sys_acl_create_entry(vfs_handle_struct *handle,
1546 SMB_ACL_ENTRY_T *pentry)
1553 result = SMB_VFS_NEXT_SYS_ACL_CREATE_ENTRY(handle, pacl, pentry);
1554 timediff = timeval_elapsed(&tv);
1556 if (timediff > audit_timeout) {
1557 smb_time_audit_log("sys_acl_create_entry", timediff);
1563 static int smb_time_audit_sys_acl_set_tag_type(vfs_handle_struct *handle,
1564 SMB_ACL_ENTRY_T entry,
1565 SMB_ACL_TAG_T tagtype)
1572 result = SMB_VFS_NEXT_SYS_ACL_SET_TAG_TYPE(handle, entry,
1574 timediff = timeval_elapsed(&tv);
1576 if (timediff > audit_timeout) {
1577 smb_time_audit_log("sys_acl_set_tag_type", timediff);
1583 static int smb_time_audit_sys_acl_set_qualifier(vfs_handle_struct *handle,
1584 SMB_ACL_ENTRY_T entry,
1592 result = SMB_VFS_NEXT_SYS_ACL_SET_QUALIFIER(handle, entry, qual);
1593 timediff = timeval_elapsed(&tv);
1595 if (timediff > audit_timeout) {
1596 smb_time_audit_log("sys_acl_set_qualifier", timediff);
1602 static int smb_time_audit_sys_acl_set_permset(vfs_handle_struct *handle,
1603 SMB_ACL_ENTRY_T entry,
1604 SMB_ACL_PERMSET_T permset)
1611 result = SMB_VFS_NEXT_SYS_ACL_SET_PERMSET(handle, entry, permset);
1612 timediff = timeval_elapsed(&tv);
1614 if (timediff > audit_timeout) {
1615 smb_time_audit_log("sys_acl_set_permset", timediff);
1621 static int smb_time_audit_sys_acl_valid(vfs_handle_struct *handle,
1629 result = SMB_VFS_NEXT_SYS_ACL_VALID(handle, theacl);
1630 timediff = timeval_elapsed(&tv);
1632 if (timediff > audit_timeout) {
1633 smb_time_audit_log("sys_acl_valid", timediff);
1639 static int smb_time_audit_sys_acl_set_file(vfs_handle_struct *handle,
1641 SMB_ACL_TYPE_T acltype,
1649 result = SMB_VFS_NEXT_SYS_ACL_SET_FILE(handle, name, acltype,
1651 timediff = timeval_elapsed(&tv);
1653 if (timediff > audit_timeout) {
1654 smb_time_audit_log("sys_acl_set_file", timediff);
1660 static int smb_time_audit_sys_acl_set_fd(vfs_handle_struct *handle,
1669 result = SMB_VFS_NEXT_SYS_ACL_SET_FD(handle, fsp, theacl);
1670 timediff = timeval_elapsed(&tv);
1672 if (timediff > audit_timeout) {
1673 smb_time_audit_log("sys_acl_set_fd", timediff);
1679 static int smb_time_audit_sys_acl_delete_def_file(vfs_handle_struct *handle,
1687 result = SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FILE(handle, path);
1688 timediff = timeval_elapsed(&tv);
1690 if (timediff > audit_timeout) {
1691 smb_time_audit_log("sys_acl_delete_def_file", timediff);
1697 static int smb_time_audit_sys_acl_get_perm(vfs_handle_struct *handle,
1698 SMB_ACL_PERMSET_T permset,
1699 SMB_ACL_PERM_T perm)
1706 result = SMB_VFS_NEXT_SYS_ACL_GET_PERM(handle, permset, perm);
1707 timediff = timeval_elapsed(&tv);
1709 if (timediff > audit_timeout) {
1710 smb_time_audit_log("sys_acl_get_perm", timediff);
1716 static int smb_time_audit_sys_acl_free_text(vfs_handle_struct *handle,
1724 result = SMB_VFS_NEXT_SYS_ACL_FREE_TEXT(handle, text);
1725 timediff = timeval_elapsed(&tv);
1727 if (timediff > audit_timeout) {
1728 smb_time_audit_log("sys_acl_free_text", timediff);
1734 static int smb_time_audit_sys_acl_free_acl(vfs_handle_struct *handle,
1735 SMB_ACL_T posix_acl)
1742 result = SMB_VFS_NEXT_SYS_ACL_FREE_ACL(handle, posix_acl);
1743 timediff = timeval_elapsed(&tv);
1745 if (timediff > audit_timeout) {
1746 smb_time_audit_log("sys_acl_free_acl", timediff);
1752 static int smb_time_audit_sys_acl_free_qualifier(vfs_handle_struct *handle,
1754 SMB_ACL_TAG_T tagtype)
1761 result = SMB_VFS_NEXT_SYS_ACL_FREE_QUALIFIER(handle, qualifier,
1763 timediff = timeval_elapsed(&tv);
1765 if (timediff > audit_timeout) {
1766 smb_time_audit_log("sys_acl_free_qualifier", timediff);
1772 static ssize_t smb_time_audit_getxattr(struct vfs_handle_struct *handle,
1773 const char *path, const char *name,
1774 void *value, size_t size)
1781 result = SMB_VFS_NEXT_GETXATTR(handle, path, name, value, size);
1782 timediff = timeval_elapsed(&tv);
1784 if (timediff > audit_timeout) {
1785 smb_time_audit_log("getxattr", timediff);
1791 static ssize_t smb_time_audit_lgetxattr(struct vfs_handle_struct *handle,
1792 const char *path, const char *name,
1793 void *value, size_t size)
1800 result = SMB_VFS_NEXT_LGETXATTR(handle, path, name, value, size);
1801 timediff = timeval_elapsed(&tv);
1803 if (timediff > audit_timeout) {
1804 smb_time_audit_log("lgetxattr", timediff);
1810 static ssize_t smb_time_audit_fgetxattr(struct vfs_handle_struct *handle,
1811 struct files_struct *fsp,
1812 const char *name, void *value,
1820 result = SMB_VFS_NEXT_FGETXATTR(handle, fsp, name, value, size);
1821 timediff = timeval_elapsed(&tv);
1823 if (timediff > audit_timeout) {
1824 smb_time_audit_log("fgetxattr", timediff);
1830 static ssize_t smb_time_audit_listxattr(struct vfs_handle_struct *handle,
1831 const char *path, char *list,
1839 result = SMB_VFS_NEXT_LISTXATTR(handle, path, list, size);
1840 timediff = timeval_elapsed(&tv);
1842 if (timediff > audit_timeout) {
1843 smb_time_audit_log("listxattr", timediff);
1849 static ssize_t smb_time_audit_llistxattr(struct vfs_handle_struct *handle,
1850 const char *path, char *list,
1858 result = SMB_VFS_NEXT_LLISTXATTR(handle, path, list, size);
1859 timediff = timeval_elapsed(&tv);
1861 if (timediff > audit_timeout) {
1862 smb_time_audit_log("llistxattr", timediff);
1868 static ssize_t smb_time_audit_flistxattr(struct vfs_handle_struct *handle,
1869 struct files_struct *fsp, char *list,
1877 result = SMB_VFS_NEXT_FLISTXATTR(handle, fsp, list, size);
1878 timediff = timeval_elapsed(&tv);
1880 if (timediff > audit_timeout) {
1881 smb_time_audit_log("flistxattr", timediff);
1887 static int smb_time_audit_removexattr(struct vfs_handle_struct *handle,
1888 const char *path, const char *name)
1895 result = SMB_VFS_NEXT_REMOVEXATTR(handle, path, name);
1896 timediff = timeval_elapsed(&tv);
1898 if (timediff > audit_timeout) {
1899 smb_time_audit_log("removexattr", timediff);
1905 static int smb_time_audit_lremovexattr(struct vfs_handle_struct *handle,
1906 const char *path, const char *name)
1913 result = SMB_VFS_NEXT_LREMOVEXATTR(handle, path, name);
1914 timediff = timeval_elapsed(&tv);
1916 if (timediff > audit_timeout) {
1917 smb_time_audit_log("lremovexattr", timediff);
1923 static int smb_time_audit_fremovexattr(struct vfs_handle_struct *handle,
1924 struct files_struct *fsp,
1932 result = SMB_VFS_NEXT_FREMOVEXATTR(handle, fsp, name);
1933 timediff = timeval_elapsed(&tv);
1935 if (timediff > audit_timeout) {
1936 smb_time_audit_log("fremovexattr", timediff);
1942 static int smb_time_audit_setxattr(struct vfs_handle_struct *handle,
1943 const char *path, const char *name,
1944 const void *value, size_t size,
1952 result = SMB_VFS_NEXT_SETXATTR(handle, path, name, value, size,
1954 timediff = timeval_elapsed(&tv);
1956 if (timediff > audit_timeout) {
1957 smb_time_audit_log("setxattr", timediff);
1963 static int smb_time_audit_lsetxattr(struct vfs_handle_struct *handle,
1964 const char *path, const char *name,
1965 const void *value, size_t size,
1973 result = SMB_VFS_NEXT_LSETXATTR(handle, path, name, value, size,
1975 timediff = timeval_elapsed(&tv);
1977 if (timediff > audit_timeout) {
1978 smb_time_audit_log("lsetxattr", timediff);
1984 static int smb_time_audit_fsetxattr(struct vfs_handle_struct *handle,
1985 struct files_struct *fsp, const char *name,
1986 const void *value, size_t size, int flags)
1993 result = SMB_VFS_NEXT_FSETXATTR(handle, fsp, name, value, size, flags);
1994 timediff = timeval_elapsed(&tv);
1996 if (timediff > audit_timeout) {
1997 smb_time_audit_log("fsetxattr", timediff);
2003 static int smb_time_audit_aio_read(struct vfs_handle_struct *handle,
2004 struct files_struct *fsp,
2005 SMB_STRUCT_AIOCB *aiocb)
2012 result = SMB_VFS_NEXT_AIO_READ(handle, fsp, aiocb);
2013 timediff = timeval_elapsed(&tv);
2015 if (timediff > audit_timeout) {
2016 smb_time_audit_log("aio_read", timediff);
2022 static int smb_time_audit_aio_write(struct vfs_handle_struct *handle,
2023 struct files_struct *fsp,
2024 SMB_STRUCT_AIOCB *aiocb)
2031 result = SMB_VFS_NEXT_AIO_WRITE(handle, fsp, aiocb);
2032 timediff = timeval_elapsed(&tv);
2034 if (timediff > audit_timeout) {
2035 smb_time_audit_log("aio_write", timediff);
2041 static ssize_t smb_time_audit_aio_return(struct vfs_handle_struct *handle,
2042 struct files_struct *fsp,
2043 SMB_STRUCT_AIOCB *aiocb)
2050 result = SMB_VFS_NEXT_AIO_RETURN(handle, fsp, aiocb);
2051 timediff = timeval_elapsed(&tv);
2053 if (timediff > audit_timeout) {
2054 smb_time_audit_log("aio_return", timediff);
2060 static int smb_time_audit_aio_cancel(struct vfs_handle_struct *handle,
2061 struct files_struct *fsp,
2062 SMB_STRUCT_AIOCB *aiocb)
2069 result = SMB_VFS_NEXT_AIO_CANCEL(handle, fsp, aiocb);
2070 timediff = timeval_elapsed(&tv);
2072 if (timediff > audit_timeout) {
2073 smb_time_audit_log("aio_cancel", timediff);
2079 static int smb_time_audit_aio_error(struct vfs_handle_struct *handle,
2080 struct files_struct *fsp,
2081 SMB_STRUCT_AIOCB *aiocb)
2088 result = SMB_VFS_NEXT_AIO_ERROR(handle, fsp, aiocb);
2089 timediff = timeval_elapsed(&tv);
2091 if (timediff > audit_timeout) {
2092 smb_time_audit_log("aio_error", timediff);
2098 static int smb_time_audit_aio_fsync(struct vfs_handle_struct *handle,
2099 struct files_struct *fsp, int op,
2100 SMB_STRUCT_AIOCB *aiocb)
2107 result = SMB_VFS_NEXT_AIO_FSYNC(handle, fsp, op, aiocb);
2108 timediff = timeval_elapsed(&tv);
2110 if (timediff > audit_timeout) {
2111 smb_time_audit_log("aio_fsync", timediff);
2117 static int smb_time_audit_aio_suspend(struct vfs_handle_struct *handle,
2118 struct files_struct *fsp,
2119 const SMB_STRUCT_AIOCB * const aiocb[],
2120 int n, const struct timespec *ts)
2127 result = SMB_VFS_NEXT_AIO_SUSPEND(handle, fsp, aiocb, n, ts);
2128 timediff = timeval_elapsed(&tv);
2130 if (timediff > audit_timeout) {
2131 smb_time_audit_log("aio_suspend", timediff);
2137 static bool smb_time_audit_aio_force(struct vfs_handle_struct *handle,
2138 struct files_struct *fsp)
2145 result = SMB_VFS_NEXT_AIO_FORCE(handle, fsp);
2146 timediff = timeval_elapsed(&tv);
2148 if (timediff > audit_timeout) {
2149 smb_time_audit_log("aio_force", timediff);
2157 /* VFS operations */
2159 static vfs_op_tuple audit_op_tuples[] = {
2161 /* Disk operations */
2163 {SMB_VFS_OP(smb_time_audit_connect), SMB_VFS_OP_CONNECT,
2164 SMB_VFS_LAYER_LOGGER},
2165 {SMB_VFS_OP(smb_time_audit_disconnect), SMB_VFS_OP_DISCONNECT,
2166 SMB_VFS_LAYER_LOGGER},
2167 {SMB_VFS_OP(smb_time_audit_disk_free), SMB_VFS_OP_DISK_FREE,
2168 SMB_VFS_LAYER_LOGGER},
2169 {SMB_VFS_OP(smb_time_audit_get_quota), SMB_VFS_OP_GET_QUOTA,
2170 SMB_VFS_LAYER_LOGGER},
2171 {SMB_VFS_OP(smb_time_audit_set_quota), SMB_VFS_OP_SET_QUOTA,
2172 SMB_VFS_LAYER_LOGGER},
2173 {SMB_VFS_OP(smb_time_audit_get_shadow_copy_data),
2174 SMB_VFS_OP_GET_SHADOW_COPY_DATA,
2175 SMB_VFS_LAYER_LOGGER},
2176 {SMB_VFS_OP(smb_time_audit_statvfs), SMB_VFS_OP_STATVFS,
2177 SMB_VFS_LAYER_LOGGER},
2178 {SMB_VFS_OP(smb_time_audit_fs_capabilities),
2179 SMB_VFS_OP_FS_CAPABILITIES,
2180 SMB_VFS_LAYER_LOGGER},
2182 /* Directory operations */
2184 {SMB_VFS_OP(smb_time_audit_opendir), SMB_VFS_OP_OPENDIR,
2185 SMB_VFS_LAYER_LOGGER},
2186 {SMB_VFS_OP(smb_time_audit_readdir), SMB_VFS_OP_READDIR,
2187 SMB_VFS_LAYER_LOGGER},
2188 {SMB_VFS_OP(smb_time_audit_seekdir), SMB_VFS_OP_SEEKDIR,
2189 SMB_VFS_LAYER_LOGGER},
2190 {SMB_VFS_OP(smb_time_audit_telldir), SMB_VFS_OP_TELLDIR,
2191 SMB_VFS_LAYER_LOGGER},
2192 {SMB_VFS_OP(smb_time_audit_rewinddir), SMB_VFS_OP_REWINDDIR,
2193 SMB_VFS_LAYER_LOGGER},
2194 {SMB_VFS_OP(smb_time_audit_mkdir), SMB_VFS_OP_MKDIR,
2195 SMB_VFS_LAYER_LOGGER},
2196 {SMB_VFS_OP(smb_time_audit_rmdir), SMB_VFS_OP_RMDIR,
2197 SMB_VFS_LAYER_LOGGER},
2198 {SMB_VFS_OP(smb_time_audit_closedir), SMB_VFS_OP_CLOSEDIR,
2199 SMB_VFS_LAYER_LOGGER},
2200 {SMB_VFS_OP(smb_time_audit_init_search_op), SMB_VFS_OP_INIT_SEARCH_OP,
2201 SMB_VFS_LAYER_LOGGER},
2203 /* File operations */
2205 {SMB_VFS_OP(smb_time_audit_open), SMB_VFS_OP_OPEN,
2206 SMB_VFS_LAYER_LOGGER},
2207 {SMB_VFS_OP(smb_time_audit_create_file),SMB_VFS_OP_CREATE_FILE,
2208 SMB_VFS_LAYER_LOGGER},
2209 {SMB_VFS_OP(smb_time_audit_close), SMB_VFS_OP_CLOSE,
2210 SMB_VFS_LAYER_LOGGER},
2211 {SMB_VFS_OP(smb_time_audit_read), SMB_VFS_OP_READ,
2212 SMB_VFS_LAYER_LOGGER},
2213 {SMB_VFS_OP(smb_time_audit_pread), SMB_VFS_OP_PREAD,
2214 SMB_VFS_LAYER_LOGGER},
2215 {SMB_VFS_OP(smb_time_audit_write), SMB_VFS_OP_WRITE,
2216 SMB_VFS_LAYER_LOGGER},
2217 {SMB_VFS_OP(smb_time_audit_pwrite), SMB_VFS_OP_PWRITE,
2218 SMB_VFS_LAYER_LOGGER},
2219 {SMB_VFS_OP(smb_time_audit_lseek), SMB_VFS_OP_LSEEK,
2220 SMB_VFS_LAYER_LOGGER},
2221 {SMB_VFS_OP(smb_time_audit_sendfile), SMB_VFS_OP_SENDFILE,
2222 SMB_VFS_LAYER_LOGGER},
2223 {SMB_VFS_OP(smb_time_audit_recvfile), SMB_VFS_OP_RECVFILE,
2224 SMB_VFS_LAYER_LOGGER},
2225 {SMB_VFS_OP(smb_time_audit_rename), SMB_VFS_OP_RENAME,
2226 SMB_VFS_LAYER_LOGGER},
2227 {SMB_VFS_OP(smb_time_audit_fsync), SMB_VFS_OP_FSYNC,
2228 SMB_VFS_LAYER_LOGGER},
2229 {SMB_VFS_OP(smb_time_audit_stat), SMB_VFS_OP_STAT,
2230 SMB_VFS_LAYER_LOGGER},
2231 {SMB_VFS_OP(smb_time_audit_fstat), SMB_VFS_OP_FSTAT,
2232 SMB_VFS_LAYER_LOGGER},
2233 {SMB_VFS_OP(smb_time_audit_lstat), SMB_VFS_OP_LSTAT,
2234 SMB_VFS_LAYER_LOGGER},
2235 {SMB_VFS_OP(smb_time_audit_get_alloc_size),
2236 SMB_VFS_OP_GET_ALLOC_SIZE,
2237 SMB_VFS_LAYER_LOGGER},
2238 {SMB_VFS_OP(smb_time_audit_unlink), SMB_VFS_OP_UNLINK,
2239 SMB_VFS_LAYER_LOGGER},
2240 {SMB_VFS_OP(smb_time_audit_chmod), SMB_VFS_OP_CHMOD,
2241 SMB_VFS_LAYER_LOGGER},
2242 {SMB_VFS_OP(smb_time_audit_fchmod), SMB_VFS_OP_FCHMOD,
2243 SMB_VFS_LAYER_LOGGER},
2244 {SMB_VFS_OP(smb_time_audit_chown), SMB_VFS_OP_CHOWN,
2245 SMB_VFS_LAYER_LOGGER},
2246 {SMB_VFS_OP(smb_time_audit_fchown), SMB_VFS_OP_FCHOWN,
2247 SMB_VFS_LAYER_LOGGER},
2248 {SMB_VFS_OP(smb_time_audit_lchown), SMB_VFS_OP_LCHOWN,
2249 SMB_VFS_LAYER_LOGGER},
2250 {SMB_VFS_OP(smb_time_audit_chdir), SMB_VFS_OP_CHDIR,
2251 SMB_VFS_LAYER_LOGGER},
2252 {SMB_VFS_OP(smb_time_audit_getwd), SMB_VFS_OP_GETWD,
2253 SMB_VFS_LAYER_LOGGER},
2254 {SMB_VFS_OP(smb_time_audit_ntimes), SMB_VFS_OP_NTIMES,
2255 SMB_VFS_LAYER_LOGGER},
2256 {SMB_VFS_OP(smb_time_audit_ftruncate), SMB_VFS_OP_FTRUNCATE,
2257 SMB_VFS_LAYER_LOGGER},
2258 {SMB_VFS_OP(smb_time_audit_lock), SMB_VFS_OP_LOCK,
2259 SMB_VFS_LAYER_LOGGER},
2260 {SMB_VFS_OP(smb_time_audit_kernel_flock),
2261 SMB_VFS_OP_KERNEL_FLOCK,
2262 SMB_VFS_LAYER_LOGGER},
2263 {SMB_VFS_OP(smb_time_audit_linux_setlease),
2264 SMB_VFS_OP_LINUX_SETLEASE,
2265 SMB_VFS_LAYER_LOGGER},
2266 {SMB_VFS_OP(smb_time_audit_getlock), SMB_VFS_OP_GETLOCK,
2267 SMB_VFS_LAYER_LOGGER},
2268 {SMB_VFS_OP(smb_time_audit_symlink), SMB_VFS_OP_SYMLINK,
2269 SMB_VFS_LAYER_LOGGER},
2270 {SMB_VFS_OP(smb_time_audit_readlink), SMB_VFS_OP_READLINK,
2271 SMB_VFS_LAYER_LOGGER},
2272 {SMB_VFS_OP(smb_time_audit_link), SMB_VFS_OP_LINK,
2273 SMB_VFS_LAYER_LOGGER},
2274 {SMB_VFS_OP(smb_time_audit_mknod), SMB_VFS_OP_MKNOD,
2275 SMB_VFS_LAYER_LOGGER},
2276 {SMB_VFS_OP(smb_time_audit_realpath), SMB_VFS_OP_REALPATH,
2277 SMB_VFS_LAYER_LOGGER},
2278 {SMB_VFS_OP(smb_time_audit_notify_watch),SMB_VFS_OP_NOTIFY_WATCH,
2279 SMB_VFS_LAYER_LOGGER},
2280 {SMB_VFS_OP(smb_time_audit_chflags), SMB_VFS_OP_CHFLAGS,
2281 SMB_VFS_LAYER_LOGGER},
2282 {SMB_VFS_OP(smb_time_audit_file_id_create),
2283 SMB_VFS_OP_FILE_ID_CREATE,
2284 SMB_VFS_LAYER_LOGGER},
2285 {SMB_VFS_OP(smb_time_audit_streaminfo), SMB_VFS_OP_STREAMINFO,
2286 SMB_VFS_LAYER_LOGGER},
2287 {SMB_VFS_OP(smb_time_audit_get_real_filename),
2288 SMB_VFS_OP_GET_REAL_FILENAME,
2289 SMB_VFS_LAYER_LOGGER},
2290 {SMB_VFS_OP(smb_time_audit_connectpath), SMB_VFS_OP_CONNECTPATH,
2291 SMB_VFS_LAYER_LOGGER},
2292 {SMB_VFS_OP(smb_time_audit_brl_lock_windows),
2293 SMB_VFS_OP_BRL_LOCK_WINDOWS,
2294 SMB_VFS_LAYER_LOGGER},
2295 {SMB_VFS_OP(smb_time_audit_brl_unlock_windows),
2296 SMB_VFS_OP_BRL_UNLOCK_WINDOWS,
2297 SMB_VFS_LAYER_LOGGER},
2298 {SMB_VFS_OP(smb_time_audit_brl_cancel_windows),
2299 SMB_VFS_OP_BRL_CANCEL_WINDOWS,
2300 SMB_VFS_LAYER_LOGGER},
2301 {SMB_VFS_OP(smb_time_audit_strict_lock), SMB_VFS_OP_STRICT_LOCK,
2302 SMB_VFS_LAYER_LOGGER},
2303 {SMB_VFS_OP(smb_time_audit_strict_unlock), SMB_VFS_OP_STRICT_UNLOCK,
2304 SMB_VFS_LAYER_LOGGER},
2306 /* NT ACL operations. */
2308 {SMB_VFS_OP(smb_time_audit_fget_nt_acl), SMB_VFS_OP_FGET_NT_ACL,
2309 SMB_VFS_LAYER_LOGGER},
2310 {SMB_VFS_OP(smb_time_audit_get_nt_acl), SMB_VFS_OP_GET_NT_ACL,
2311 SMB_VFS_LAYER_LOGGER},
2312 {SMB_VFS_OP(smb_time_audit_fset_nt_acl), SMB_VFS_OP_FSET_NT_ACL,
2313 SMB_VFS_LAYER_LOGGER},
2315 /* POSIX ACL operations. */
2317 {SMB_VFS_OP(smb_time_audit_chmod_acl), SMB_VFS_OP_CHMOD_ACL,
2318 SMB_VFS_LAYER_LOGGER},
2319 {SMB_VFS_OP(smb_time_audit_fchmod_acl), SMB_VFS_OP_FCHMOD_ACL,
2320 SMB_VFS_LAYER_LOGGER},
2321 {SMB_VFS_OP(smb_time_audit_sys_acl_get_entry),
2322 SMB_VFS_OP_SYS_ACL_GET_ENTRY,
2323 SMB_VFS_LAYER_LOGGER},
2324 {SMB_VFS_OP(smb_time_audit_sys_acl_get_tag_type),
2325 SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE,
2326 SMB_VFS_LAYER_LOGGER},
2327 {SMB_VFS_OP(smb_time_audit_sys_acl_get_permset),
2328 SMB_VFS_OP_SYS_ACL_GET_PERMSET,
2329 SMB_VFS_LAYER_LOGGER},
2330 {SMB_VFS_OP(smb_time_audit_sys_acl_get_qualifier),
2331 SMB_VFS_OP_SYS_ACL_GET_QUALIFIER,
2332 SMB_VFS_LAYER_LOGGER},
2333 {SMB_VFS_OP(smb_time_audit_sys_acl_get_file),
2334 SMB_VFS_OP_SYS_ACL_GET_FILE,
2335 SMB_VFS_LAYER_LOGGER},
2336 {SMB_VFS_OP(smb_time_audit_sys_acl_get_fd),
2337 SMB_VFS_OP_SYS_ACL_GET_FD,
2338 SMB_VFS_LAYER_LOGGER},
2339 {SMB_VFS_OP(smb_time_audit_sys_acl_clear_perms),
2340 SMB_VFS_OP_SYS_ACL_CLEAR_PERMS,
2341 SMB_VFS_LAYER_LOGGER},
2342 {SMB_VFS_OP(smb_time_audit_sys_acl_add_perm),
2343 SMB_VFS_OP_SYS_ACL_ADD_PERM,
2344 SMB_VFS_LAYER_LOGGER},
2345 {SMB_VFS_OP(smb_time_audit_sys_acl_to_text),
2346 SMB_VFS_OP_SYS_ACL_TO_TEXT,
2347 SMB_VFS_LAYER_LOGGER},
2348 {SMB_VFS_OP(smb_time_audit_sys_acl_init),
2349 SMB_VFS_OP_SYS_ACL_INIT,
2350 SMB_VFS_LAYER_LOGGER},
2351 {SMB_VFS_OP(smb_time_audit_sys_acl_create_entry),
2352 SMB_VFS_OP_SYS_ACL_CREATE_ENTRY,
2353 SMB_VFS_LAYER_LOGGER},
2354 {SMB_VFS_OP(smb_time_audit_sys_acl_set_tag_type),
2355 SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE,
2356 SMB_VFS_LAYER_LOGGER},
2357 {SMB_VFS_OP(smb_time_audit_sys_acl_set_qualifier),
2358 SMB_VFS_OP_SYS_ACL_SET_QUALIFIER,
2359 SMB_VFS_LAYER_LOGGER},
2360 {SMB_VFS_OP(smb_time_audit_sys_acl_set_permset),
2361 SMB_VFS_OP_SYS_ACL_SET_PERMSET,
2362 SMB_VFS_LAYER_LOGGER},
2363 {SMB_VFS_OP(smb_time_audit_sys_acl_valid),
2364 SMB_VFS_OP_SYS_ACL_VALID,
2365 SMB_VFS_LAYER_LOGGER},
2366 {SMB_VFS_OP(smb_time_audit_sys_acl_set_file),
2367 SMB_VFS_OP_SYS_ACL_SET_FILE,
2368 SMB_VFS_LAYER_LOGGER},
2369 {SMB_VFS_OP(smb_time_audit_sys_acl_set_fd),
2370 SMB_VFS_OP_SYS_ACL_SET_FD,
2371 SMB_VFS_LAYER_LOGGER},
2372 {SMB_VFS_OP(smb_time_audit_sys_acl_delete_def_file),
2373 SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE,
2374 SMB_VFS_LAYER_LOGGER},
2375 {SMB_VFS_OP(smb_time_audit_sys_acl_get_perm),
2376 SMB_VFS_OP_SYS_ACL_GET_PERM,
2377 SMB_VFS_LAYER_LOGGER},
2378 {SMB_VFS_OP(smb_time_audit_sys_acl_free_text),
2379 SMB_VFS_OP_SYS_ACL_FREE_TEXT,
2380 SMB_VFS_LAYER_LOGGER},
2381 {SMB_VFS_OP(smb_time_audit_sys_acl_free_acl),
2382 SMB_VFS_OP_SYS_ACL_FREE_ACL,
2383 SMB_VFS_LAYER_LOGGER},
2384 {SMB_VFS_OP(smb_time_audit_sys_acl_free_qualifier),
2385 SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER,
2386 SMB_VFS_LAYER_LOGGER},
2388 /* EA operations. */
2390 {SMB_VFS_OP(smb_time_audit_getxattr), SMB_VFS_OP_GETXATTR,
2391 SMB_VFS_LAYER_LOGGER},
2392 {SMB_VFS_OP(smb_time_audit_lgetxattr), SMB_VFS_OP_LGETXATTR,
2393 SMB_VFS_LAYER_LOGGER},
2394 {SMB_VFS_OP(smb_time_audit_fgetxattr), SMB_VFS_OP_FGETXATTR,
2395 SMB_VFS_LAYER_LOGGER},
2396 {SMB_VFS_OP(smb_time_audit_listxattr), SMB_VFS_OP_LISTXATTR,
2397 SMB_VFS_LAYER_LOGGER},
2398 {SMB_VFS_OP(smb_time_audit_llistxattr), SMB_VFS_OP_LLISTXATTR,
2399 SMB_VFS_LAYER_LOGGER},
2400 {SMB_VFS_OP(smb_time_audit_flistxattr), SMB_VFS_OP_FLISTXATTR,
2401 SMB_VFS_LAYER_LOGGER},
2402 {SMB_VFS_OP(smb_time_audit_removexattr),
2403 SMB_VFS_OP_REMOVEXATTR,
2404 SMB_VFS_LAYER_LOGGER},
2405 {SMB_VFS_OP(smb_time_audit_lremovexattr),
2406 SMB_VFS_OP_LREMOVEXATTR,
2407 SMB_VFS_LAYER_LOGGER},
2408 {SMB_VFS_OP(smb_time_audit_fremovexattr),
2409 SMB_VFS_OP_FREMOVEXATTR,
2410 SMB_VFS_LAYER_LOGGER},
2411 {SMB_VFS_OP(smb_time_audit_setxattr), SMB_VFS_OP_SETXATTR,
2412 SMB_VFS_LAYER_LOGGER},
2413 {SMB_VFS_OP(smb_time_audit_lsetxattr), SMB_VFS_OP_LSETXATTR,
2414 SMB_VFS_LAYER_LOGGER},
2415 {SMB_VFS_OP(smb_time_audit_fsetxattr), SMB_VFS_OP_FSETXATTR,
2416 SMB_VFS_LAYER_LOGGER},
2418 {SMB_VFS_OP(smb_time_audit_aio_read), SMB_VFS_OP_AIO_READ,
2419 SMB_VFS_LAYER_LOGGER},
2420 {SMB_VFS_OP(smb_time_audit_aio_write), SMB_VFS_OP_AIO_WRITE,
2421 SMB_VFS_LAYER_LOGGER},
2422 {SMB_VFS_OP(smb_time_audit_aio_return), SMB_VFS_OP_AIO_RETURN,
2423 SMB_VFS_LAYER_LOGGER},
2424 {SMB_VFS_OP(smb_time_audit_aio_cancel), SMB_VFS_OP_AIO_CANCEL,
2425 SMB_VFS_LAYER_LOGGER},
2426 {SMB_VFS_OP(smb_time_audit_aio_error), SMB_VFS_OP_AIO_ERROR,
2427 SMB_VFS_LAYER_LOGGER},
2428 {SMB_VFS_OP(smb_time_audit_aio_fsync), SMB_VFS_OP_AIO_FSYNC,
2429 SMB_VFS_LAYER_LOGGER},
2430 {SMB_VFS_OP(smb_time_audit_aio_suspend),SMB_VFS_OP_AIO_SUSPEND,
2431 SMB_VFS_LAYER_LOGGER},
2432 {SMB_VFS_OP(smb_time_audit_aio_force),SMB_VFS_OP_AIO_FORCE,
2433 SMB_VFS_LAYER_LOGGER},
2435 /* Finish VFS operations definition */
2437 {SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP,
2442 NTSTATUS vfs_time_audit_init(void);
2443 NTSTATUS vfs_time_audit_init(void)
2445 audit_timeout = (double)lp_parm_int(-1, "time_audit", "timeout",
2447 return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "time_audit",