}
static uint64_t smb_time_audit_disk_free(vfs_handle_struct *handle,
- const char *path, uint64_t *bsize,
- uint64_t *dfree, uint64_t *dsize)
+ const struct smb_filename *smb_fname,
+ uint64_t *bsize,
+ uint64_t *dfree,
+ uint64_t *dsize)
{
uint64_t result;
struct timespec ts1,ts2;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_DISK_FREE(handle, path, bsize, dfree, dsize);
+ result = SMB_VFS_NEXT_DISK_FREE(handle, smb_fname, bsize, dfree, dsize);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
/* Don't have a reasonable notion of failure here */
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("disk_free", timediff, path);
+ smb_time_audit_log_fname("disk_free",
+ timediff,
+ smb_fname->base_name);
}
return result;
return result;
}
+static NTSTATUS smb_time_audit_get_dfs_referrals(
+ struct vfs_handle_struct *handle,
+ struct dfs_GetDFSReferral *r)
+{
+ NTSTATUS result;
+ struct timespec ts1,ts2;
+ double timediff;
+
+ clock_gettime_mono(&ts1);
+ result = SMB_VFS_NEXT_GET_DFS_REFERRALS(handle, r);
+ clock_gettime_mono(&ts2);
+ timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
+
+ if (timediff > audit_timeout) {
+ smb_time_audit_log("get_dfs_referrals(", timediff);
+ }
+
+ return result;
+}
+
static NTSTATUS smb_time_audit_snap_check_path(struct vfs_handle_struct *handle,
TALLOC_CTX *mem_ctx,
const char *service_path,
}
static DIR *smb_time_audit_opendir(vfs_handle_struct *handle,
- const char *fname,
+ const struct smb_filename *smb_fname,
const char *mask, uint32_t attr)
{
DIR *result;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_OPENDIR(handle, fname, mask, attr);
+ result = SMB_VFS_NEXT_OPENDIR(handle, smb_fname, mask, attr);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("opendir", timediff, fname);
+ smb_time_audit_log_smb_fname("opendir", timediff, smb_fname);
}
return result;
struct smb_time_audit_pread_state {
struct files_struct *fsp;
- struct timespec ts1;
ssize_t ret;
- int err;
+ struct vfs_aio_state vfs_aio_state;
};
static void smb_time_audit_pread_done(struct tevent_req *subreq);
if (req == NULL) {
return NULL;
}
- clock_gettime_mono(&state->ts1);
state->fsp = fsp;
subreq = SMB_VFS_NEXT_PREAD_SEND(state, ev, handle, fsp, data,
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);
+ state->ret = SMB_VFS_PREAD_RECV(subreq, &state->vfs_aio_state);
TALLOC_FREE(subreq);
tevent_req_done(req);
}
-static ssize_t smb_time_audit_pread_recv(struct tevent_req *req, int *err)
+static ssize_t smb_time_audit_pread_recv(struct tevent_req *req,
+ struct vfs_aio_state *vfs_aio_state)
{
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;
+ timediff = state->vfs_aio_state.duration * 1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fsp("pread", timediff, state->fsp);
+ smb_time_audit_log_fsp("async pread", timediff, state->fsp);
}
- if (tevent_req_is_unix_error(req, err)) {
+ if (tevent_req_is_unix_error(req, &vfs_aio_state->error)) {
return -1;
}
- *err = state->err;
+ *vfs_aio_state = state->vfs_aio_state;
return state->ret;
}
struct smb_time_audit_pwrite_state {
struct files_struct *fsp;
- struct timespec ts1;
ssize_t ret;
- int err;
+ struct vfs_aio_state vfs_aio_state;
};
static void smb_time_audit_pwrite_done(struct tevent_req *subreq);
if (req == NULL) {
return NULL;
}
- clock_gettime_mono(&state->ts1);
state->fsp = fsp;
subreq = SMB_VFS_NEXT_PWRITE_SEND(state, ev, handle, fsp, data,
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);
+ state->ret = SMB_VFS_PWRITE_RECV(subreq, &state->vfs_aio_state);
TALLOC_FREE(subreq);
tevent_req_done(req);
}
-static ssize_t smb_time_audit_pwrite_recv(struct tevent_req *req, int *err)
+static ssize_t smb_time_audit_pwrite_recv(struct tevent_req *req,
+ struct vfs_aio_state *vfs_aio_state)
{
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;
+ timediff = state->vfs_aio_state.duration * 1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fsp("pwrite", timediff, state->fsp);
+ smb_time_audit_log_fsp("async pwrite", timediff, state->fsp);
}
- if (tevent_req_is_unix_error(req, err)) {
+ if (tevent_req_is_unix_error(req, &vfs_aio_state->error)) {
return -1;
}
- *err = state->err;
+ *vfs_aio_state = state->vfs_aio_state;
return state->ret;
}
struct smb_time_audit_fsync_state {
struct files_struct *fsp;
- struct timespec ts1;
int ret;
- int err;
+ struct vfs_aio_state vfs_aio_state;
};
static void smb_time_audit_fsync_done(struct tevent_req *subreq);
if (req == NULL) {
return NULL;
}
- clock_gettime_mono(&state->ts1);
state->fsp = fsp;
subreq = SMB_VFS_NEXT_FSYNC_SEND(state, ev, handle, fsp);
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);
+ state->ret = SMB_VFS_FSYNC_RECV(subreq, &state->vfs_aio_state);
TALLOC_FREE(subreq);
tevent_req_done(req);
}
-static int smb_time_audit_fsync_recv(struct tevent_req *req, int *err)
+static int smb_time_audit_fsync_recv(struct tevent_req *req,
+ struct vfs_aio_state *vfs_aio_state)
{
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;
+ timediff = state->vfs_aio_state.duration * 1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fsp("fsync", timediff, state->fsp);
+ smb_time_audit_log_fsp("async fsync", timediff, state->fsp);
}
- if (tevent_req_is_unix_error(req, err)) {
+ if (tevent_req_is_unix_error(req, &vfs_aio_state->error)) {
return -1;
}
- *err = state->err;
+ *vfs_aio_state = state->vfs_aio_state;
return state->ret;
}
}
static int smb_time_audit_chmod(vfs_handle_struct *handle,
- const char *path, mode_t mode)
+ const struct smb_filename *smb_fname,
+ mode_t mode)
{
int result;
struct timespec ts1,ts2;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_CHMOD(handle, path, mode);
+ result = SMB_VFS_NEXT_CHMOD(handle, smb_fname, mode);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("chmod", timediff, path);
+ smb_time_audit_log_fname("chmod",
+ timediff,
+ smb_fname->base_name);
}
return result;
}
static int smb_time_audit_chown(vfs_handle_struct *handle,
- const char *path, uid_t uid, gid_t gid)
+ const struct smb_filename *smb_fname,
+ uid_t uid,
+ gid_t gid)
{
int result;
struct timespec ts1,ts2;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_CHOWN(handle, path, uid, gid);
+ result = SMB_VFS_NEXT_CHOWN(handle, smb_fname, uid, gid);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("chown", timediff, path);
+ smb_time_audit_log_fname("chown",
+ timediff,
+ smb_fname->base_name);
}
return result;
}
static int smb_time_audit_lchown(vfs_handle_struct *handle,
- const char *path, uid_t uid, gid_t gid)
+ const struct smb_filename *smb_fname,
+ uid_t uid,
+ gid_t gid)
{
int result;
struct timespec ts1,ts2;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_LCHOWN(handle, path, uid, gid);
+ result = SMB_VFS_NEXT_LCHOWN(handle, smb_fname, uid, gid);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("lchown", timediff, path);
+ smb_time_audit_log_fname("lchown",
+ timediff,
+ smb_fname->base_name);
}
return result;
}
static int smb_time_audit_mknod(vfs_handle_struct *handle,
- const char *pathname, mode_t mode,
+ const struct smb_filename *smb_fname,
+ mode_t mode,
SMB_DEV_T dev)
{
int result;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_MKNOD(handle, pathname, mode, dev);
+ result = SMB_VFS_NEXT_MKNOD(handle, smb_fname, mode, dev);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("mknod", timediff, pathname);
+ smb_time_audit_log_smb_fname("mknod", timediff, smb_fname);
}
return result;
}
static int smb_time_audit_chflags(vfs_handle_struct *handle,
- const char *path, unsigned int flags)
+ const struct smb_filename *smb_fname,
+ unsigned int flags)
{
int result;
struct timespec ts1,ts2;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_CHFLAGS(handle, path, flags);
+ result = SMB_VFS_NEXT_CHFLAGS(handle, smb_fname, flags);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("chflags", timediff, path);
+ smb_time_audit_log_smb_fname("chflags", timediff, smb_fname);
}
return result;
static NTSTATUS smb_time_audit_streaminfo(vfs_handle_struct *handle,
struct files_struct *fsp,
- const char *fname,
+ const struct smb_filename *smb_fname,
TALLOC_CTX *mem_ctx,
unsigned int *pnum_streams,
struct stream_struct **pstreams)
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_STREAMINFO(handle, fsp, fname, mem_ctx,
+ result = SMB_VFS_NEXT_STREAMINFO(handle, fsp, smb_fname, mem_ctx,
pnum_streams, pstreams);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
return result;
}
+static NTSTATUS smb_time_audit_fsctl(struct vfs_handle_struct *handle,
+ struct files_struct *fsp,
+ TALLOC_CTX *ctx,
+ uint32_t function,
+ uint16_t req_flags,
+ const uint8_t *_in_data,
+ uint32_t in_len,
+ uint8_t **_out_data,
+ uint32_t max_out_len,
+ uint32_t *out_len)
+{
+ NTSTATUS result;
+ struct timespec ts1,ts2;
+ double timediff;
+
+ clock_gettime_mono(&ts1);
+ result = SMB_VFS_NEXT_FSCTL(handle,
+ fsp,
+ ctx,
+ function,
+ req_flags,
+ _in_data,
+ in_len,
+ _out_data,
+ max_out_len,
+ out_len);
+ clock_gettime_mono(&ts2);
+ timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
+
+ if (timediff > audit_timeout) {
+ smb_time_audit_log_fsp("fsctl", timediff, fsp);
+ }
+
+ return result;
+}
+
+static NTSTATUS smb_time_get_dos_attributes(struct vfs_handle_struct *handle,
+ struct smb_filename *smb_fname,
+ uint32_t *dosmode)
+{
+ NTSTATUS result;
+ struct timespec ts1,ts2;
+ double timediff;
+
+ clock_gettime_mono(&ts1);
+ result = SMB_VFS_NEXT_GET_DOS_ATTRIBUTES(handle,
+ smb_fname,
+ dosmode);
+ clock_gettime_mono(&ts2);
+ timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
+
+ if (timediff > audit_timeout) {
+ smb_time_audit_log_fname("get_dos_attributes",
+ timediff,
+ smb_fname->base_name);
+ }
+
+ return result;
+}
+
+static NTSTATUS smb_time_fget_dos_attributes(struct vfs_handle_struct *handle,
+ struct files_struct *fsp,
+ uint32_t *dosmode)
+{
+ NTSTATUS result;
+ struct timespec ts1,ts2;
+ double timediff;
+
+ clock_gettime_mono(&ts1);
+ result = SMB_VFS_NEXT_FGET_DOS_ATTRIBUTES(handle,
+ fsp,
+ dosmode);
+ clock_gettime_mono(&ts2);
+ timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
+
+ if (timediff > audit_timeout) {
+ smb_time_audit_log_fsp("fget_dos_attributes", timediff, fsp);
+ }
+
+ return result;
+}
+
+static NTSTATUS smb_time_set_dos_attributes(struct vfs_handle_struct *handle,
+ const struct smb_filename *smb_fname,
+ uint32_t dosmode)
+{
+ NTSTATUS result;
+ struct timespec ts1,ts2;
+ double timediff;
+
+ clock_gettime_mono(&ts1);
+ result = SMB_VFS_NEXT_SET_DOS_ATTRIBUTES(handle,
+ smb_fname,
+ dosmode);
+ clock_gettime_mono(&ts2);
+ timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
+
+ if (timediff > audit_timeout) {
+ smb_time_audit_log_fname("set_dos_attributes",
+ timediff,
+ smb_fname->base_name);
+ }
+
+ return result;
+}
+
+static NTSTATUS smb_time_fset_dos_attributes(struct vfs_handle_struct *handle,
+ struct files_struct *fsp,
+ uint32_t dosmode)
+{
+ NTSTATUS result;
+ struct timespec ts1,ts2;
+ double timediff;
+
+ clock_gettime_mono(&ts1);
+ result = SMB_VFS_NEXT_FSET_DOS_ATTRIBUTES(handle,
+ fsp,
+ dosmode);
+ clock_gettime_mono(&ts2);
+ timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
+
+ if (timediff > audit_timeout) {
+ smb_time_audit_log_fsp("fset_dos_attributes", timediff, fsp);
+ }
+
+ return result;
+}
+
struct time_audit_cc_state {
struct timespec ts_send;
struct vfs_handle_struct *handle;
off_t src_off,
struct files_struct *dest_fsp,
off_t dest_off,
- off_t num)
+ off_t num,
+ uint32_t flags)
{
struct tevent_req *req;
struct tevent_req *subreq;
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);
+ dest_fsp, dest_off, num, flags);
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);
}
return result;
}
+static NTSTATUS smb_time_audit_audit_file(struct vfs_handle_struct *handle,
+ struct smb_filename *smb_fname,
+ struct security_acl *sacl,
+ uint32_t access_requested,
+ uint32_t access_denied)
+{
+ NTSTATUS result;
+ struct timespec ts1,ts2;
+ double timediff;
+
+ clock_gettime_mono(&ts1);
+ result = SMB_VFS_NEXT_AUDIT_FILE(handle,
+ smb_fname,
+ sacl,
+ access_requested,
+ access_denied);
+ clock_gettime_mono(&ts2);
+ timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
+
+ if (timediff > audit_timeout) {
+ smb_time_audit_log_fname("audit_file",
+ timediff,
+ smb_fname->base_name);
+ }
+
+ return result;
+}
+
+
+
static int smb_time_audit_chmod_acl(vfs_handle_struct *handle,
- const char *path, mode_t mode)
+ const struct smb_filename *smb_fname,
+ mode_t mode)
{
int result;
struct timespec ts1,ts2;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_CHMOD_ACL(handle, path, mode);
+ result = SMB_VFS_NEXT_CHMOD_ACL(handle, smb_fname, mode);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("chmod_acl", timediff, path);
+ smb_time_audit_log_fname("chmod_acl",
+ timediff,
+ smb_fname->base_name);
}
return result;
}
static SMB_ACL_T smb_time_audit_sys_acl_get_file(vfs_handle_struct *handle,
- const char *path_p,
- SMB_ACL_TYPE_T type,
- TALLOC_CTX *mem_ctx)
+ const struct smb_filename *smb_fname,
+ 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, mem_ctx);
+ result = SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle, smb_fname,
+ type, mem_ctx);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("sys_acl_get_file", timediff, path_p);
+ smb_time_audit_log_fname("sys_acl_get_file", timediff,
+ smb_fname->base_name);
}
return result;
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)
+ const struct smb_filename *smb_fname,
+ 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_BLOB_GET_FILE(handle, path_p, mem_ctx, blob_description, blob);
+ result = SMB_VFS_NEXT_SYS_ACL_BLOB_GET_FILE(handle, smb_fname,
+ mem_ctx, blob_description, blob);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
}
static int smb_time_audit_sys_acl_set_file(vfs_handle_struct *handle,
- const char *name,
+ const struct smb_filename *smb_fname,
SMB_ACL_TYPE_T acltype,
SMB_ACL_T theacl)
{
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_SYS_ACL_SET_FILE(handle, name, acltype,
+ result = SMB_VFS_NEXT_SYS_ACL_SET_FILE(handle, smb_fname, acltype,
theacl);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("sys_acl_set_file", timediff, name);
+ smb_time_audit_log_fname("sys_acl_set_file", timediff,
+ smb_fname->base_name);
}
return result;
}
static int smb_time_audit_sys_acl_delete_def_file(vfs_handle_struct *handle,
- const char *path)
+ const struct smb_filename *smb_fname)
{
int result;
struct timespec ts1,ts2;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FILE(handle, path);
+ result = SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FILE(handle, smb_fname);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("sys_acl_delete_def_file", timediff, path);
+ smb_time_audit_log_fname("sys_acl_delete_def_file", timediff,
+ smb_fname->base_name);
}
return result;
}
static ssize_t smb_time_audit_getxattr(struct vfs_handle_struct *handle,
- const char *path, const char *name,
- void *value, size_t size)
+ const struct smb_filename *smb_fname,
+ 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_GETXATTR(handle, path, name, value, size);
+ result = SMB_VFS_NEXT_GETXATTR(handle, smb_fname, name, value, size);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("getxattr", timediff, path);
+ smb_time_audit_log_fname("getxattr", timediff,
+ smb_fname->base_name);
}
return result;
}
static ssize_t smb_time_audit_listxattr(struct vfs_handle_struct *handle,
- const char *path, char *list,
+ const struct smb_filename *smb_fname,
+ char *list,
size_t size)
{
ssize_t result;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_LISTXATTR(handle, path, list, size);
+ result = SMB_VFS_NEXT_LISTXATTR(handle, smb_fname, list, size);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("listxattr", timediff, path);
+ smb_time_audit_log_fname("listxattr", timediff,
+ smb_fname->base_name);
}
return result;
}
static int smb_time_audit_removexattr(struct vfs_handle_struct *handle,
- const char *path, const char *name)
+ const struct smb_filename *smb_fname,
+ const char *name)
{
int result;
struct timespec ts1,ts2;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_REMOVEXATTR(handle, path, name);
+ result = SMB_VFS_NEXT_REMOVEXATTR(handle, smb_fname, name);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("removexattr", timediff, path);
+ smb_time_audit_log_fname("removexattr", timediff,
+ smb_fname->base_name);
}
return result;
}
static int smb_time_audit_setxattr(struct vfs_handle_struct *handle,
- const char *path, const char *name,
- const void *value, size_t size,
- int flags)
+ const struct smb_filename *smb_fname,
+ 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_SETXATTR(handle, path, name, value, size,
+ result = SMB_VFS_NEXT_SETXATTR(handle, smb_fname, 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_fname("setxattr", timediff, path);
+ smb_time_audit_log_fname("setxattr", timediff,
+ smb_fname->base_name);
}
return result;
return result;
}
-static bool smb_time_audit_is_offline(struct vfs_handle_struct *handle,
- const struct smb_filename *fname,
- SMB_STRUCT_STAT *sbuf)
-{
- bool result;
- struct timespec ts1,ts2;
- double timediff;
-
- clock_gettime_mono(&ts1);
- 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_smb_fname("is_offline", timediff, fname);
- }
-
- return result;
-}
-
-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_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_smb_fname("set_offline", timediff, fname);
- }
-
- return result;
-}
-
static NTSTATUS smb_time_audit_durable_cookie(struct vfs_handle_struct *handle,
struct files_struct *fsp,
TALLOC_CTX *mem_ctx,
.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,
- .snap_check_path_fn = smb_time_audit_snap_check_path,
- .snap_create_fn = smb_time_audit_snap_create,
- .snap_delete_fn = smb_time_audit_snap_delete,
+ .get_dfs_referrals_fn = smb_time_audit_get_dfs_referrals,
.opendir_fn = smb_time_audit_opendir,
.fdopendir_fn = smb_time_audit_fdopendir,
.readdir_fn = smb_time_audit_readdir,
.realpath_fn = smb_time_audit_realpath,
.chflags_fn = smb_time_audit_chflags,
.file_id_create_fn = smb_time_audit_file_id_create,
+ .copy_chunk_send_fn = smb_time_audit_copy_chunk_send,
+ .copy_chunk_recv_fn = smb_time_audit_copy_chunk_recv,
+ .get_compression_fn = smb_time_audit_get_compression,
+ .set_compression_fn = smb_time_audit_set_compression,
+ .snap_check_path_fn = smb_time_audit_snap_check_path,
+ .snap_create_fn = smb_time_audit_snap_create,
+ .snap_delete_fn = smb_time_audit_snap_delete,
.streaminfo_fn = smb_time_audit_streaminfo,
.get_real_filename_fn = smb_time_audit_get_real_filename,
.connectpath_fn = smb_time_audit_connectpath,
.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,
- .get_compression_fn = smb_time_audit_get_compression,
- .set_compression_fn = smb_time_audit_set_compression,
- .readdir_attr_fn = smb_time_audit_readdir_attr,
+ .fsctl_fn = smb_time_audit_fsctl,
+ .get_dos_attributes_fn = smb_time_get_dos_attributes,
+ .fget_dos_attributes_fn = smb_time_fget_dos_attributes,
+ .set_dos_attributes_fn = smb_time_set_dos_attributes,
+ .fset_dos_attributes_fn = smb_time_fset_dos_attributes,
.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,
+ .audit_file_fn = smb_time_audit_audit_file,
.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,
.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,
+ .readdir_attr_fn = smb_time_audit_readdir_attr,
};
-NTSTATUS vfs_time_audit_init(void);
-NTSTATUS vfs_time_audit_init(void)
+NTSTATUS vfs_time_audit_init(TALLOC_CTX *);
+NTSTATUS vfs_time_audit_init(TALLOC_CTX *ctx)
{
+ smb_vfs_assert_all_fns(&vfs_time_audit_fns, "time_audit");
+
audit_timeout = (double)lp_parm_int(-1, "time_audit", "timeout",
10000) / 1000.0;
return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "time_audit",