return NT_STATUS_OK;
}
+static NTSTATUS fsctl_network_resiliency(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct files_struct *in_fsp,
+ DATA_BLOB *in_input,
+ uint32_t in_max_output,
+ DATA_BLOB *out_output)
+{
+ NTSTATUS status;
+ uint32_t in_timeout;
+
+ *out_output = data_blob_null;
+
+ if (in_fsp == NULL) {
+ return NT_STATUS_FILE_CLOSED;
+ }
+
+ if (in_input->length < 8) {
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+
+ in_timeout = IVAL(in_input->data, 0);
+ if (in_timeout > 300000) {
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+
+ in_fsp->op->global->is_resilient = true;
+
+ status = smbXsrv_open_update(in_fsp->op);
+ if (!NT_STATUS_IS_OK(status)) {
+ in_fsp->op->global->is_resilient = false;
+ return status;
+ }
+
+ return NT_STATUS_OK;
+}
+
static void smb2_ioctl_network_fs_copychunk_done(struct tevent_req *subreq);
static void smb2_ioctl_network_fs_offload_read_done(struct tevent_req *subreq);
tevent_req_set_callback(
subreq, smb2_ioctl_network_fs_offload_read_done, req);
return req;
-
+ case FSCTL_LMR_REQ_RESILIENCY:
+ status = fsctl_network_resiliency(state, ev,
+ state->fsp,
+ &state->in_input,
+ state->in_max_output,
+ &state->out_output);
+ if (!tevent_req_nterror(req, status)) {
+ tevent_req_done(req);
+ }
+ return tevent_req_post(req, ev);
+ break;
default: {
uint8_t *out_data = NULL;
uint32_t out_data_len = 0;