s3: VFS: Change SMB_VFS_GETXATTR to use const struct smb_filename * instead of const...
[amitay/samba.git] / source3 / modules / vfs_time_audit.c
index 8d88d1713c9ff081d7708b67f984ce0b1def42f0..761711b7423109acc08721210c59744b9de61371 100644 (file)
@@ -1886,7 +1886,8 @@ static struct tevent_req *smb_time_audit_copy_chunk_send(struct vfs_handle_struc
                                                         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;
@@ -1901,7 +1902,7 @@ static struct tevent_req *smb_time_audit_copy_chunk_send(struct vfs_handle_struc
        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);
        }
@@ -2168,21 +2169,23 @@ static int smb_time_audit_fchmod_acl(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,
-                                                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;
@@ -2210,17 +2213,18 @@ static SMB_ACL_T smb_time_audit_sys_acl_get_fd(vfs_handle_struct *handle,
 
 
 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;
 
@@ -2254,7 +2258,7 @@ static int smb_time_audit_sys_acl_blob_get_fd(vfs_handle_struct *handle,
 }
 
 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)
 {
@@ -2263,13 +2267,14 @@ static int smb_time_audit_sys_acl_set_file(vfs_handle_struct *handle,
        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;
@@ -2296,39 +2301,43 @@ static int smb_time_audit_sys_acl_set_fd(vfs_handle_struct *handle,
 }
 
 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;
@@ -2356,7 +2365,8 @@ static ssize_t smb_time_audit_fgetxattr(struct vfs_handle_struct *handle,
 }
 
 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;
@@ -2364,12 +2374,13 @@ static ssize_t smb_time_audit_listxattr(struct vfs_handle_struct *handle,
        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;
@@ -2396,19 +2407,21 @@ static ssize_t smb_time_audit_flistxattr(struct vfs_handle_struct *handle,
 }
 
 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;
@@ -2435,22 +2448,25 @@ static int smb_time_audit_fremovexattr(struct vfs_handle_struct *handle,
 }
 
 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;
@@ -2495,45 +2511,6 @@ static bool smb_time_audit_aio_force(struct vfs_handle_struct *handle,
        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,
@@ -2712,8 +2689,6 @@ static struct vfs_fn_pointers vfs_time_audit_fns = {
        .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,
@@ -2721,9 +2696,11 @@ static struct vfs_fn_pointers vfs_time_audit_fns = {
 };
 
 
-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",