smb2srv_setup_bufinfo(req);
flags = IVAL(req->in.hdr, SMB2_HDR_FLAGS);
- if ((flags & SMB2_HDR_FLAG_CHAINED) && p_req->chained_file_handle) {
- memcpy(req->_chained_file_handle,
- p_req->_chained_file_handle,
- sizeof(req->_chained_file_handle));
- req->chained_file_handle = req->_chained_file_handle;
+ if (flags & SMB2_HDR_FLAG_CHAINED) {
+ if (p_req->chained_file_handle) {
+ memcpy(req->_chained_file_handle,
+ p_req->_chained_file_handle,
+ sizeof(req->_chained_file_handle));
+ req->chained_file_handle = req->_chained_file_handle;
+ }
+ req->chain_status = p_req->chain_status;
}
/*
SSVAL(req->out.body, 0x02, 0);
SIVAL(req->out.body, 0x04, 0);
+ req->chain_status = NT_STATUS_INVALID_PARAMETER;
+
smb2srv_send_reply(req);
}
return NT_STATUS_OK;
}
+ if (!NT_STATUS_IS_OK(req->chain_status)) {
+ smb2srv_send_error(req, req->chain_status);
+ return NT_STATUS_OK;
+ }
+
switch (opcode) {
case SMB2_OP_NEGPROT:
smb2srv_negprot_recv(req);
/* the offset to the next SMB2 Header for chained requests */
uint32_t chain_offset;
+ /* the status we return for following chained requests */
+ NTSTATUS chain_status;
+
/* chained file handle */
uint8_t _chained_file_handle[16];
uint8_t *chained_file_handle;