s3:smbd: pass (raw) ev to SMB_VFS_GET_DOS_ATTRIBUTES_SEND() instead of smb_vfs_ev_glue
[kamenim/samba-autobuild/.git] / source3 / modules / vfs_full_audit.c
index 5d35c34037190dfe34826008437d9dc2e056fd70..fcfb024d493a6a7721139ef83834e34664f1d3ee 100644 (file)
@@ -69,6 +69,7 @@
 #include "lib/util/tevent_unix.h"
 #include "libcli/security/sddl.h"
 #include "passdb/machine_sid.h"
+#include "lib/util/tevent_ntstatus.h"
 
 static int vfs_full_audit_debug_level = DBGC_VFS;
 
@@ -110,7 +111,6 @@ typedef enum _vfs_op_type {
        SMB_VFS_OP_MKDIR,
        SMB_VFS_OP_RMDIR,
        SMB_VFS_OP_CLOSEDIR,
-       SMB_VFS_OP_INIT_SEARCH_OP,
 
        /* File operations */
 
@@ -164,12 +164,13 @@ typedef enum _vfs_op_type {
        SMB_VFS_OP_BRL_LOCK_WINDOWS,
        SMB_VFS_OP_BRL_UNLOCK_WINDOWS,
        SMB_VFS_OP_BRL_CANCEL_WINDOWS,
-       SMB_VFS_OP_STRICT_LOCK,
-       SMB_VFS_OP_STRICT_UNLOCK,
+       SMB_VFS_OP_STRICT_LOCK_CHECK,
        SMB_VFS_OP_TRANSLATE_NAME,
        SMB_VFS_OP_FSCTL,
-       SMB_VFS_OP_COPY_CHUNK_SEND,
-       SMB_VFS_OP_COPY_CHUNK_RECV,
+       SMB_VFS_OP_OFFLOAD_READ_SEND,
+       SMB_VFS_OP_OFFLOAD_READ_RECV,
+       SMB_VFS_OP_OFFLOAD_WRITE_SEND,
+       SMB_VFS_OP_OFFLOAD_WRITE_RECV,
        SMB_VFS_OP_GET_COMPRESSION,
        SMB_VFS_OP_SET_COMPRESSION,
        SMB_VFS_OP_SNAP_CHECK_PATH,
@@ -178,6 +179,8 @@ typedef enum _vfs_op_type {
 
        /* DOS attribute operations. */
        SMB_VFS_OP_GET_DOS_ATTRIBUTES,
+       SMB_VFS_OP_GET_DOS_ATTRIBUTES_SEND,
+       SMB_VFS_OP_GET_DOS_ATTRIBUTES_RECV,
        SMB_VFS_OP_FGET_DOS_ATTRIBUTES,
        SMB_VFS_OP_SET_DOS_ATTRIBUTES,
        SMB_VFS_OP_FSET_DOS_ATTRIBUTES,
@@ -191,9 +194,6 @@ typedef enum _vfs_op_type {
 
        /* POSIX ACL operations. */
 
-       SMB_VFS_OP_CHMOD_ACL,
-       SMB_VFS_OP_FCHMOD_ACL,
-
        SMB_VFS_OP_SYS_ACL_GET_FILE,
        SMB_VFS_OP_SYS_ACL_GET_FD,
        SMB_VFS_OP_SYS_ACL_BLOB_GET_FILE,
@@ -204,6 +204,8 @@ typedef enum _vfs_op_type {
 
        /* EA operations. */
        SMB_VFS_OP_GETXATTR,
+       SMB_VFS_OP_GETXATTRAT_SEND,
+       SMB_VFS_OP_GETXATTRAT_RECV,
        SMB_VFS_OP_FGETXATTR,
        SMB_VFS_OP_LISTXATTR,
        SMB_VFS_OP_FLISTXATTR,
@@ -255,7 +257,6 @@ static struct {
        { SMB_VFS_OP_MKDIR,     "mkdir" },
        { SMB_VFS_OP_RMDIR,     "rmdir" },
        { SMB_VFS_OP_CLOSEDIR,  "closedir" },
-       { SMB_VFS_OP_INIT_SEARCH_OP, "init_search_op" },
        { SMB_VFS_OP_OPEN,      "open" },
        { SMB_VFS_OP_CREATE_FILE, "create_file" },
        { SMB_VFS_OP_CLOSE,     "close" },
@@ -306,18 +307,21 @@ static struct {
        { SMB_VFS_OP_BRL_LOCK_WINDOWS,  "brl_lock_windows" },
        { SMB_VFS_OP_BRL_UNLOCK_WINDOWS, "brl_unlock_windows" },
        { SMB_VFS_OP_BRL_CANCEL_WINDOWS, "brl_cancel_windows" },
-       { SMB_VFS_OP_STRICT_LOCK, "strict_lock" },
-       { SMB_VFS_OP_STRICT_UNLOCK, "strict_unlock" },
+       { SMB_VFS_OP_STRICT_LOCK_CHECK, "strict_lock_check" },
        { SMB_VFS_OP_TRANSLATE_NAME,    "translate_name" },
        { SMB_VFS_OP_FSCTL,             "fsctl" },
-       { SMB_VFS_OP_COPY_CHUNK_SEND,   "copy_chunk_send" },
-       { SMB_VFS_OP_COPY_CHUNK_RECV,   "copy_chunk_recv" },
+       { SMB_VFS_OP_OFFLOAD_READ_SEND, "offload_read_send" },
+       { SMB_VFS_OP_OFFLOAD_READ_RECV, "offload_read_recv" },
+       { SMB_VFS_OP_OFFLOAD_WRITE_SEND,        "offload_write_send" },
+       { SMB_VFS_OP_OFFLOAD_WRITE_RECV,        "offload_write_recv" },
        { SMB_VFS_OP_GET_COMPRESSION,   "get_compression" },
        { SMB_VFS_OP_SET_COMPRESSION,   "set_compression" },
        { SMB_VFS_OP_SNAP_CHECK_PATH, "snap_check_path" },
        { SMB_VFS_OP_SNAP_CREATE, "snap_create" },
        { SMB_VFS_OP_SNAP_DELETE, "snap_delete" },
        { SMB_VFS_OP_GET_DOS_ATTRIBUTES, "get_dos_attributes" },
+       { SMB_VFS_OP_GET_DOS_ATTRIBUTES_SEND, "get_dos_attributes_send" },
+       { SMB_VFS_OP_GET_DOS_ATTRIBUTES_RECV, "get_dos_attributes_recv" },
        { SMB_VFS_OP_FGET_DOS_ATTRIBUTES, "fget_dos_attributes" },
        { SMB_VFS_OP_SET_DOS_ATTRIBUTES, "set_dos_attributes" },
        { SMB_VFS_OP_FSET_DOS_ATTRIBUTES, "fset_dos_attributes" },
@@ -325,8 +329,6 @@ static struct {
        { SMB_VFS_OP_GET_NT_ACL,        "get_nt_acl" },
        { SMB_VFS_OP_FSET_NT_ACL,       "fset_nt_acl" },
        { SMB_VFS_OP_AUDIT_FILE,        "audit_file" },
-       { SMB_VFS_OP_CHMOD_ACL, "chmod_acl" },
-       { SMB_VFS_OP_FCHMOD_ACL,        "fchmod_acl" },
        { SMB_VFS_OP_SYS_ACL_GET_FILE,  "sys_acl_get_file" },
        { SMB_VFS_OP_SYS_ACL_GET_FD,    "sys_acl_get_fd" },
        { SMB_VFS_OP_SYS_ACL_BLOB_GET_FILE,     "sys_acl_blob_get_file" },
@@ -335,6 +337,8 @@ static struct {
        { SMB_VFS_OP_SYS_ACL_SET_FD,    "sys_acl_set_fd" },
        { SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE,   "sys_acl_delete_def_file" },
        { SMB_VFS_OP_GETXATTR,  "getxattr" },
+       { SMB_VFS_OP_GETXATTRAT_SEND, "getxattrat_send" },
+       { SMB_VFS_OP_GETXATTRAT_RECV, "getxattrat_recv" },
        { SMB_VFS_OP_FGETXATTR, "fgetxattr" },
        { SMB_VFS_OP_LISTXATTR, "listxattr" },
        { SMB_VFS_OP_FLISTXATTR,        "flistxattr" },
@@ -355,16 +359,87 @@ static struct {
 static int audit_syslog_facility(vfs_handle_struct *handle)
 {
        static const struct enum_list enum_log_facilities[] = {
-               { LOG_USER, "USER" },
-               { LOG_LOCAL0, "LOCAL0" },
-               { LOG_LOCAL1, "LOCAL1" },
-               { LOG_LOCAL2, "LOCAL2" },
-               { LOG_LOCAL3, "LOCAL3" },
-               { LOG_LOCAL4, "LOCAL4" },
-               { LOG_LOCAL5, "LOCAL5" },
-               { LOG_LOCAL6, "LOCAL6" },
-               { LOG_LOCAL7, "LOCAL7" },
-               { -1, NULL}
+#ifdef LOG_AUTH
+               { LOG_AUTH,             "AUTH" },
+#endif
+#ifdef LOG_AUTHPRIV
+               { LOG_AUTHPRIV,         "AUTHPRIV" },
+#endif
+#ifdef LOG_AUDIT
+               { LOG_AUDIT,            "AUDIT" },
+#endif
+#ifdef LOG_CONSOLE
+               { LOG_CONSOLE,          "CONSOLE" },
+#endif
+#ifdef LOG_CRON
+               { LOG_CRON,             "CRON" },
+#endif
+#ifdef LOG_DAEMON
+               { LOG_DAEMON,           "DAEMON" },
+#endif
+#ifdef LOG_FTP
+               { LOG_FTP,              "FTP" },
+#endif
+#ifdef LOG_INSTALL
+               { LOG_INSTALL,          "INSTALL" },
+#endif
+#ifdef LOG_KERN
+               { LOG_KERN,             "KERN" },
+#endif
+#ifdef LOG_LAUNCHD
+               { LOG_LAUNCHD,          "LAUNCHD" },
+#endif
+#ifdef LOG_LFMT
+               { LOG_LFMT,             "LFMT" },
+#endif
+#ifdef LOG_LPR
+               { LOG_LPR,              "LPR" },
+#endif
+#ifdef LOG_MAIL
+               { LOG_MAIL,             "MAIL" },
+#endif
+#ifdef LOG_MEGASAFE
+               { LOG_MEGASAFE,         "MEGASAFE" },
+#endif
+#ifdef LOG_NETINFO
+               { LOG_NETINFO,          "NETINFO" },
+#endif
+#ifdef LOG_NEWS
+               { LOG_NEWS,             "NEWS" },
+#endif
+#ifdef LOG_NFACILITIES
+               { LOG_NFACILITIES,      "NFACILITIES" },
+#endif
+#ifdef LOG_NTP
+               { LOG_NTP,              "NTP" },
+#endif
+#ifdef LOG_RAS
+               { LOG_RAS,              "RAS" },
+#endif
+#ifdef LOG_REMOTEAUTH
+               { LOG_REMOTEAUTH,       "REMOTEAUTH" },
+#endif
+#ifdef LOG_SECURITY
+               { LOG_SECURITY,         "SECURITY" },
+#endif
+#ifdef LOG_SYSLOG
+               { LOG_SYSLOG,           "SYSLOG" },
+#endif
+#ifdef LOG_USER
+               { LOG_USER,             "USER" },
+#endif
+#ifdef LOG_UUCP
+               { LOG_UUCP,             "UUCP" },
+#endif
+               { LOG_LOCAL0,           "LOCAL0" },
+               { LOG_LOCAL1,           "LOCAL1" },
+               { LOG_LOCAL2,           "LOCAL2" },
+               { LOG_LOCAL3,           "LOCAL3" },
+               { LOG_LOCAL4,           "LOCAL4" },
+               { LOG_LOCAL5,           "LOCAL5" },
+               { LOG_LOCAL6,           "LOCAL6" },
+               { LOG_LOCAL7,           "LOCAL7" },
+               { -1,                   NULL }
        };
 
        int facility;
@@ -385,7 +460,7 @@ static int audit_syslog_priority(vfs_handle_struct *handle)
                { LOG_NOTICE, "NOTICE" },
                { LOG_INFO, "INFO" },
                { LOG_DEBUG, "DEBUG" },
-               { -1, NULL}
+               { -1, NULL }
        };
 
        int priority;
@@ -520,6 +595,9 @@ static TALLOC_CTX *do_log_ctx(void)
         return tmp_do_log_ctx;
 }
 
+static void do_log(vfs_op_type op, bool success, vfs_handle_struct *handle,
+                  const char *format, ...) PRINTF_ATTRIBUTE(4, 5);
+
 static void do_log(vfs_op_type op, bool success, vfs_handle_struct *handle,
                   const char *format, ...)
 {
@@ -580,7 +658,8 @@ static void do_log(vfs_op_type op, bool success, vfs_handle_struct *handle,
 /**
  * Return a string using the do_log_ctx()
  */
-static const char *smb_fname_str_do_log(const struct smb_filename *smb_fname)
+static const char *smb_fname_str_do_log(const struct smb_filename *cwd,
+                               const struct smb_filename *smb_fname)
 {
        char *fname = NULL;
        NTSTATUS status;
@@ -588,6 +667,32 @@ static const char *smb_fname_str_do_log(const struct smb_filename *smb_fname)
        if (smb_fname == NULL) {
                return "";
        }
+
+       if (smb_fname->base_name[0] != '/') {
+               char *abs_name = NULL;
+               struct smb_filename *fname_copy = cp_smb_filename(
+                                                       do_log_ctx(),
+                                                       smb_fname);
+               if (fname_copy == NULL) {
+                       return "";
+               }
+
+               if (!ISDOT(smb_fname->base_name)) {
+                       abs_name = talloc_asprintf(do_log_ctx(),
+                                       "%s/%s",
+                                       cwd->base_name,
+                                       smb_fname->base_name);
+               } else {
+                       abs_name = talloc_strdup(do_log_ctx(),
+                                       cwd->base_name);
+               }
+               if (abs_name == NULL) {
+                       return "";
+               }
+               fname_copy->base_name = abs_name;
+               smb_fname = fname_copy;
+       }
+
        status = get_full_smb_filename(do_log_ctx(), smb_fname, &fname);
        if (!NT_STATUS_IS_OK(status)) {
                return "";
@@ -600,7 +705,7 @@ static const char *smb_fname_str_do_log(const struct smb_filename *smb_fname)
  */
 static const char *fsp_str_do_log(const struct files_struct *fsp)
 {
-       return smb_fname_str_do_log(fsp->fsp_name);
+       return smb_fname_str_do_log(fsp->conn->cwd_fname, fsp->fsp_name);
 }
 
 /* Implementation of vfs_ops.  Pass everything on to the default
@@ -610,6 +715,7 @@ static int smb_full_audit_connect(vfs_handle_struct *handle,
                         const char *svc, const char *user)
 {
        int result;
+       const char *none[] = { "none" };
        struct vfs_full_audit_private_data *pd = NULL;
 
        result = SMB_VFS_NEXT_CONNECT(handle, svc, user);
@@ -649,10 +755,10 @@ static int smb_full_audit_connect(vfs_handle_struct *handle,
 
        pd->success_ops = init_bitmap(
                pd, lp_parm_string_list(SNUM(handle->conn), "full_audit",
-                                       "success", NULL));
+                                       "success", none));
        pd->failure_ops = init_bitmap(
                pd, lp_parm_string_list(SNUM(handle->conn), "full_audit",
-                                       "failure", NULL));
+                                       "failure", none));
 
        /* Store the private data. */
        SMB_VFS_HANDLE_SET_DATA(handle, pd, NULL,
@@ -928,14 +1034,6 @@ static int smb_full_audit_closedir(vfs_handle_struct *handle,
        return result;
 }
 
-static void smb_full_audit_init_search_op(vfs_handle_struct *handle,
-                       DIR *dirp)
-{
-       SMB_VFS_NEXT_INIT_SEARCH_OP(handle, dirp);
-
-       do_log(SMB_VFS_OP_INIT_SEARCH_OP, True, handle, "");
-}
-
 static int smb_full_audit_open(vfs_handle_struct *handle,
                               struct smb_filename *smb_fname,
                               files_struct *fsp, int flags, mode_t mode)
@@ -946,7 +1044,7 @@ static int smb_full_audit_open(vfs_handle_struct *handle,
 
        do_log(SMB_VFS_OP_OPEN, (result >= 0), handle, "%s|%s",
               ((flags & O_WRONLY) || (flags & O_RDWR))?"w":"r",
-              smb_fname_str_do_log(smb_fname));
+              smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname));
 
        return result;
 }
@@ -1020,7 +1118,8 @@ static NTSTATUS smb_full_audit_create_file(vfs_handle_struct *handle,
        do_log(SMB_VFS_OP_CREATE_FILE, (NT_STATUS_IS_OK(result)), handle,
               "0x%x|%s|%s|%s", access_mask,
               create_options & FILE_DIRECTORY_FILE ? "dir" : "file",
-              str_create_disposition, smb_fname_str_do_log(smb_fname));
+              str_create_disposition,
+               smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname));
 
        return result;
 }
@@ -1037,19 +1136,6 @@ static int smb_full_audit_close(vfs_handle_struct *handle, files_struct *fsp)
        return result;
 }
 
-static ssize_t smb_full_audit_read(vfs_handle_struct *handle, files_struct *fsp,
-                         void *data, size_t n)
-{
-       ssize_t result;
-
-       result = SMB_VFS_NEXT_READ(handle, fsp, data, n);
-
-       do_log(SMB_VFS_OP_READ, (result >= 0), handle, "%s",
-              fsp_str_do_log(fsp));
-
-       return result;
-}
-
 static ssize_t smb_full_audit_pread(vfs_handle_struct *handle, files_struct *fsp,
                           void *data, size_t n, off_t offset)
 {
@@ -1134,19 +1220,6 @@ static ssize_t smb_full_audit_pread_recv(struct tevent_req *req,
        return state->ret;
 }
 
-static ssize_t smb_full_audit_write(vfs_handle_struct *handle, files_struct *fsp,
-                          const void *data, size_t n)
-{
-       ssize_t result;
-
-       result = SMB_VFS_NEXT_WRITE(handle, fsp, data, n);
-
-       do_log(SMB_VFS_OP_WRITE, (result >= 0), handle, "%s",
-              fsp_str_do_log(fsp));
-
-       return result;
-}
-
 static ssize_t smb_full_audit_pwrite(vfs_handle_struct *handle, files_struct *fsp,
                            const void *data, size_t n,
                            off_t offset)
@@ -1285,20 +1358,8 @@ static int smb_full_audit_rename(vfs_handle_struct *handle,
        result = SMB_VFS_NEXT_RENAME(handle, smb_fname_src, smb_fname_dst);
 
        do_log(SMB_VFS_OP_RENAME, (result >= 0), handle, "%s|%s",
-              smb_fname_str_do_log(smb_fname_src),
-              smb_fname_str_do_log(smb_fname_dst));
-
-       return result;    
-}
-
-static int smb_full_audit_fsync(vfs_handle_struct *handle, files_struct *fsp)
-{
-       int result;
-       
-       result = SMB_VFS_NEXT_FSYNC(handle, fsp);
-
-       do_log(SMB_VFS_OP_FSYNC, (result >= 0), handle, "%s",
-              fsp_str_do_log(fsp));
+              smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname_src),
+              smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname_dst));
 
        return result;    
 }
@@ -1380,7 +1441,7 @@ static int smb_full_audit_stat(vfs_handle_struct *handle,
        result = SMB_VFS_NEXT_STAT(handle, smb_fname);
 
        do_log(SMB_VFS_OP_STAT, (result >= 0), handle, "%s",
-              smb_fname_str_do_log(smb_fname));
+              smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname));
 
        return result;    
 }
@@ -1406,7 +1467,7 @@ static int smb_full_audit_lstat(vfs_handle_struct *handle,
        result = SMB_VFS_NEXT_LSTAT(handle, smb_fname);
 
        do_log(SMB_VFS_OP_LSTAT, (result >= 0), handle, "%s",
-              smb_fname_str_do_log(smb_fname));
+              smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname));
 
        return result;    
 }
@@ -1419,7 +1480,7 @@ static uint64_t smb_full_audit_get_alloc_size(vfs_handle_struct *handle,
        result = SMB_VFS_NEXT_GET_ALLOC_SIZE(handle, fsp, sbuf);
 
        do_log(SMB_VFS_OP_GET_ALLOC_SIZE, (result != (uint64_t)-1), handle,
-                       "%llu", result);
+                       "%llu", (unsigned long long)result);
 
        return result;
 }
@@ -1432,7 +1493,7 @@ static int smb_full_audit_unlink(vfs_handle_struct *handle,
        result = SMB_VFS_NEXT_UNLINK(handle, smb_fname);
 
        do_log(SMB_VFS_OP_UNLINK, (result >= 0), handle, "%s",
-              smb_fname_str_do_log(smb_fname));
+              smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname));
 
        return result;
 }
@@ -1521,14 +1582,15 @@ static int smb_full_audit_chdir(vfs_handle_struct *handle,
        return result;
 }
 
-static char *smb_full_audit_getwd(vfs_handle_struct *handle)
+static struct smb_filename *smb_full_audit_getwd(vfs_handle_struct *handle,
+                               TALLOC_CTX *ctx)
 {
-       char *result;
+       struct smb_filename *result;
 
-       result = SMB_VFS_NEXT_GETWD(handle);
+       result = SMB_VFS_NEXT_GETWD(handle, ctx);
        
        do_log(SMB_VFS_OP_GETWD, (result != NULL), handle, "%s",
-               result == NULL? "" : result);
+               result == NULL? "" : result->base_name);
 
        return result;
 }
@@ -1538,11 +1600,42 @@ static int smb_full_audit_ntimes(vfs_handle_struct *handle,
                                 struct smb_file_time *ft)
 {
        int result;
+       time_t create_time = convert_timespec_to_time_t(ft->create_time);
+       time_t atime = convert_timespec_to_time_t(ft->atime);
+       time_t mtime = convert_timespec_to_time_t(ft->mtime);
+       time_t ctime = convert_timespec_to_time_t(ft->ctime);
+       const char *create_time_str = "";
+       const char *atime_str = "";
+       const char *mtime_str = "";
+       const char *ctime_str = "";
+       TALLOC_CTX *frame = talloc_stackframe();
 
        result = SMB_VFS_NEXT_NTIMES(handle, smb_fname, ft);
 
-       do_log(SMB_VFS_OP_NTIMES, (result >= 0), handle, "%s",
-              smb_fname_str_do_log(smb_fname));
+       if (create_time > 0) {
+               create_time_str = timestring(frame, create_time);
+       }
+       if (atime > 0) {
+               atime_str = timestring(frame, atime);
+       }
+       if (mtime > 0) {
+               mtime_str = timestring(frame, mtime);
+       }
+       if (ctime > 0) {
+               ctime_str = timestring(frame, ctime);
+       }
+
+       do_log(SMB_VFS_OP_NTIMES,
+              (result >= 0),
+              handle,
+              "%s|%s|%s|%s|%s",
+              smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname),
+              create_time_str,
+              atime_str,
+              mtime_str,
+              ctime_str);
+
+       TALLOC_FREE(frame);
 
        return result;
 }
@@ -1684,16 +1777,18 @@ static int smb_full_audit_mknod(vfs_handle_struct *handle,
        return result;
 }
 
-static char *smb_full_audit_realpath(vfs_handle_struct *handle,
-                           const char *path)
+static struct smb_filename *smb_full_audit_realpath(vfs_handle_struct *handle,
+                               TALLOC_CTX *ctx,
+                               const struct smb_filename *smb_fname)
 {
-       char *result;
+       struct smb_filename *result_fname = NULL;
 
-       result = SMB_VFS_NEXT_REALPATH(handle, path);
+       result_fname = SMB_VFS_NEXT_REALPATH(handle, ctx, smb_fname);
 
-       do_log(SMB_VFS_OP_REALPATH, (result != NULL), handle, "%s", path);
+       do_log(SMB_VFS_OP_REALPATH, (result_fname != NULL), handle, "%s",
+                       smb_fname->base_name);
 
-       return result;
+       return result_fname;
 }
 
 static int smb_full_audit_chflags(vfs_handle_struct *handle,
@@ -1763,14 +1858,14 @@ static int smb_full_audit_get_real_filename(struct vfs_handle_struct *handle,
 }
 
 static const char *smb_full_audit_connectpath(vfs_handle_struct *handle,
-                                             const char *fname)
+                                       const struct smb_filename *smb_fname)
 {
        const char *result;
 
-       result = SMB_VFS_NEXT_CONNECTPATH(handle, fname);
+       result = SMB_VFS_NEXT_CONNECTPATH(handle, smb_fname);
 
        do_log(SMB_VFS_OP_CONNECTPATH, result != NULL, handle,
-              "%s", fname);
+              "%s", smb_fname->base_name);
 
        return result;
 }
@@ -1788,7 +1883,10 @@ static NTSTATUS smb_full_audit_brl_lock_windows(struct vfs_handle_struct *handle
        do_log(SMB_VFS_OP_BRL_LOCK_WINDOWS, NT_STATUS_IS_OK(result), handle,
            "%s:%llu-%llu. type=%d. blocking=%d",
               fsp_str_do_log(brl_fsp(br_lck)),
-           plock->start, plock->size, plock->lock_type, blocking_lock);
+              (unsigned long long)plock->start,
+              (unsigned long long)plock->size,
+              plock->lock_type,
+              blocking_lock);
 
        return result;
 }
@@ -1805,8 +1903,9 @@ static bool smb_full_audit_brl_unlock_windows(struct vfs_handle_struct *handle,
 
        do_log(SMB_VFS_OP_BRL_UNLOCK_WINDOWS, (result == 0), handle,
               "%s:%llu-%llu:%d", fsp_str_do_log(brl_fsp(br_lck)),
-              plock->start,
-           plock->size, plock->lock_type);
+              (unsigned long long)plock->start,
+              (unsigned long long)plock->size,
+              plock->lock_type);
 
        return result;
 }
@@ -1821,38 +1920,30 @@ static bool smb_full_audit_brl_cancel_windows(struct vfs_handle_struct *handle,
 
        do_log(SMB_VFS_OP_BRL_CANCEL_WINDOWS, (result == 0), handle,
               "%s:%llu-%llu:%d", fsp_str_do_log(brl_fsp(br_lck)),
-              plock->start,
-           plock->size, plock->lock_type);
+              (unsigned long long)plock->start,
+              (unsigned long long)plock->size,
+              plock->lock_type);
 
        return result;
 }
 
-static bool smb_full_audit_strict_lock(struct vfs_handle_struct *handle,
-                                      struct files_struct *fsp,
-                                      struct lock_struct *plock)
+static bool smb_full_audit_strict_lock_check(struct vfs_handle_struct *handle,
+                                            struct files_struct *fsp,
+                                            struct lock_struct *plock)
 {
        bool result;
 
-       result = SMB_VFS_NEXT_STRICT_LOCK(handle, fsp, plock);
+       result = SMB_VFS_NEXT_STRICT_LOCK_CHECK(handle, fsp, plock);
 
-       do_log(SMB_VFS_OP_STRICT_LOCK, result, handle,
-           "%s:%llu-%llu:%d", fsp_str_do_log(fsp), plock->start,
-           plock->size, plock->lock_type);
+       do_log(SMB_VFS_OP_STRICT_LOCK_CHECK, result, handle,
+              "%s:%llu-%llu:%d", fsp_str_do_log(fsp),
+              (unsigned long long)plock->start,
+              (unsigned long long)plock->size,
+              plock->lock_type);
 
        return result;
 }
 
-static void smb_full_audit_strict_unlock(struct vfs_handle_struct *handle,
-                                        struct files_struct *fsp,
-                                        struct lock_struct *plock)
-{
-       SMB_VFS_NEXT_STRICT_UNLOCK(handle, fsp, plock);
-
-       do_log(SMB_VFS_OP_STRICT_UNLOCK, true, handle,
-           "%s:%llu-%llu:%d", fsp_str_do_log(fsp), plock->start,
-           plock->size, plock->lock_type);
-}
-
 static NTSTATUS smb_full_audit_translate_name(struct vfs_handle_struct *handle,
                                              const char *name,
                                              enum vfs_translate_direction direction,
@@ -1898,36 +1989,72 @@ static NTSTATUS smb_full_audit_fsctl(struct vfs_handle_struct *handle,
        return result;
 }
 
-static struct tevent_req *smb_full_audit_copy_chunk_send(struct vfs_handle_struct *handle,
+static struct tevent_req *smb_full_audit_offload_read_send(
+       TALLOC_CTX *mem_ctx,
+       struct tevent_context *ev,
+       struct vfs_handle_struct *handle,
+       struct files_struct *fsp,
+       uint32_t fsctl,
+       uint32_t ttl,
+       off_t offset,
+       size_t to_copy)
+{
+       struct tevent_req *req = NULL;
+
+       req = SMB_VFS_NEXT_OFFLOAD_READ_SEND(mem_ctx, ev, handle, fsp,
+                                            fsctl, ttl, offset, to_copy);
+
+       do_log(SMB_VFS_OP_OFFLOAD_READ_SEND, req, handle, "");
+
+       return req;
+}
+
+static NTSTATUS smb_full_audit_offload_read_recv(
+       struct tevent_req *req,
+       struct vfs_handle_struct *handle,
+       TALLOC_CTX *mem_ctx,
+       DATA_BLOB *_token_blob)
+{
+       NTSTATUS status;
+
+       status = SMB_VFS_NEXT_OFFLOAD_READ_RECV(req, handle, mem_ctx,
+                                               _token_blob);
+
+       do_log(SMB_VFS_OP_OFFLOAD_READ_RECV, NT_STATUS_IS_OK(status), handle, "");
+
+       return status;
+}
+
+static struct tevent_req *smb_full_audit_offload_write_send(struct vfs_handle_struct *handle,
                                                         TALLOC_CTX *mem_ctx,
                                                         struct tevent_context *ev,
-                                                        struct files_struct *src_fsp,
-                                                        off_t src_off,
+                                                        uint32_t fsctl,
+                                                        DATA_BLOB *token,
+                                                        off_t transfer_offset,
                                                         struct files_struct *dest_fsp,
                                                         off_t dest_off,
-                                                        off_t num,
-                                                        uint32_t flags)
+                                                           off_t num)
 {
        struct tevent_req *req;
 
-       req = SMB_VFS_NEXT_COPY_CHUNK_SEND(handle, mem_ctx, ev, src_fsp,
-                                          src_off, dest_fsp, dest_off, num,
-                                          flags);
+       req = SMB_VFS_NEXT_OFFLOAD_WRITE_SEND(handle, mem_ctx, ev,
+                                          fsctl, token, transfer_offset,
+                                          dest_fsp, dest_off, num);
 
-       do_log(SMB_VFS_OP_COPY_CHUNK_SEND, req, handle, "");
+       do_log(SMB_VFS_OP_OFFLOAD_WRITE_SEND, req, handle, "");
 
        return req;
 }
 
-static NTSTATUS smb_full_audit_copy_chunk_recv(struct vfs_handle_struct *handle,
+static NTSTATUS smb_full_audit_offload_write_recv(struct vfs_handle_struct *handle,
                                               struct tevent_req *req,
                                               off_t *copied)
 {
        NTSTATUS result;
 
-       result = SMB_VFS_NEXT_COPY_CHUNK_RECV(handle, req, copied);
+       result = SMB_VFS_NEXT_OFFLOAD_WRITE_RECV(handle, req, copied);
 
-       do_log(SMB_VFS_OP_COPY_CHUNK_RECV, NT_STATUS_IS_OK(result), handle, "");
+       do_log(SMB_VFS_OP_OFFLOAD_WRITE_RECV, NT_STATUS_IS_OK(result), handle, "");
 
        return result;
 }
@@ -1945,7 +2072,8 @@ static NTSTATUS smb_full_audit_get_compression(vfs_handle_struct *handle,
 
        do_log(SMB_VFS_OP_GET_COMPRESSION, NT_STATUS_IS_OK(result), handle,
               "%s",
-              (fsp ? fsp_str_do_log(fsp) : smb_fname_str_do_log(smb_fname)));
+              (fsp ? fsp_str_do_log(fsp) :
+               smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname)));
 
        return result;
 }
@@ -1976,7 +2104,7 @@ static NTSTATUS smb_full_audit_readdir_attr(struct vfs_handle_struct *handle,
        status = SMB_VFS_NEXT_READDIR_ATTR(handle, fname, mem_ctx, pattr_data);
 
        do_log(SMB_VFS_OP_READDIR_ATTR, NT_STATUS_IS_OK(status), handle, "%s",
-              smb_fname_str_do_log(fname));
+              smb_fname_str_do_log(handle->conn->cwd_fname, fname));
 
        return status;
 }
@@ -1996,11 +2124,132 @@ static NTSTATUS smb_full_audit_get_dos_attributes(
                NT_STATUS_IS_OK(status),
                handle,
                "%s",
-               smb_fname_str_do_log(smb_fname));
+               smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname));
 
        return status;
 }
 
+struct smb_full_audit_get_dos_attributes_state {
+       struct vfs_aio_state aio_state;
+       vfs_handle_struct *handle;
+       files_struct *dir_fsp;
+       const struct smb_filename *smb_fname;
+       uint32_t dosmode;
+};
+
+static void smb_full_audit_get_dos_attributes_done(struct tevent_req *subreq);
+
+static struct tevent_req *smb_full_audit_get_dos_attributes_send(
+               TALLOC_CTX *mem_ctx,
+               struct tevent_context *ev,
+               struct vfs_handle_struct *handle,
+               files_struct *dir_fsp,
+               struct smb_filename *smb_fname)
+{
+       struct tevent_req *req = NULL;
+       struct smb_full_audit_get_dos_attributes_state *state = NULL;
+       struct tevent_req *subreq = NULL;
+
+       req = tevent_req_create(mem_ctx, &state,
+                               struct smb_full_audit_get_dos_attributes_state);
+       if (req == NULL) {
+               do_log(SMB_VFS_OP_GET_DOS_ATTRIBUTES_SEND,
+                      false,
+                      handle,
+                      "%s/%s",
+                      fsp_str_do_log(dir_fsp),
+                      smb_fname->base_name);
+               return NULL;
+       }
+       *state = (struct smb_full_audit_get_dos_attributes_state) {
+               .handle = handle,
+               .dir_fsp = dir_fsp,
+               .smb_fname = smb_fname,
+       };
+
+       subreq = SMB_VFS_NEXT_GET_DOS_ATTRIBUTES_SEND(mem_ctx,
+                                                     ev,
+                                                     handle,
+                                                     dir_fsp,
+                                                     smb_fname);
+       if (tevent_req_nomem(subreq, req)) {
+               do_log(SMB_VFS_OP_GET_DOS_ATTRIBUTES_SEND,
+                      false,
+                      handle,
+                      "%s/%s",
+                      fsp_str_do_log(dir_fsp),
+                      smb_fname->base_name);
+               return tevent_req_post(req, ev);
+       }
+       tevent_req_set_callback(subreq,
+                               smb_full_audit_get_dos_attributes_done,
+                               req);
+
+       do_log(SMB_VFS_OP_GET_DOS_ATTRIBUTES_SEND,
+              true,
+              handle,
+              "%s/%s",
+              fsp_str_do_log(dir_fsp),
+              smb_fname->base_name);
+
+       return req;
+}
+
+static void smb_full_audit_get_dos_attributes_done(struct tevent_req *subreq)
+{
+       struct tevent_req *req =
+               tevent_req_callback_data(subreq,
+               struct tevent_req);
+       struct smb_full_audit_get_dos_attributes_state *state =
+               tevent_req_data(req,
+               struct smb_full_audit_get_dos_attributes_state);
+       NTSTATUS status;
+
+       status = SMB_VFS_NEXT_GET_DOS_ATTRIBUTES_RECV(subreq,
+                                                     &state->aio_state,
+                                                     &state->dosmode);
+       TALLOC_FREE(subreq);
+       if (tevent_req_nterror(req, status)) {
+               return;
+       }
+
+       tevent_req_done(req);
+       return;
+}
+
+static NTSTATUS smb_full_audit_get_dos_attributes_recv(struct tevent_req *req,
+                                               struct vfs_aio_state *aio_state,
+                                               uint32_t *dosmode)
+{
+       struct smb_full_audit_get_dos_attributes_state *state =
+               tevent_req_data(req,
+               struct smb_full_audit_get_dos_attributes_state);
+       NTSTATUS status;
+
+       if (tevent_req_is_nterror(req, &status)) {
+               do_log(SMB_VFS_OP_GET_DOS_ATTRIBUTES_RECV,
+                      false,
+                      state->handle,
+                      "%s/%s",
+                      fsp_str_do_log(state->dir_fsp),
+                      state->smb_fname->base_name);
+               tevent_req_received(req);
+               return status;
+       }
+
+       do_log(SMB_VFS_OP_GET_DOS_ATTRIBUTES_RECV,
+              true,
+              state->handle,
+              "%s/%s",
+              fsp_str_do_log(state->dir_fsp),
+              state->smb_fname->base_name);
+
+       *aio_state = state->aio_state;
+       *dosmode = state->dosmode;
+       tevent_req_received(req);
+       return NT_STATUS_OK;
+}
+
 static NTSTATUS smb_full_audit_fget_dos_attributes(
                                struct vfs_handle_struct *handle,
                                struct files_struct *fsp,
@@ -2036,7 +2285,7 @@ static NTSTATUS smb_full_audit_set_dos_attributes(
                NT_STATUS_IS_OK(status),
                handle,
                "%s",
-               smb_fname_str_do_log(smb_fname));
+               smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname));
 
        return status;
 }
@@ -2089,7 +2338,7 @@ static NTSTATUS smb_full_audit_get_nt_acl(vfs_handle_struct *handle,
                                         mem_ctx, ppdesc);
 
        do_log(SMB_VFS_OP_GET_NT_ACL, NT_STATUS_IS_OK(result), handle,
-              "%s", smb_fname_str_do_log(smb_fname));
+              "%s", smb_fname_str_do_log(handle->conn->cwd_fname, smb_fname));
 
        return result;
 }
@@ -2135,34 +2384,8 @@ static NTSTATUS smb_full_audit_audit_file(struct vfs_handle_struct *handle,
                                        access_denied);
 
        do_log(SMB_VFS_OP_AUDIT_FILE, NT_STATUS_IS_OK(result), handle,
-                       "%s", smb_fname_str_do_log(file));
-
-       return result;
-}
-
-static int smb_full_audit_chmod_acl(vfs_handle_struct *handle,
-                               const struct smb_filename *smb_fname,
-                               mode_t mode)
-{
-       int result;
-       
-       result = SMB_VFS_NEXT_CHMOD_ACL(handle, smb_fname, mode);
-
-       do_log(SMB_VFS_OP_CHMOD_ACL, (result >= 0), handle,
-              "%s|%o", smb_fname->base_name, mode);
-
-       return result;
-}
-
-static int smb_full_audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp,
-                                    mode_t mode)
-{
-       int result;
-       
-       result = SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, mode);
-
-       do_log(SMB_VFS_OP_FCHMOD_ACL, (result >= 0), handle,
-              "%s|%o", fsp_str_do_log(fsp), mode);
+                       "%s",
+                       smb_fname_str_do_log(handle->conn->cwd_fname, file));
 
        return result;
 }
@@ -2285,6 +2508,139 @@ static ssize_t smb_full_audit_getxattr(struct vfs_handle_struct *handle,
        return result;
 }
 
+struct smb_full_audit_getxattrat_state {
+       struct vfs_aio_state aio_state;
+       vfs_handle_struct *handle;
+       files_struct *dir_fsp;
+       const struct smb_filename *smb_fname;
+       const char *xattr_name;
+       ssize_t xattr_size;
+       uint8_t *xattr_value;
+};
+
+static void smb_full_audit_getxattrat_done(struct tevent_req *subreq);
+
+static struct tevent_req *smb_full_audit_getxattrat_send(
+                       TALLOC_CTX *mem_ctx,
+                       struct tevent_context *ev,
+                       struct vfs_handle_struct *handle,
+                       files_struct *dir_fsp,
+                       const struct smb_filename *smb_fname,
+                       const char *xattr_name,
+                       size_t alloc_hint)
+{
+       struct tevent_req *req = NULL;
+       struct tevent_req *subreq = NULL;
+       struct smb_full_audit_getxattrat_state *state = NULL;
+
+       req = tevent_req_create(mem_ctx, &state,
+                               struct smb_full_audit_getxattrat_state);
+       if (req == NULL) {
+               do_log(SMB_VFS_OP_GETXATTRAT_SEND,
+                      false,
+                      handle,
+                      "%s/%s|%s",
+                      fsp_str_do_log(dir_fsp),
+                      smb_fname->base_name,
+                      xattr_name);
+               return NULL;
+       }
+       *state = (struct smb_full_audit_getxattrat_state) {
+               .handle = handle,
+               .dir_fsp = dir_fsp,
+               .smb_fname = smb_fname,
+               .xattr_name = xattr_name,
+       };
+
+       subreq = SMB_VFS_NEXT_GETXATTRAT_SEND(state,
+                                             ev,
+                                             handle,
+                                             dir_fsp,
+                                             smb_fname,
+                                             xattr_name,
+                                             alloc_hint);
+       if (tevent_req_nomem(subreq, req)) {
+               do_log(SMB_VFS_OP_GETXATTRAT_SEND,
+                      false,
+                      handle,
+                      "%s/%s|%s",
+                      fsp_str_do_log(dir_fsp),
+                      smb_fname->base_name,
+                      xattr_name);
+               return tevent_req_post(req, ev);
+       }
+       tevent_req_set_callback(subreq, smb_full_audit_getxattrat_done, req);
+
+       do_log(SMB_VFS_OP_GETXATTRAT_SEND,
+              true,
+              handle,
+              "%s/%s|%s",
+              fsp_str_do_log(dir_fsp),
+              smb_fname->base_name,
+              xattr_name);
+
+       return req;
+}
+
+static void smb_full_audit_getxattrat_done(struct tevent_req *subreq)
+{
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
+       struct smb_full_audit_getxattrat_state *state = tevent_req_data(
+               req, struct smb_full_audit_getxattrat_state);
+
+       state->xattr_size = SMB_VFS_NEXT_GETXATTRAT_RECV(subreq,
+                                                        &state->aio_state,
+                                                        state,
+                                                        &state->xattr_value);
+       TALLOC_FREE(subreq);
+       if (state->xattr_size == -1) {
+               tevent_req_error(req, state->aio_state.error);
+               return;
+       }
+
+       tevent_req_done(req);
+}
+
+static ssize_t smb_full_audit_getxattrat_recv(struct tevent_req *req,
+                                             struct vfs_aio_state *aio_state,
+                                             TALLOC_CTX *mem_ctx,
+                                             uint8_t **xattr_value)
+{
+       struct smb_full_audit_getxattrat_state *state = tevent_req_data(
+               req, struct smb_full_audit_getxattrat_state);
+       ssize_t xattr_size;
+
+       if (tevent_req_is_unix_error(req, &aio_state->error)) {
+               do_log(SMB_VFS_OP_GETXATTRAT_RECV,
+                      false,
+                      state->handle,
+                      "%s/%s|%s",
+                      fsp_str_do_log(state->dir_fsp),
+                      state->smb_fname->base_name,
+                      state->xattr_name);
+               tevent_req_received(req);
+               return -1;
+       }
+
+       do_log(SMB_VFS_OP_GETXATTRAT_RECV,
+              true,
+              state->handle,
+              "%s/%s|%s",
+              fsp_str_do_log(state->dir_fsp),
+              state->smb_fname->base_name,
+              state->xattr_name);
+
+       *aio_state = state->aio_state;
+       xattr_size = state->xattr_size;
+       if (xattr_value != NULL) {
+               *xattr_value = talloc_move(mem_ctx, &state->xattr_value);
+       }
+
+       tevent_req_received(req);
+       return xattr_size;
+}
+
 static ssize_t smb_full_audit_fgetxattr(struct vfs_handle_struct *handle,
                               struct files_struct *fsp,
                               const char *name, void *value, size_t size)
@@ -2486,15 +2842,12 @@ static struct vfs_fn_pointers vfs_full_audit_fns = {
        .mkdir_fn = smb_full_audit_mkdir,
        .rmdir_fn = smb_full_audit_rmdir,
        .closedir_fn = smb_full_audit_closedir,
-       .init_search_op_fn = smb_full_audit_init_search_op,
        .open_fn = smb_full_audit_open,
        .create_file_fn = smb_full_audit_create_file,
        .close_fn = smb_full_audit_close,
-       .read_fn = smb_full_audit_read,
        .pread_fn = smb_full_audit_pread,
        .pread_send_fn = smb_full_audit_pread_send,
        .pread_recv_fn = smb_full_audit_pread_recv,
-       .write_fn = smb_full_audit_write,
        .pwrite_fn = smb_full_audit_pwrite,
        .pwrite_send_fn = smb_full_audit_pwrite_send,
        .pwrite_recv_fn = smb_full_audit_pwrite_recv,
@@ -2502,7 +2855,6 @@ static struct vfs_fn_pointers vfs_full_audit_fns = {
        .sendfile_fn = smb_full_audit_sendfile,
        .recvfile_fn = smb_full_audit_recvfile,
        .rename_fn = smb_full_audit_rename,
-       .fsync_fn = smb_full_audit_fsync,
        .fsync_send_fn = smb_full_audit_fsync_send,
        .fsync_recv_fn = smb_full_audit_fsync_recv,
        .stat_fn = smb_full_audit_stat,
@@ -2531,8 +2883,10 @@ static struct vfs_fn_pointers vfs_full_audit_fns = {
        .realpath_fn = smb_full_audit_realpath,
        .chflags_fn = smb_full_audit_chflags,
        .file_id_create_fn = smb_full_audit_file_id_create,
-       .copy_chunk_send_fn = smb_full_audit_copy_chunk_send,
-       .copy_chunk_recv_fn = smb_full_audit_copy_chunk_recv,
+       .offload_read_send_fn = smb_full_audit_offload_read_send,
+       .offload_read_recv_fn = smb_full_audit_offload_read_recv,
+       .offload_write_send_fn = smb_full_audit_offload_write_send,
+       .offload_write_recv_fn = smb_full_audit_offload_write_recv,
        .get_compression_fn = smb_full_audit_get_compression,
        .set_compression_fn = smb_full_audit_set_compression,
        .snap_check_path_fn =  smb_full_audit_snap_check_path,
@@ -2544,11 +2898,12 @@ static struct vfs_fn_pointers vfs_full_audit_fns = {
        .brl_lock_windows_fn = smb_full_audit_brl_lock_windows,
        .brl_unlock_windows_fn = smb_full_audit_brl_unlock_windows,
        .brl_cancel_windows_fn = smb_full_audit_brl_cancel_windows,
-       .strict_lock_fn = smb_full_audit_strict_lock,
-       .strict_unlock_fn = smb_full_audit_strict_unlock,
+       .strict_lock_check_fn = smb_full_audit_strict_lock_check,
        .translate_name_fn = smb_full_audit_translate_name,
        .fsctl_fn = smb_full_audit_fsctl,
        .get_dos_attributes_fn = smb_full_audit_get_dos_attributes,
+       .get_dos_attributes_send_fn = smb_full_audit_get_dos_attributes_send,
+       .get_dos_attributes_recv_fn = smb_full_audit_get_dos_attributes_recv,
        .fget_dos_attributes_fn = smb_full_audit_fget_dos_attributes,
        .set_dos_attributes_fn = smb_full_audit_set_dos_attributes,
        .fset_dos_attributes_fn = smb_full_audit_fset_dos_attributes,
@@ -2556,8 +2911,6 @@ static struct vfs_fn_pointers vfs_full_audit_fns = {
        .get_nt_acl_fn = smb_full_audit_get_nt_acl,
        .fset_nt_acl_fn = smb_full_audit_fset_nt_acl,
        .audit_file_fn = smb_full_audit_audit_file,
-       .chmod_acl_fn = smb_full_audit_chmod_acl,
-       .fchmod_acl_fn = smb_full_audit_fchmod_acl,
        .sys_acl_get_file_fn = smb_full_audit_sys_acl_get_file,
        .sys_acl_get_fd_fn = smb_full_audit_sys_acl_get_fd,
        .sys_acl_blob_get_file_fn = smb_full_audit_sys_acl_blob_get_file,
@@ -2566,6 +2919,8 @@ static struct vfs_fn_pointers vfs_full_audit_fns = {
        .sys_acl_set_fd_fn = smb_full_audit_sys_acl_set_fd,
        .sys_acl_delete_def_file_fn = smb_full_audit_sys_acl_delete_def_file,
        .getxattr_fn = smb_full_audit_getxattr,
+       .getxattrat_send_fn = smb_full_audit_getxattrat_send,
+       .getxattrat_recv_fn = smb_full_audit_getxattrat_recv,
        .fgetxattr_fn = smb_full_audit_fgetxattr,
        .listxattr_fn = smb_full_audit_listxattr,
        .flistxattr_fn = smb_full_audit_flistxattr,