s3:utils: let smbstatus report anonymous signing/encryption explicitly
[samba.git] / source3 / modules / offload_token.c
index 3fb84dabdff647076a6a7fb6aae2b775bd51d6c9..3b71a0028fb77f8ecb3045ed3ef6f1116b488a7b 100644 (file)
@@ -241,9 +241,15 @@ NTSTATUS vfs_offload_token_create_blob(TALLOC_CTX *mem_ctx,
        }
 
        /* combine persistent and volatile handles for the resume key */
-       SBVAL(token_blob->data,  0, fsp->op->global->open_persistent_id);
-       SBVAL(token_blob->data,  8, fsp->op->global->open_volatile_id);
-       SIVAL(token_blob->data, 16, fsctl);
+       SBVAL(token_blob->data,
+             SMB_VFS_ODX_TOKEN_OFFSET_PFID,
+             fsp->op->global->open_persistent_id);
+       SBVAL(token_blob->data,
+             SMB_VFS_ODX_TOKEN_OFFSET_VFID,
+             fsp->op->global->open_volatile_id);
+       SIVAL(token_blob->data,
+             SMB_VFS_ODX_TOKEN_OFFSET_FSCTL,
+             fsctl);
 
        return NT_STATUS_OK;
 }
@@ -253,6 +259,8 @@ NTSTATUS vfs_offload_token_check_handles(uint32_t fsctl,
                                         files_struct *src_fsp,
                                         files_struct *dst_fsp)
 {
+       NTSTATUS status;
+
        if (src_fsp->vuid != dst_fsp->vuid) {
                DBG_INFO("copy chunk handles not in the same session.\n");
                return NT_STATUS_ACCESS_DENIED;
@@ -270,23 +278,23 @@ NTSTATUS vfs_offload_token_check_handles(uint32_t fsctl,
                return NT_STATUS_ACCESS_DENIED;
        }
 
-       if (src_fsp->deferred_close != NULL) {
-               DBG_INFO("copy chunk src handle with deferred close.\n");
+       if (src_fsp->fsp_flags.closing) {
+               DBG_INFO("copy chunk src handle with closing in progress.\n");
                return NT_STATUS_ACCESS_DENIED;
        }
 
-       if (dst_fsp->deferred_close != NULL) {
-               DBG_INFO("copy chunk dst handle with deferred close.\n");
+       if (dst_fsp->fsp_flags.closing) {
+               DBG_INFO("copy chunk dst handle with closing in progress.\n");
                return NT_STATUS_ACCESS_DENIED;
        }
 
-       if (src_fsp->is_directory) {
+       if (src_fsp->fsp_flags.is_directory) {
                DBG_INFO("copy chunk no read on src directory handle (%s).\n",
                         smb_fname_str_dbg(src_fsp->fsp_name));
                return NT_STATUS_ACCESS_DENIED;
        }
 
-       if (dst_fsp->is_directory) {
+       if (dst_fsp->fsp_flags.is_directory) {
                DBG_INFO("copy chunk no read on dst directory handle (%s).\n",
                         smb_fname_str_dbg(dst_fsp->fsp_name));
                return NT_STATUS_ACCESS_DENIED;
@@ -311,10 +319,11 @@ NTSTATUS vfs_offload_token_check_handles(uint32_t fsctl,
         *
         * A non writable dst handle also doesn't make sense for other fsctls.
         */
-       if (!CHECK_WRITE(dst_fsp)) {
+       status = check_any_access_fsp(dst_fsp, FILE_WRITE_DATA|FILE_APPEND_DATA);
+       if (!NT_STATUS_IS_OK(status)) {
                DBG_INFO("dest handle not writable (%s).\n",
                        smb_fname_str_dbg(dst_fsp->fsp_name));
-               return NT_STATUS_ACCESS_DENIED;
+               return status;
        }
        /*
         * - The Open.GrantedAccess of the destination file does not include