struct smbd_smb2_read_state {
struct smbd_smb2_request *smb2req;
+ struct smb_request *smbreq;
files_struct *fsp;
uint64_t in_file_id_volatile;
uint32_t in_length;
return NT_STATUS_OK;
}
+static bool smbd_smb2_read_cancel(struct tevent_req *req)
+{
+ struct smbd_smb2_read_state *state =
+ tevent_req_data(req,
+ struct smbd_smb2_read_state);
+
+ state->smb2req->cancelled = true;
+
+ return cancel_smb2_aio(state->smbreq);
+}
+
static struct tevent_req *smbd_smb2_read_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
if (tevent_req_nomem(smbreq, req)) {
return tevent_req_post(req, ev);
}
+ state->smbreq = smbreq;
fsp = file_fsp(smbreq, (uint16_t)in_file_id_volatile);
if (fsp == NULL) {
if (NT_STATUS_IS_OK(status)) {
/*
- * Doing an async read.
+ * Doing an async read, allow this
+ * request to be canceled
*/
+ tevent_req_set_cancel_fn(req, smbd_smb2_read_cancel);
return req;
}