smbd: Add extra VFS hooks to get the posix ACL as a blob
[metze/samba/wip.git] / source3 / modules / vfs_full_audit.c
index 48198e7fa5b3627af3316123d6cf1c125b596723..392baeadd0a299cf238c0c7b9585f1ba5bc63d8c 100644 (file)
@@ -175,6 +175,8 @@ typedef enum _vfs_op_type {
 
        SMB_VFS_OP_SYS_ACL_GET_FILE,
        SMB_VFS_OP_SYS_ACL_GET_FD,
+       SMB_VFS_OP_SYS_ACL_BLOB_GET_FILE,
+       SMB_VFS_OP_SYS_ACL_BLOB_GET_FD,
        SMB_VFS_OP_SYS_ACL_SET_FILE,
        SMB_VFS_OP_SYS_ACL_SET_FD,
        SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE,
@@ -284,6 +286,8 @@ static struct {
        { 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" },
+       { SMB_VFS_OP_SYS_ACL_BLOB_GET_FD,       "sys_acl_blob_get_fd" },
        { SMB_VFS_OP_SYS_ACL_SET_FILE,  "sys_acl_set_file" },
        { SMB_VFS_OP_SYS_ACL_SET_FD,    "sys_acl_set_fd" },
        { SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE,   "sys_acl_delete_def_file" },
@@ -1821,6 +1825,39 @@ static SMB_ACL_T smb_full_audit_sys_acl_get_fd(vfs_handle_struct *handle,
        return result;
 }
 
+static int smb_full_audit_sys_acl_blob_get_file(vfs_handle_struct *handle,
+                                               const char *path_p,
+                                               SMB_ACL_TYPE_T type, 
+                                               TALLOC_CTX *mem_ctx, 
+                                               char **blob_description,
+                                               DATA_BLOB *blob)
+{
+       SMB_ACL_T result;
+
+       result = SMB_VFS_NEXT_SYS_ACL_BLOB_GET_FILE(handle, path_p, type, mem_ctx, blob_description, blob);
+
+       do_log(SMB_VFS_OP_SYS_ACL_BLOB_GET_FILE,  (result >= 0), handle,
+              "%s", path_p);
+
+       return result;
+}
+
+static int smb_full_audit_sys_acl_blob_get_fd(vfs_handle_struct *handle,
+                                             files_struct *fsp, 
+                                             TALLOC_CTX *mem_ctx, 
+                                             char **blob_description,
+                                             DATA_BLOB *blob)
+{
+       SMB_ACL_T result;
+
+       result = SMB_VFS_NEXT_SYS_ACL_BLOB_GET_FD(handle, fsp, mem_ctx, blob_description,blob);
+
+       do_log(SMB_VFS_OP_SYS_ACL_BLOB_GET_FD,  (result >= 0), handle,
+              "%s", fsp_str_do_log(fsp));
+
+       return result;
+}
+
 static int smb_full_audit_sys_acl_set_file(vfs_handle_struct *handle,
 
                                  const char *name, SMB_ACL_TYPE_T acltype,