}
/* 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;
}
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;
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;
*
* 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