X-Git-Url: http://git.samba.org/?a=blobdiff_plain;f=source3%2Fmodules%2Fvfs_time_audit.c;h=a9289536e1c1b38737c909ea71c8eecd4bde43fc;hb=26b110300882210f9eac074412a20c3f1f38fece;hp=84e41753ed9746d32fd56ad70b0b6a6350cb40f5;hpb=fa203f4541190b01b1f82f1ff9a47c31152c2412;p=mat%2Fsamba.git diff --git a/source3/modules/vfs_time_audit.c b/source3/modules/vfs_time_audit.c index 84e41753ed..a9289536e1 100644 --- a/source3/modules/vfs_time_audit.c +++ b/source3/modules/vfs_time_audit.c @@ -26,18 +26,98 @@ #include "includes.h" +#include "smbd/smbd.h" +#include "ntioctl.h" +#include "lib/util/tevent_unix.h" +#include "lib/util/tevent_ntstatus.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_VFS static double audit_timeout; -static void smb_time_audit_log(const char *syscallname, double elapsed) +static void smb_time_audit_log_msg(const char *syscallname, double elapsed, + const char *msg) { - DEBUG(0, ("WARNING: System call \"%s\" took unexpectedly long " - "(%.2f seconds) -- Validate that file and storage " + DEBUG(0, ("WARNING: VFS call \"%s\" took unexpectedly long " + "(%.2f seconds) %s%s-- Validate that file and storage " "subsystems are operating normally\n", syscallname, - elapsed)); + elapsed, (msg != NULL) ? msg : "", + (msg != NULL) ? " " : "")); +} + +static void smb_time_audit_log(const char *syscallname, double elapsed) +{ + smb_time_audit_log_msg(syscallname, elapsed, NULL); +} + +static void smb_time_audit_log_fsp(const char *syscallname, double elapsed, + const struct files_struct *fsp) +{ + char *base_name = NULL; + char *connectpath = NULL; + char *msg = NULL; + + if (fsp == NULL) { + smb_time_audit_log(syscallname, elapsed); + return; + } + if (fsp->conn) + connectpath = fsp->conn->connectpath; + if (fsp->fsp_name) + base_name = fsp->fsp_name->base_name; + + if (connectpath != NULL && base_name != NULL) { + msg = talloc_asprintf(talloc_tos(), "filename = \"%s/%s\"", + connectpath, base_name); + } else if (connectpath != NULL && base_name == NULL) { + msg = talloc_asprintf(talloc_tos(), "connectpath = \"%s\", " + "base_name = ", + connectpath); + } else if (connectpath == NULL && base_name != NULL) { + msg = talloc_asprintf(talloc_tos(), "connectpath = , " + "base_name = \"%s\"", + base_name); + } else { /* connectpath == NULL && base_name == NULL */ + msg = talloc_asprintf(talloc_tos(), "connectpath = , " + "base_name = "); + } + smb_time_audit_log_msg(syscallname, elapsed, msg); + TALLOC_FREE(msg); +} + +static void smb_time_audit_log_fname(const char *syscallname, double elapsed, + const char *fname) +{ + char cwd[PATH_MAX]; + char *msg = NULL; + + if (getcwd(cwd, sizeof(cwd)) == NULL) { + snprintf(cwd, sizeof(cwd), "", errno); + } + if (fname != NULL) { + msg = talloc_asprintf(talloc_tos(), + "cwd = \"%s\", filename = \"%s\"", + cwd, fname); + } else { + msg = talloc_asprintf(talloc_tos(), + "cwd = \"%s\", filename = ", + cwd); + } + smb_time_audit_log_msg(syscallname, elapsed, msg); + TALLOC_FREE(msg); +} + +static void smb_time_audit_log_smb_fname(const char *syscallname, double elapsed, + const struct smb_filename *smb_fname) +{ + if (smb_fname != NULL) { + smb_time_audit_log_fname(syscallname, elapsed, + smb_fname->base_name); + } else { + smb_time_audit_log_fname(syscallname, elapsed, + "smb_fname = "); + } } static int smb_time_audit_connect(vfs_handle_struct *handle, @@ -56,7 +136,7 @@ static int smb_time_audit_connect(vfs_handle_struct *handle, clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("connect", timediff); + smb_time_audit_log_msg("connect", timediff, user); } return result; } @@ -74,8 +154,6 @@ static void smb_time_audit_disconnect(vfs_handle_struct *handle) if (timediff > audit_timeout) { smb_time_audit_log("disconnect", timediff); } - - return; } static uint64_t smb_time_audit_disk_free(vfs_handle_struct *handle, @@ -95,7 +173,7 @@ static uint64_t smb_time_audit_disk_free(vfs_handle_struct *handle, /* Don't have a reasonable notion of failure here */ if (timediff > audit_timeout) { - smb_time_audit_log("disk_free", timediff); + smb_time_audit_log_fname("disk_free", timediff, path); } return result; @@ -142,7 +220,7 @@ static int smb_time_audit_set_quota(struct vfs_handle_struct *handle, static int smb_time_audit_get_shadow_copy_data(struct vfs_handle_struct *handle, struct files_struct *fsp, - SHADOW_COPY_DATA *shadow_copy_data, + struct shadow_copy_data *shadow_copy_data, bool labels) { int result; @@ -156,7 +234,7 @@ static int smb_time_audit_get_shadow_copy_data(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("get_shadow_copy_data", timediff); + smb_time_audit_log_fsp("get_shadow_copy_data", timediff, fsp); } return result; @@ -176,7 +254,7 @@ static int smb_time_audit_statvfs(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("statvfs", timediff); + smb_time_audit_log_fname("statvfs", timediff, path); } return result; @@ -201,11 +279,11 @@ static uint32_t smb_time_audit_fs_capabilities(struct vfs_handle_struct *handle, return result; } -static SMB_STRUCT_DIR *smb_time_audit_opendir(vfs_handle_struct *handle, +static DIR *smb_time_audit_opendir(vfs_handle_struct *handle, const char *fname, const char *mask, uint32 attr) { - SMB_STRUCT_DIR *result; + DIR *result; struct timespec ts1,ts2; double timediff; @@ -215,17 +293,37 @@ static SMB_STRUCT_DIR *smb_time_audit_opendir(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("opendir", timediff); + smb_time_audit_log_fname("opendir", timediff, fname); } return result; } -static SMB_STRUCT_DIRENT *smb_time_audit_readdir(vfs_handle_struct *handle, - SMB_STRUCT_DIR *dirp, +static DIR *smb_time_audit_fdopendir(vfs_handle_struct *handle, + files_struct *fsp, + const char *mask, uint32 attr) +{ + DIR *result; + struct timespec ts1,ts2; + double timediff; + + clock_gettime_mono(&ts1); + result = SMB_VFS_NEXT_FDOPENDIR(handle, fsp, mask, attr); + clock_gettime_mono(&ts2); + timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; + + if (timediff > audit_timeout) { + smb_time_audit_log_fsp("fdopendir", timediff, fsp); + } + + return result; +} + +static struct dirent *smb_time_audit_readdir(vfs_handle_struct *handle, + DIR *dirp, SMB_STRUCT_STAT *sbuf) { - SMB_STRUCT_DIRENT *result; + struct dirent *result; struct timespec ts1,ts2; double timediff; @@ -242,7 +340,7 @@ static SMB_STRUCT_DIRENT *smb_time_audit_readdir(vfs_handle_struct *handle, } static void smb_time_audit_seekdir(vfs_handle_struct *handle, - SMB_STRUCT_DIR *dirp, long offset) + DIR *dirp, long offset) { struct timespec ts1,ts2; double timediff; @@ -256,11 +354,10 @@ static void smb_time_audit_seekdir(vfs_handle_struct *handle, smb_time_audit_log("seekdir", timediff); } - return; } static long smb_time_audit_telldir(vfs_handle_struct *handle, - SMB_STRUCT_DIR *dirp) + DIR *dirp) { long result; struct timespec ts1,ts2; @@ -279,7 +376,7 @@ static long smb_time_audit_telldir(vfs_handle_struct *handle, } static void smb_time_audit_rewinddir(vfs_handle_struct *handle, - SMB_STRUCT_DIR *dirp) + DIR *dirp) { struct timespec ts1,ts2; double timediff; @@ -293,7 +390,6 @@ static void smb_time_audit_rewinddir(vfs_handle_struct *handle, smb_time_audit_log("rewinddir", timediff); } - return; } static int smb_time_audit_mkdir(vfs_handle_struct *handle, @@ -309,7 +405,7 @@ static int smb_time_audit_mkdir(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("mkdir", timediff); + smb_time_audit_log_fname("mkdir", timediff, path); } return result; @@ -328,14 +424,14 @@ static int smb_time_audit_rmdir(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("rmdir", timediff); + smb_time_audit_log_fname("rmdir", timediff, path); } return result; } static int smb_time_audit_closedir(vfs_handle_struct *handle, - SMB_STRUCT_DIR *dirp) + DIR *dirp) { int result; struct timespec ts1,ts2; @@ -354,7 +450,7 @@ static int smb_time_audit_closedir(vfs_handle_struct *handle, } static void smb_time_audit_init_search_op(vfs_handle_struct *handle, - SMB_STRUCT_DIR *dirp) + DIR *dirp) { struct timespec ts1,ts2; double timediff; @@ -367,7 +463,6 @@ static void smb_time_audit_init_search_op(vfs_handle_struct *handle, if (timediff > audit_timeout) { smb_time_audit_log("init_search_op", timediff); } - return; } static int smb_time_audit_open(vfs_handle_struct *handle, @@ -385,7 +480,7 @@ static int smb_time_audit_open(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("open", timediff); + smb_time_audit_log_fsp("open", timediff, fsp); } return result; @@ -434,7 +529,12 @@ static NTSTATUS smb_time_audit_create_file(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("create_file", timediff); + /* + * can't use result_fsp this time, may have + * invalid content causing smbd crash + */ + smb_time_audit_log_smb_fname("create_file", timediff, + fname); } return result; @@ -452,7 +552,7 @@ static int smb_time_audit_close(vfs_handle_struct *handle, files_struct *fsp) timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("close", timediff); + smb_time_audit_log_fsp("close", timediff, fsp); } return result; @@ -471,7 +571,7 @@ static ssize_t smb_time_audit_read(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("read", timediff); + smb_time_audit_log_fsp("read", timediff, fsp); } return result; @@ -479,7 +579,7 @@ static ssize_t smb_time_audit_read(vfs_handle_struct *handle, static ssize_t smb_time_audit_pread(vfs_handle_struct *handle, files_struct *fsp, - void *data, size_t n, SMB_OFF_T offset) + void *data, size_t n, off_t offset) { ssize_t result; struct timespec ts1,ts2; @@ -491,12 +591,79 @@ static ssize_t smb_time_audit_pread(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("pread", timediff); + smb_time_audit_log_fsp("pread", timediff, fsp); } return result; } +struct smb_time_audit_pread_state { + struct files_struct *fsp; + struct timespec ts1; + ssize_t ret; + int err; +}; + +static void smb_time_audit_pread_done(struct tevent_req *subreq); + +static struct tevent_req *smb_time_audit_pread_send( + struct vfs_handle_struct *handle, TALLOC_CTX *mem_ctx, + struct tevent_context *ev, struct files_struct *fsp, + void *data, size_t n, off_t offset) +{ + struct tevent_req *req, *subreq; + struct smb_time_audit_pread_state *state; + + req = tevent_req_create(mem_ctx, &state, + struct smb_time_audit_pread_state); + if (req == NULL) { + return NULL; + } + clock_gettime_mono(&state->ts1); + state->fsp = fsp; + + subreq = SMB_VFS_NEXT_PREAD_SEND(state, ev, handle, fsp, data, + n, offset); + if (tevent_req_nomem(subreq, req)) { + return tevent_req_post(req, ev); + } + tevent_req_set_callback(subreq, smb_time_audit_pread_done, req); + return req; +} + +static void smb_time_audit_pread_done(struct tevent_req *subreq) +{ + struct tevent_req *req = tevent_req_callback_data( + subreq, struct tevent_req); + struct smb_time_audit_pread_state *state = tevent_req_data( + req, struct smb_time_audit_pread_state); + + state->ret = SMB_VFS_PREAD_RECV(subreq, &state->err); + TALLOC_FREE(subreq); + tevent_req_done(req); +} + +static ssize_t smb_time_audit_pread_recv(struct tevent_req *req, int *err) +{ + struct smb_time_audit_pread_state *state = tevent_req_data( + req, struct smb_time_audit_pread_state); + struct timespec ts2; + double timediff; + + clock_gettime_mono(&ts2); + timediff = nsec_time_diff(&ts2,&state->ts1)*1.0e-9; + + if (timediff > audit_timeout) { + smb_time_audit_log_fsp("pread", timediff, state->fsp); + } + + if (tevent_req_is_unix_error(req, err)) { + return -1; + } + *err = state->err; + return state->ret; +} + static ssize_t smb_time_audit_write(vfs_handle_struct *handle, files_struct *fsp, const void *data, size_t n) @@ -511,7 +678,7 @@ static ssize_t smb_time_audit_write(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("write", timediff); + smb_time_audit_log_fsp("write", timediff, fsp); } return result; @@ -520,7 +687,7 @@ static ssize_t smb_time_audit_write(vfs_handle_struct *handle, static ssize_t smb_time_audit_pwrite(vfs_handle_struct *handle, files_struct *fsp, const void *data, size_t n, - SMB_OFF_T offset) + off_t offset) { ssize_t result; struct timespec ts1,ts2; @@ -532,17 +699,84 @@ static ssize_t smb_time_audit_pwrite(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("pwrite", timediff); + smb_time_audit_log_fsp("pwrite", timediff, fsp); } return result; } -static SMB_OFF_T smb_time_audit_lseek(vfs_handle_struct *handle, +struct smb_time_audit_pwrite_state { + struct files_struct *fsp; + struct timespec ts1; + ssize_t ret; + int err; +}; + +static void smb_time_audit_pwrite_done(struct tevent_req *subreq); + +static struct tevent_req *smb_time_audit_pwrite_send( + struct vfs_handle_struct *handle, TALLOC_CTX *mem_ctx, + struct tevent_context *ev, struct files_struct *fsp, + const void *data, size_t n, off_t offset) +{ + struct tevent_req *req, *subreq; + struct smb_time_audit_pwrite_state *state; + + req = tevent_req_create(mem_ctx, &state, + struct smb_time_audit_pwrite_state); + if (req == NULL) { + return NULL; + } + clock_gettime_mono(&state->ts1); + state->fsp = fsp; + + subreq = SMB_VFS_NEXT_PWRITE_SEND(state, ev, handle, fsp, data, + n, offset); + if (tevent_req_nomem(subreq, req)) { + return tevent_req_post(req, ev); + } + tevent_req_set_callback(subreq, smb_time_audit_pwrite_done, req); + return req; +} + +static void smb_time_audit_pwrite_done(struct tevent_req *subreq) +{ + struct tevent_req *req = tevent_req_callback_data( + subreq, struct tevent_req); + struct smb_time_audit_pwrite_state *state = tevent_req_data( + req, struct smb_time_audit_pwrite_state); + + state->ret = SMB_VFS_PWRITE_RECV(subreq, &state->err); + TALLOC_FREE(subreq); + tevent_req_done(req); +} + +static ssize_t smb_time_audit_pwrite_recv(struct tevent_req *req, int *err) +{ + struct smb_time_audit_pwrite_state *state = tevent_req_data( + req, struct smb_time_audit_pwrite_state); + struct timespec ts2; + double timediff; + + clock_gettime_mono(&ts2); + timediff = nsec_time_diff(&ts2,&state->ts1)*1.0e-9; + + if (timediff > audit_timeout) { + smb_time_audit_log_fsp("pwrite", timediff, state->fsp); + } + + if (tevent_req_is_unix_error(req, err)) { + return -1; + } + *err = state->err; + return state->ret; +} + +static off_t smb_time_audit_lseek(vfs_handle_struct *handle, files_struct *fsp, - SMB_OFF_T offset, int whence) + off_t offset, int whence) { - ssize_t result; + off_t result; struct timespec ts1,ts2; double timediff; @@ -552,7 +786,7 @@ static SMB_OFF_T smb_time_audit_lseek(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("lseek", timediff); + smb_time_audit_log_fsp("lseek", timediff, fsp); } return result; @@ -560,7 +794,7 @@ static SMB_OFF_T smb_time_audit_lseek(vfs_handle_struct *handle, static ssize_t smb_time_audit_sendfile(vfs_handle_struct *handle, int tofd, files_struct *fromfsp, - const DATA_BLOB *hdr, SMB_OFF_T offset, + const DATA_BLOB *hdr, off_t offset, size_t n) { ssize_t result; @@ -573,7 +807,7 @@ static ssize_t smb_time_audit_sendfile(vfs_handle_struct *handle, int tofd, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("sendfile", timediff); + smb_time_audit_log_fsp("sendfile", timediff, fromfsp); } return result; @@ -581,7 +815,7 @@ static ssize_t smb_time_audit_sendfile(vfs_handle_struct *handle, int tofd, static ssize_t smb_time_audit_recvfile(vfs_handle_struct *handle, int fromfd, files_struct *tofsp, - SMB_OFF_T offset, + off_t offset, size_t n) { ssize_t result; @@ -594,7 +828,7 @@ static ssize_t smb_time_audit_recvfile(vfs_handle_struct *handle, int fromfd, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("recvfile", timediff); + smb_time_audit_log_fsp("recvfile", timediff, tofsp); } return result; @@ -614,7 +848,7 @@ static int smb_time_audit_rename(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("rename", timediff); + smb_time_audit_log_smb_fname("rename", timediff, newname); } return result; @@ -632,12 +866,77 @@ static int smb_time_audit_fsync(vfs_handle_struct *handle, files_struct *fsp) timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("fsync", timediff); + smb_time_audit_log_fsp("fsync", timediff, fsp); } return result; } +struct smb_time_audit_fsync_state { + struct files_struct *fsp; + struct timespec ts1; + int ret; + int err; +}; + +static void smb_time_audit_fsync_done(struct tevent_req *subreq); + +static struct tevent_req *smb_time_audit_fsync_send( + struct vfs_handle_struct *handle, TALLOC_CTX *mem_ctx, + struct tevent_context *ev, struct files_struct *fsp) +{ + struct tevent_req *req, *subreq; + struct smb_time_audit_fsync_state *state; + + req = tevent_req_create(mem_ctx, &state, + struct smb_time_audit_fsync_state); + if (req == NULL) { + return NULL; + } + clock_gettime_mono(&state->ts1); + state->fsp = fsp; + + subreq = SMB_VFS_NEXT_FSYNC_SEND(state, ev, handle, fsp); + if (tevent_req_nomem(subreq, req)) { + return tevent_req_post(req, ev); + } + tevent_req_set_callback(subreq, smb_time_audit_fsync_done, req); + return req; +} + +static void smb_time_audit_fsync_done(struct tevent_req *subreq) +{ + struct tevent_req *req = tevent_req_callback_data( + subreq, struct tevent_req); + struct smb_time_audit_fsync_state *state = tevent_req_data( + req, struct smb_time_audit_fsync_state); + + state->ret = SMB_VFS_FSYNC_RECV(subreq, &state->err); + TALLOC_FREE(subreq); + tevent_req_done(req); +} + +static int smb_time_audit_fsync_recv(struct tevent_req *req, int *err) +{ + struct smb_time_audit_fsync_state *state = tevent_req_data( + req, struct smb_time_audit_fsync_state); + struct timespec ts2; + double timediff; + + clock_gettime_mono(&ts2); + timediff = nsec_time_diff(&ts2,&state->ts1)*1.0e-9; + + if (timediff > audit_timeout) { + smb_time_audit_log_fsp("fsync", timediff, state->fsp); + } + + if (tevent_req_is_unix_error(req, err)) { + return -1; + } + *err = state->err; + return state->ret; +} + static int smb_time_audit_stat(vfs_handle_struct *handle, struct smb_filename *fname) { @@ -651,7 +950,7 @@ static int smb_time_audit_stat(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("stat", timediff); + smb_time_audit_log_smb_fname("stat", timediff, fname); } return result; @@ -670,7 +969,7 @@ static int smb_time_audit_fstat(vfs_handle_struct *handle, files_struct *fsp, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("fstat", timediff); + smb_time_audit_log_fsp("fstat", timediff, fsp); } return result; @@ -689,7 +988,7 @@ static int smb_time_audit_lstat(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("lstat", timediff); + smb_time_audit_log_smb_fname("lstat", timediff, path); } return result; @@ -699,7 +998,7 @@ static uint64_t smb_time_audit_get_alloc_size(vfs_handle_struct *handle, files_struct *fsp, const SMB_STRUCT_STAT *sbuf) { - int result; + uint64_t result; struct timespec ts1,ts2; double timediff; @@ -709,7 +1008,7 @@ static uint64_t smb_time_audit_get_alloc_size(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("get_alloc_size", timediff); + smb_time_audit_log_fsp("get_alloc_size", timediff, fsp); } return result; @@ -728,7 +1027,7 @@ static int smb_time_audit_unlink(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("unlink", timediff); + smb_time_audit_log_smb_fname("unlink", timediff, path); } return result; @@ -747,7 +1046,7 @@ static int smb_time_audit_chmod(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("chmod", timediff); + smb_time_audit_log_fname("chmod", timediff, path); } return result; @@ -766,7 +1065,7 @@ static int smb_time_audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("fchmod", timediff); + smb_time_audit_log_fsp("fchmod", timediff, fsp); } return result; @@ -785,7 +1084,7 @@ static int smb_time_audit_chown(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("chown", timediff); + smb_time_audit_log_fname("chown", timediff, path); } return result; @@ -804,7 +1103,7 @@ static int smb_time_audit_fchown(vfs_handle_struct *handle, files_struct *fsp, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("fchown", timediff); + smb_time_audit_log_fsp("fchown", timediff, fsp); } return result; @@ -823,7 +1122,7 @@ static int smb_time_audit_lchown(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("lchown", timediff); + smb_time_audit_log_fname("lchown", timediff, path); } return result; @@ -841,20 +1140,20 @@ static int smb_time_audit_chdir(vfs_handle_struct *handle, const char *path) timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("chdir", timediff); + smb_time_audit_log_fname("chdir", timediff, path); } return result; } -static char *smb_time_audit_getwd(vfs_handle_struct *handle, char *path) +static char *smb_time_audit_getwd(vfs_handle_struct *handle) { char *result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_GETWD(handle, path); + result = SMB_VFS_NEXT_GETWD(handle); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; @@ -879,7 +1178,7 @@ static int smb_time_audit_ntimes(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("ntimes", timediff); + smb_time_audit_log_smb_fname("ntimes", timediff, path); } return result; @@ -887,7 +1186,7 @@ static int smb_time_audit_ntimes(vfs_handle_struct *handle, static int smb_time_audit_ftruncate(vfs_handle_struct *handle, files_struct *fsp, - SMB_OFF_T len) + off_t len) { int result; struct timespec ts1,ts2; @@ -899,14 +1198,36 @@ static int smb_time_audit_ftruncate(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("ftruncate", timediff); + smb_time_audit_log_fsp("ftruncate", timediff, fsp); + } + + return result; +} + +static int smb_time_audit_fallocate(vfs_handle_struct *handle, + files_struct *fsp, + enum vfs_fallocate_mode mode, + off_t offset, + off_t len) +{ + int result; + struct timespec ts1,ts2; + double timediff; + + clock_gettime_mono(&ts1); + result = SMB_VFS_NEXT_FALLOCATE(handle, fsp, mode, offset, len); + clock_gettime_mono(&ts2); + timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; + + if (timediff > audit_timeout) { + smb_time_audit_log_fsp("fallocate", timediff, fsp); } return result; } static bool smb_time_audit_lock(vfs_handle_struct *handle, files_struct *fsp, - int op, SMB_OFF_T offset, SMB_OFF_T count, + int op, off_t offset, off_t count, int type) { bool result; @@ -919,7 +1240,7 @@ static bool smb_time_audit_lock(vfs_handle_struct *handle, files_struct *fsp, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("lock", timediff); + smb_time_audit_log_fsp("lock", timediff, fsp); } return result; @@ -940,7 +1261,7 @@ static int smb_time_audit_kernel_flock(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("kernel_flock", timediff); + smb_time_audit_log_fsp("kernel_flock", timediff, fsp); } return result; @@ -960,7 +1281,7 @@ static int smb_time_audit_linux_setlease(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("linux_setlease", timediff); + smb_time_audit_log_fsp("linux_setlease", timediff, fsp); } return result; @@ -968,7 +1289,7 @@ static int smb_time_audit_linux_setlease(vfs_handle_struct *handle, static bool smb_time_audit_getlock(vfs_handle_struct *handle, files_struct *fsp, - SMB_OFF_T *poffset, SMB_OFF_T *pcount, + off_t *poffset, off_t *pcount, int *ptype, pid_t *ppid) { bool result; @@ -982,7 +1303,7 @@ static bool smb_time_audit_getlock(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("getlock", timediff); + smb_time_audit_log_fsp("getlock", timediff, fsp); } return result; @@ -1001,7 +1322,7 @@ static int smb_time_audit_symlink(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("symlink", timediff); + smb_time_audit_log_fname("symlink", timediff, newpath); } return result; @@ -1020,7 +1341,7 @@ static int smb_time_audit_readlink(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("readlink", timediff); + smb_time_audit_log_fname("readlink", timediff, path); } return result; @@ -1039,7 +1360,7 @@ static int smb_time_audit_link(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("link", timediff); + smb_time_audit_log_fname("link", timediff, newpath); } return result; @@ -1059,26 +1380,26 @@ static int smb_time_audit_mknod(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("mknod", timediff); + smb_time_audit_log_fname("mknod", timediff, pathname); } return result; } static char *smb_time_audit_realpath(vfs_handle_struct *handle, - const char *path, char *resolved_path) + const char *path) { char *result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_REALPATH(handle, path, resolved_path); + result = SMB_VFS_NEXT_REALPATH(handle, path); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("realpath", timediff); + smb_time_audit_log_fname("realpath", timediff, path); } return result; @@ -1086,7 +1407,9 @@ static char *smb_time_audit_realpath(vfs_handle_struct *handle, static NTSTATUS smb_time_audit_notify_watch(struct vfs_handle_struct *handle, struct sys_notify_context *ctx, - struct notify_entry *e, + const char *path, + uint32_t *filter, + uint32_t *subdir_filter, void (*callback)(struct sys_notify_context *ctx, void *private_data, struct notify_event *ev), @@ -1097,13 +1420,14 @@ static NTSTATUS smb_time_audit_notify_watch(struct vfs_handle_struct *handle, double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_NOTIFY_WATCH(handle, ctx, e, callback, + result = SMB_VFS_NEXT_NOTIFY_WATCH(handle, ctx, path, + filter, subdir_filter, callback, private_data, handle_p); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("notify_watch", timediff); + smb_time_audit_log_fname("notify_watch", timediff, path); } return result; @@ -1122,7 +1446,7 @@ static int smb_time_audit_chflags(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("chflags", timediff); + smb_time_audit_log_fname("chflags", timediff, path); } return result; @@ -1168,7 +1492,7 @@ static NTSTATUS smb_time_audit_streaminfo(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("streaminfo", timediff); + smb_time_audit_log_fsp("streaminfo", timediff, fsp); } return result; @@ -1191,7 +1515,7 @@ static int smb_time_audit_get_real_filename(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("get_real_filename", timediff); + smb_time_audit_log_fname("get_real_filename", timediff, path); } return result; @@ -1210,7 +1534,7 @@ static const char *smb_time_audit_connectpath(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("connectpath", timediff); + smb_time_audit_log_fname("connectpath", timediff, fname); } return result; @@ -1233,7 +1557,8 @@ static NTSTATUS smb_time_audit_brl_lock_windows(struct vfs_handle_struct *handle timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("brl_lock_windows", timediff); + smb_time_audit_log_fsp("brl_lock_windows", timediff, + brl_fsp(br_lck)); } return result; @@ -1255,7 +1580,8 @@ static bool smb_time_audit_brl_unlock_windows(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("brl_unlock_windows", timediff); + smb_time_audit_log_fsp("brl_unlock_windows", timediff, + brl_fsp(br_lck)); } return result; @@ -1276,7 +1602,8 @@ static bool smb_time_audit_brl_cancel_windows(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("brl_cancel_windows", timediff); + smb_time_audit_log_fsp("brl_cancel_windows", timediff, + brl_fsp(br_lck)); } return result; @@ -1296,7 +1623,7 @@ static bool smb_time_audit_strict_lock(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("strict_lock", timediff); + smb_time_audit_log_fsp("strict_lock", timediff, fsp); } return result; @@ -1315,10 +1642,8 @@ static void smb_time_audit_strict_unlock(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("strict_unlock", timediff); + smb_time_audit_log_fsp("strict_unlock", timediff, fsp); } - - return; } static NTSTATUS smb_time_audit_translate_name(struct vfs_handle_struct *handle, @@ -1338,15 +1663,98 @@ static NTSTATUS smb_time_audit_translate_name(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("translate_name", timediff); + smb_time_audit_log_fname("translate_name", timediff, name); } return result; } +struct time_audit_cc_state { + struct timespec ts_send; + struct vfs_handle_struct *handle; + off_t copied; +}; +static void smb_time_audit_copy_chunk_done(struct tevent_req *subreq); + +static struct tevent_req *smb_time_audit_copy_chunk_send(struct vfs_handle_struct *handle, + TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct files_struct *src_fsp, + off_t src_off, + struct files_struct *dest_fsp, + off_t dest_off, + off_t num) +{ + struct tevent_req *req; + struct tevent_req *subreq; + struct time_audit_cc_state *cc_state; + + req = tevent_req_create(mem_ctx, &cc_state, struct time_audit_cc_state); + if (req == NULL) { + return NULL; + } + + cc_state->handle = handle; + clock_gettime_mono(&cc_state->ts_send); + subreq = SMB_VFS_NEXT_COPY_CHUNK_SEND(handle, cc_state, ev, + src_fsp, src_off, + dest_fsp, dest_off, num); + if (tevent_req_nomem(subreq, req)) { + return tevent_req_post(req, ev); + } + + tevent_req_set_callback(subreq, smb_time_audit_copy_chunk_done, req); + return req; +} + +static void smb_time_audit_copy_chunk_done(struct tevent_req *subreq) +{ + struct tevent_req *req = tevent_req_callback_data( + subreq, struct tevent_req); + struct time_audit_cc_state *cc_state + = tevent_req_data(req, struct time_audit_cc_state); + NTSTATUS status; + + status = SMB_VFS_NEXT_COPY_CHUNK_RECV(cc_state->handle, + subreq, + &cc_state->copied); + TALLOC_FREE(subreq); + if (tevent_req_nterror(req, status)) { + return; + } + tevent_req_done(req); +} + +static NTSTATUS smb_time_audit_copy_chunk_recv(struct vfs_handle_struct *handle, + struct tevent_req *req, + off_t *copied) +{ + struct time_audit_cc_state *cc_state + = tevent_req_data(req, struct time_audit_cc_state); + struct timespec ts_recv; + double timediff; + NTSTATUS status; + + clock_gettime_mono(&ts_recv); + timediff = nsec_time_diff(&ts_recv, &cc_state->ts_send)*1.0e-9; + if (timediff > audit_timeout) { + smb_time_audit_log("copy_chunk", timediff); + } + + *copied = cc_state->copied; + if (tevent_req_is_nterror(req, &status)) { + tevent_req_received(req); + return status; + } + + tevent_req_received(req); + return NT_STATUS_OK; +} + static NTSTATUS smb_time_audit_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp, uint32 security_info, + TALLOC_CTX *mem_ctx, struct security_descriptor **ppdesc) { NTSTATUS result; @@ -1354,12 +1762,13 @@ static NTSTATUS smb_time_audit_fget_nt_acl(vfs_handle_struct *handle, double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, security_info, ppdesc); + result = SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, security_info, + mem_ctx, ppdesc); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("fget_nt_acl", timediff); + smb_time_audit_log_fsp("fget_nt_acl", timediff, fsp); } return result; @@ -1368,6 +1777,7 @@ static NTSTATUS smb_time_audit_fget_nt_acl(vfs_handle_struct *handle, static NTSTATUS smb_time_audit_get_nt_acl(vfs_handle_struct *handle, const char *name, uint32 security_info, + TALLOC_CTX *mem_ctx, struct security_descriptor **ppdesc) { NTSTATUS result; @@ -1375,12 +1785,13 @@ static NTSTATUS smb_time_audit_get_nt_acl(vfs_handle_struct *handle, double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_GET_NT_ACL(handle, name, security_info, ppdesc); + result = SMB_VFS_NEXT_GET_NT_ACL(handle, name, security_info, + mem_ctx, ppdesc); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("get_nt_acl", timediff); + smb_time_audit_log_fname("get_nt_acl", timediff, name); } return result; @@ -1402,7 +1813,7 @@ static NTSTATUS smb_time_audit_fset_nt_acl(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("fset_nt_acl", timediff); + smb_time_audit_log_fsp("fset_nt_acl", timediff, fsp); } return result; @@ -1421,7 +1832,7 @@ static int smb_time_audit_chmod_acl(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("chmod_acl", timediff); + smb_time_audit_log_fname("chmod_acl", timediff, path); } return result; @@ -1440,89 +1851,7 @@ static int smb_time_audit_fchmod_acl(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("fchmod_acl", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_get_entry(vfs_handle_struct *handle, - SMB_ACL_T theacl, int entry_id, - SMB_ACL_ENTRY_T *entry_p) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_GET_ENTRY(handle, theacl, entry_id, - entry_p); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_get_entry", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_get_tag_type(vfs_handle_struct *handle, - SMB_ACL_ENTRY_T entry_d, - SMB_ACL_TAG_T *tag_type_p) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_GET_TAG_TYPE(handle, entry_d, - tag_type_p); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_get_tag_type", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_get_permset(vfs_handle_struct *handle, - SMB_ACL_ENTRY_T entry_d, - SMB_ACL_PERMSET_T *permset_p) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_GET_PERMSET(handle, entry_d, - permset_p); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_get_permset", timediff); - } - - return result; -} - -static void * smb_time_audit_sys_acl_get_qualifier(vfs_handle_struct *handle, - SMB_ACL_ENTRY_T entry_d) -{ - void *result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_GET_QUALIFIER(handle, entry_d); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_get_qualifier", timediff); + smb_time_audit_log_fsp("fchmod_acl", timediff, fsp); } return result; @@ -1530,216 +1859,85 @@ static void * smb_time_audit_sys_acl_get_qualifier(vfs_handle_struct *handle, static SMB_ACL_T smb_time_audit_sys_acl_get_file(vfs_handle_struct *handle, const char *path_p, - SMB_ACL_TYPE_T type) + SMB_ACL_TYPE_T type, + TALLOC_CTX *mem_ctx) { SMB_ACL_T result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle, path_p, type); + result = SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle, path_p, type, mem_ctx); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_get_file", timediff); + smb_time_audit_log_fname("sys_acl_get_file", timediff, path_p); } return result; } static SMB_ACL_T smb_time_audit_sys_acl_get_fd(vfs_handle_struct *handle, - files_struct *fsp) -{ - SMB_ACL_T result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_GET_FD(handle, fsp); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_get_fd", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_clear_perms(vfs_handle_struct *handle, - SMB_ACL_PERMSET_T permset) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_CLEAR_PERMS(handle, permset); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_clear_perms", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_add_perm(vfs_handle_struct *handle, - SMB_ACL_PERMSET_T permset, - SMB_ACL_PERM_T perm) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_ADD_PERM(handle, permset, perm); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_add_perm", timediff); - } - - return result; -} - -static char * smb_time_audit_sys_acl_to_text(vfs_handle_struct *handle, - SMB_ACL_T theacl, - ssize_t *plen) -{ - char * result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_TO_TEXT(handle, theacl, plen); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_to_text", timediff); - } - - return result; -} - -static SMB_ACL_T smb_time_audit_sys_acl_init(vfs_handle_struct *handle, - int count) + files_struct *fsp, + TALLOC_CTX *mem_ctx) { SMB_ACL_T result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_INIT(handle, count); + result = SMB_VFS_NEXT_SYS_ACL_GET_FD(handle, fsp, mem_ctx); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_init", timediff); + smb_time_audit_log_fsp("sys_acl_get_fd", timediff, fsp); } return result; } -static int smb_time_audit_sys_acl_create_entry(vfs_handle_struct *handle, - SMB_ACL_T *pacl, - SMB_ACL_ENTRY_T *pentry) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_CREATE_ENTRY(handle, pacl, pentry); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_create_entry", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_set_tag_type(vfs_handle_struct *handle, - SMB_ACL_ENTRY_T entry, - SMB_ACL_TAG_T tagtype) +static int smb_time_audit_sys_acl_blob_get_file(vfs_handle_struct *handle, + const char *path_p, + TALLOC_CTX *mem_ctx, + char **blob_description, + DATA_BLOB *blob) { int result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_SET_TAG_TYPE(handle, entry, - tagtype); + result = SMB_VFS_NEXT_SYS_ACL_BLOB_GET_FILE(handle, path_p, mem_ctx, blob_description, blob); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_set_tag_type", timediff); + smb_time_audit_log("sys_acl_blob_get_file", timediff); } return result; } -static int smb_time_audit_sys_acl_set_qualifier(vfs_handle_struct *handle, - SMB_ACL_ENTRY_T entry, - void *qual) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_SET_QUALIFIER(handle, entry, qual); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_set_qualifier", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_set_permset(vfs_handle_struct *handle, - SMB_ACL_ENTRY_T entry, - SMB_ACL_PERMSET_T permset) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_SET_PERMSET(handle, entry, permset); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_set_permset", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_valid(vfs_handle_struct *handle, - SMB_ACL_T theacl) +static int smb_time_audit_sys_acl_blob_get_fd(vfs_handle_struct *handle, + files_struct *fsp, + TALLOC_CTX *mem_ctx, + char **blob_description, + DATA_BLOB *blob) { int result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_VALID(handle, theacl); + result = SMB_VFS_NEXT_SYS_ACL_BLOB_GET_FD(handle, fsp, mem_ctx, blob_description, blob); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_valid", timediff); + smb_time_audit_log("sys_acl_blob_get_fd", timediff); } return result; @@ -1761,7 +1959,7 @@ static int smb_time_audit_sys_acl_set_file(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_set_file", timediff); + smb_time_audit_log_fname("sys_acl_set_file", timediff, name); } return result; @@ -1781,7 +1979,7 @@ static int smb_time_audit_sys_acl_set_fd(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_set_fd", timediff); + smb_time_audit_log_fsp("sys_acl_set_fd", timediff, fsp); } return result; @@ -1800,86 +1998,7 @@ static int smb_time_audit_sys_acl_delete_def_file(vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_delete_def_file", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_get_perm(vfs_handle_struct *handle, - SMB_ACL_PERMSET_T permset, - SMB_ACL_PERM_T perm) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_GET_PERM(handle, permset, perm); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_get_perm", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_free_text(vfs_handle_struct *handle, - char *text) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_FREE_TEXT(handle, text); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_free_text", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_free_acl(vfs_handle_struct *handle, - SMB_ACL_T posix_acl) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_FREE_ACL(handle, posix_acl); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_free_acl", timediff); - } - - return result; -} - -static int smb_time_audit_sys_acl_free_qualifier(vfs_handle_struct *handle, - void *qualifier, - SMB_ACL_TAG_T tagtype) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_SYS_ACL_FREE_QUALIFIER(handle, qualifier, - tagtype); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("sys_acl_free_qualifier", timediff); + smb_time_audit_log_fname("sys_acl_delete_def_file", timediff, path); } return result; @@ -1899,27 +2018,7 @@ static ssize_t smb_time_audit_getxattr(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("getxattr", timediff); - } - - return result; -} - -static ssize_t smb_time_audit_lgetxattr(struct vfs_handle_struct *handle, - const char *path, const char *name, - void *value, size_t size) -{ - ssize_t result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_LGETXATTR(handle, path, name, value, size); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("lgetxattr", timediff); + smb_time_audit_log_fname("getxattr", timediff, path); } return result; @@ -1940,7 +2039,7 @@ static ssize_t smb_time_audit_fgetxattr(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("fgetxattr", timediff); + smb_time_audit_log_fsp("fgetxattr", timediff, fsp); } return result; @@ -1960,27 +2059,7 @@ static ssize_t smb_time_audit_listxattr(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("listxattr", timediff); - } - - return result; -} - -static ssize_t smb_time_audit_llistxattr(struct vfs_handle_struct *handle, - const char *path, char *list, - size_t size) -{ - ssize_t result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_LLISTXATTR(handle, path, list, size); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("llistxattr", timediff); + smb_time_audit_log_fname("listxattr", timediff, path); } return result; @@ -2000,7 +2079,7 @@ static ssize_t smb_time_audit_flistxattr(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("flistxattr", timediff); + smb_time_audit_log_fsp("flistxattr", timediff, fsp); } return result; @@ -2019,26 +2098,7 @@ static int smb_time_audit_removexattr(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("removexattr", timediff); - } - - return result; -} - -static int smb_time_audit_lremovexattr(struct vfs_handle_struct *handle, - const char *path, const char *name) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_LREMOVEXATTR(handle, path, name); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("lremovexattr", timediff); + smb_time_audit_log_fname("removexattr", timediff, path); } return result; @@ -2058,7 +2118,7 @@ static int smb_time_audit_fremovexattr(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("fremovexattr", timediff); + smb_time_audit_log_fsp("fremovexattr", timediff, fsp); } return result; @@ -2080,29 +2140,7 @@ static int smb_time_audit_setxattr(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("setxattr", timediff); - } - - return result; -} - -static int smb_time_audit_lsetxattr(struct vfs_handle_struct *handle, - const char *path, const char *name, - const void *value, size_t size, - int flags) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_LSETXATTR(handle, path, name, value, size, - flags); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("lsetxattr", timediff); + smb_time_audit_log_fname("setxattr", timediff, path); } return result; @@ -2122,288 +2160,242 @@ static int smb_time_audit_fsetxattr(struct vfs_handle_struct *handle, timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("fsetxattr", timediff); - } - - return result; -} - -static int smb_time_audit_aio_read(struct vfs_handle_struct *handle, - struct files_struct *fsp, - SMB_STRUCT_AIOCB *aiocb) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_AIO_READ(handle, fsp, aiocb); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("aio_read", timediff); - } - - return result; -} - -static int smb_time_audit_aio_write(struct vfs_handle_struct *handle, - struct files_struct *fsp, - SMB_STRUCT_AIOCB *aiocb) -{ - int result; - struct timespec ts1,ts2; - double timediff; - - clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_AIO_WRITE(handle, fsp, aiocb); - clock_gettime_mono(&ts2); - timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; - - if (timediff > audit_timeout) { - smb_time_audit_log("aio_write", timediff); + smb_time_audit_log_fsp("fsetxattr", timediff, fsp); } return result; } -static ssize_t smb_time_audit_aio_return(struct vfs_handle_struct *handle, - struct files_struct *fsp, - SMB_STRUCT_AIOCB *aiocb) +static bool smb_time_audit_aio_force(struct vfs_handle_struct *handle, + struct files_struct *fsp) { - int result; + bool result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_AIO_RETURN(handle, fsp, aiocb); + result = SMB_VFS_NEXT_AIO_FORCE(handle, fsp); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("aio_return", timediff); + smb_time_audit_log_fsp("aio_force", timediff, fsp); } return result; } -static int smb_time_audit_aio_cancel(struct vfs_handle_struct *handle, - struct files_struct *fsp, - SMB_STRUCT_AIOCB *aiocb) +static bool smb_time_audit_is_offline(struct vfs_handle_struct *handle, + const struct smb_filename *fname, + SMB_STRUCT_STAT *sbuf) { - int result; + bool result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_AIO_CANCEL(handle, fsp, aiocb); + result = SMB_VFS_NEXT_IS_OFFLINE(handle, fname, sbuf); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("aio_cancel", timediff); + smb_time_audit_log_smb_fname("is_offline", timediff, fname); } return result; } -static int smb_time_audit_aio_error(struct vfs_handle_struct *handle, - struct files_struct *fsp, - SMB_STRUCT_AIOCB *aiocb) +static int smb_time_audit_set_offline(struct vfs_handle_struct *handle, + const struct smb_filename *fname) { int result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_AIO_ERROR(handle, fsp, aiocb); + result = SMB_VFS_NEXT_SET_OFFLINE(handle, fname); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("aio_error", timediff); + smb_time_audit_log_smb_fname("set_offline", timediff, fname); } return result; } -static int smb_time_audit_aio_fsync(struct vfs_handle_struct *handle, - struct files_struct *fsp, int op, - SMB_STRUCT_AIOCB *aiocb) +NTSTATUS smb_time_audit_durable_cookie(struct vfs_handle_struct *handle, + struct files_struct *fsp, + TALLOC_CTX *mem_ctx, + DATA_BLOB *cookie) { - int result; + NTSTATUS result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_AIO_FSYNC(handle, fsp, op, aiocb); + result = SMB_VFS_NEXT_DURABLE_COOKIE(handle, fsp, mem_ctx, cookie); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("aio_fsync", timediff); + smb_time_audit_log_fsp("durable_cookie", timediff, fsp); } return result; } -static int smb_time_audit_aio_suspend(struct vfs_handle_struct *handle, - struct files_struct *fsp, - const SMB_STRUCT_AIOCB * const aiocb[], - int n, const struct timespec *ts) +NTSTATUS smb_time_audit_durable_disconnect(struct vfs_handle_struct *handle, + struct files_struct *fsp, + const DATA_BLOB old_cookie, + TALLOC_CTX *mem_ctx, + DATA_BLOB *new_cookie) { - int result; + NTSTATUS result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_AIO_SUSPEND(handle, fsp, aiocb, n, ts); + result = SMB_VFS_NEXT_DURABLE_DISCONNECT(handle, fsp, old_cookie, + mem_ctx, new_cookie); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("aio_suspend", timediff); + smb_time_audit_log_fsp("durable_disconnect", timediff, fsp); } return result; } -static bool smb_time_audit_aio_force(struct vfs_handle_struct *handle, - struct files_struct *fsp) +NTSTATUS smb_time_audit_durable_reconnect(struct vfs_handle_struct *handle, + struct smb_request *smb1req, + struct smbXsrv_open *op, + const DATA_BLOB old_cookie, + TALLOC_CTX *mem_ctx, + struct files_struct **fsp, + DATA_BLOB *new_cookie) { - bool result; + NTSTATUS result; struct timespec ts1,ts2; double timediff; clock_gettime_mono(&ts1); - result = SMB_VFS_NEXT_AIO_FORCE(handle, fsp); + result = SMB_VFS_NEXT_DURABLE_RECONNECT(handle, smb1req, op, old_cookie, + mem_ctx, fsp, new_cookie); clock_gettime_mono(&ts2); timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9; if (timediff > audit_timeout) { - smb_time_audit_log("aio_force", timediff); + smb_time_audit_log("durable_reconnect", timediff); } return result; } - - /* VFS operations */ static struct vfs_fn_pointers vfs_time_audit_fns = { .connect_fn = smb_time_audit_connect, - .disconnect = smb_time_audit_disconnect, - .disk_free = smb_time_audit_disk_free, - .get_quota = smb_time_audit_get_quota, - .set_quota = smb_time_audit_set_quota, - .get_shadow_copy_data = smb_time_audit_get_shadow_copy_data, - .statvfs = smb_time_audit_statvfs, - .fs_capabilities = smb_time_audit_fs_capabilities, - .opendir = smb_time_audit_opendir, - .readdir = smb_time_audit_readdir, - .seekdir = smb_time_audit_seekdir, - .telldir = smb_time_audit_telldir, - .rewind_dir = smb_time_audit_rewinddir, - .mkdir = smb_time_audit_mkdir, - .rmdir = smb_time_audit_rmdir, - .closedir = smb_time_audit_closedir, - .init_search_op = smb_time_audit_init_search_op, - .open = smb_time_audit_open, - .create_file = smb_time_audit_create_file, + .disconnect_fn = smb_time_audit_disconnect, + .disk_free_fn = smb_time_audit_disk_free, + .get_quota_fn = smb_time_audit_get_quota, + .set_quota_fn = smb_time_audit_set_quota, + .get_shadow_copy_data_fn = smb_time_audit_get_shadow_copy_data, + .statvfs_fn = smb_time_audit_statvfs, + .fs_capabilities_fn = smb_time_audit_fs_capabilities, + .opendir_fn = smb_time_audit_opendir, + .fdopendir_fn = smb_time_audit_fdopendir, + .readdir_fn = smb_time_audit_readdir, + .seekdir_fn = smb_time_audit_seekdir, + .telldir_fn = smb_time_audit_telldir, + .rewind_dir_fn = smb_time_audit_rewinddir, + .mkdir_fn = smb_time_audit_mkdir, + .rmdir_fn = smb_time_audit_rmdir, + .closedir_fn = smb_time_audit_closedir, + .init_search_op_fn = smb_time_audit_init_search_op, + .open_fn = smb_time_audit_open, + .create_file_fn = smb_time_audit_create_file, .close_fn = smb_time_audit_close, - .vfs_read = smb_time_audit_read, - .pread = smb_time_audit_pread, - .write = smb_time_audit_write, - .pwrite = smb_time_audit_pwrite, - .lseek = smb_time_audit_lseek, - .sendfile = smb_time_audit_sendfile, - .recvfile = smb_time_audit_recvfile, - .rename = smb_time_audit_rename, - .fsync = smb_time_audit_fsync, - .stat = smb_time_audit_stat, - .fstat = smb_time_audit_fstat, - .lstat = smb_time_audit_lstat, - .get_alloc_size = smb_time_audit_get_alloc_size, - .unlink = smb_time_audit_unlink, - .chmod = smb_time_audit_chmod, - .fchmod = smb_time_audit_fchmod, - .chown = smb_time_audit_chown, - .fchown = smb_time_audit_fchown, - .lchown = smb_time_audit_lchown, - .chdir = smb_time_audit_chdir, - .getwd = smb_time_audit_getwd, - .ntimes = smb_time_audit_ntimes, - .ftruncate = smb_time_audit_ftruncate, - .lock = smb_time_audit_lock, - .kernel_flock = smb_time_audit_kernel_flock, - .linux_setlease = smb_time_audit_linux_setlease, - .getlock = smb_time_audit_getlock, - .symlink = smb_time_audit_symlink, - .vfs_readlink = smb_time_audit_readlink, - .link = smb_time_audit_link, - .mknod = smb_time_audit_mknod, - .realpath = smb_time_audit_realpath, - .notify_watch = smb_time_audit_notify_watch, - .chflags = smb_time_audit_chflags, - .file_id_create = smb_time_audit_file_id_create, - .streaminfo = smb_time_audit_streaminfo, - .get_real_filename = smb_time_audit_get_real_filename, - .connectpath = smb_time_audit_connectpath, - .brl_lock_windows = smb_time_audit_brl_lock_windows, - .brl_unlock_windows = smb_time_audit_brl_unlock_windows, - .brl_cancel_windows = smb_time_audit_brl_cancel_windows, - .strict_lock = smb_time_audit_strict_lock, - .strict_unlock = smb_time_audit_strict_unlock, - .translate_name = smb_time_audit_translate_name, - .fget_nt_acl = smb_time_audit_fget_nt_acl, - .get_nt_acl = smb_time_audit_get_nt_acl, - .fset_nt_acl = smb_time_audit_fset_nt_acl, - .chmod_acl = smb_time_audit_chmod_acl, - .fchmod_acl = smb_time_audit_fchmod_acl, - .sys_acl_get_entry = smb_time_audit_sys_acl_get_entry, - .sys_acl_get_tag_type = smb_time_audit_sys_acl_get_tag_type, - .sys_acl_get_permset = smb_time_audit_sys_acl_get_permset, - .sys_acl_get_qualifier = smb_time_audit_sys_acl_get_qualifier, - .sys_acl_get_file = smb_time_audit_sys_acl_get_file, - .sys_acl_get_fd = smb_time_audit_sys_acl_get_fd, - .sys_acl_clear_perms = smb_time_audit_sys_acl_clear_perms, - .sys_acl_add_perm = smb_time_audit_sys_acl_add_perm, - .sys_acl_to_text = smb_time_audit_sys_acl_to_text, - .sys_acl_init = smb_time_audit_sys_acl_init, - .sys_acl_create_entry = smb_time_audit_sys_acl_create_entry, - .sys_acl_set_tag_type = smb_time_audit_sys_acl_set_tag_type, - .sys_acl_set_qualifier = smb_time_audit_sys_acl_set_qualifier, - .sys_acl_set_permset = smb_time_audit_sys_acl_set_permset, - .sys_acl_valid = smb_time_audit_sys_acl_valid, - .sys_acl_set_file = smb_time_audit_sys_acl_set_file, - .sys_acl_set_fd = smb_time_audit_sys_acl_set_fd, - .sys_acl_delete_def_file = smb_time_audit_sys_acl_delete_def_file, - .sys_acl_get_perm = smb_time_audit_sys_acl_get_perm, - .sys_acl_free_text = smb_time_audit_sys_acl_free_text, - .sys_acl_free_acl = smb_time_audit_sys_acl_free_acl, - .sys_acl_free_qualifier = smb_time_audit_sys_acl_free_qualifier, - .getxattr = smb_time_audit_getxattr, - .lgetxattr = smb_time_audit_lgetxattr, - .fgetxattr = smb_time_audit_fgetxattr, - .listxattr = smb_time_audit_listxattr, - .llistxattr = smb_time_audit_llistxattr, - .flistxattr = smb_time_audit_flistxattr, - .removexattr = smb_time_audit_removexattr, - .lremovexattr = smb_time_audit_lremovexattr, - .fremovexattr = smb_time_audit_fremovexattr, - .setxattr = smb_time_audit_setxattr, - .lsetxattr = smb_time_audit_lsetxattr, - .fsetxattr = smb_time_audit_fsetxattr, - .aio_read = smb_time_audit_aio_read, - .aio_write = smb_time_audit_aio_write, - .aio_return_fn = smb_time_audit_aio_return, - .aio_cancel = smb_time_audit_aio_cancel, - .aio_error_fn = smb_time_audit_aio_error, - .aio_fsync = smb_time_audit_aio_fsync, - .aio_suspend = smb_time_audit_aio_suspend, - .aio_force = smb_time_audit_aio_force, + .read_fn = smb_time_audit_read, + .pread_fn = smb_time_audit_pread, + .pread_send_fn = smb_time_audit_pread_send, + .pread_recv_fn = smb_time_audit_pread_recv, + .write_fn = smb_time_audit_write, + .pwrite_fn = smb_time_audit_pwrite, + .pwrite_send_fn = smb_time_audit_pwrite_send, + .pwrite_recv_fn = smb_time_audit_pwrite_recv, + .lseek_fn = smb_time_audit_lseek, + .sendfile_fn = smb_time_audit_sendfile, + .recvfile_fn = smb_time_audit_recvfile, + .rename_fn = smb_time_audit_rename, + .fsync_fn = smb_time_audit_fsync, + .fsync_send_fn = smb_time_audit_fsync_send, + .fsync_recv_fn = smb_time_audit_fsync_recv, + .stat_fn = smb_time_audit_stat, + .fstat_fn = smb_time_audit_fstat, + .lstat_fn = smb_time_audit_lstat, + .get_alloc_size_fn = smb_time_audit_get_alloc_size, + .unlink_fn = smb_time_audit_unlink, + .chmod_fn = smb_time_audit_chmod, + .fchmod_fn = smb_time_audit_fchmod, + .chown_fn = smb_time_audit_chown, + .fchown_fn = smb_time_audit_fchown, + .lchown_fn = smb_time_audit_lchown, + .chdir_fn = smb_time_audit_chdir, + .getwd_fn = smb_time_audit_getwd, + .ntimes_fn = smb_time_audit_ntimes, + .ftruncate_fn = smb_time_audit_ftruncate, + .fallocate_fn = smb_time_audit_fallocate, + .lock_fn = smb_time_audit_lock, + .kernel_flock_fn = smb_time_audit_kernel_flock, + .linux_setlease_fn = smb_time_audit_linux_setlease, + .getlock_fn = smb_time_audit_getlock, + .symlink_fn = smb_time_audit_symlink, + .readlink_fn = smb_time_audit_readlink, + .link_fn = smb_time_audit_link, + .mknod_fn = smb_time_audit_mknod, + .realpath_fn = smb_time_audit_realpath, + .notify_watch_fn = smb_time_audit_notify_watch, + .chflags_fn = smb_time_audit_chflags, + .file_id_create_fn = smb_time_audit_file_id_create, + .streaminfo_fn = smb_time_audit_streaminfo, + .get_real_filename_fn = smb_time_audit_get_real_filename, + .connectpath_fn = smb_time_audit_connectpath, + .brl_lock_windows_fn = smb_time_audit_brl_lock_windows, + .brl_unlock_windows_fn = smb_time_audit_brl_unlock_windows, + .brl_cancel_windows_fn = smb_time_audit_brl_cancel_windows, + .strict_lock_fn = smb_time_audit_strict_lock, + .strict_unlock_fn = smb_time_audit_strict_unlock, + .translate_name_fn = smb_time_audit_translate_name, + .copy_chunk_send_fn = smb_time_audit_copy_chunk_send, + .copy_chunk_recv_fn = smb_time_audit_copy_chunk_recv, + .fget_nt_acl_fn = smb_time_audit_fget_nt_acl, + .get_nt_acl_fn = smb_time_audit_get_nt_acl, + .fset_nt_acl_fn = smb_time_audit_fset_nt_acl, + .chmod_acl_fn = smb_time_audit_chmod_acl, + .fchmod_acl_fn = smb_time_audit_fchmod_acl, + .sys_acl_get_file_fn = smb_time_audit_sys_acl_get_file, + .sys_acl_get_fd_fn = smb_time_audit_sys_acl_get_fd, + .sys_acl_blob_get_file_fn = smb_time_audit_sys_acl_blob_get_file, + .sys_acl_blob_get_fd_fn = smb_time_audit_sys_acl_blob_get_fd, + .sys_acl_set_file_fn = smb_time_audit_sys_acl_set_file, + .sys_acl_set_fd_fn = smb_time_audit_sys_acl_set_fd, + .sys_acl_delete_def_file_fn = smb_time_audit_sys_acl_delete_def_file, + .getxattr_fn = smb_time_audit_getxattr, + .fgetxattr_fn = smb_time_audit_fgetxattr, + .listxattr_fn = smb_time_audit_listxattr, + .flistxattr_fn = smb_time_audit_flistxattr, + .removexattr_fn = smb_time_audit_removexattr, + .fremovexattr_fn = smb_time_audit_fremovexattr, + .setxattr_fn = smb_time_audit_setxattr, + .fsetxattr_fn = smb_time_audit_fsetxattr, + .aio_force_fn = smb_time_audit_aio_force, + .is_offline_fn = smb_time_audit_is_offline, + .set_offline_fn = smb_time_audit_set_offline, + .durable_cookie_fn = smb_time_audit_durable_cookie, + .durable_disconnect_fn = smb_time_audit_durable_disconnect, + .durable_reconnect_fn = smb_time_audit_durable_reconnect, };