From: Jeremy Allison Date: Thu, 5 Aug 2021 23:07:09 +0000 (-0700) Subject: s3: smbd: Call smbd_fsctl_torture_async_sleep() when we get FSCTL_SMBTORTURE_FSP_ASYN... X-Git-Tag: ldb-2.5.0~989 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c551d33c6bd2e74ea3a36bec5575a70d6833b98a;p=thirdparty%2Fsamba.git s3: smbd: Call smbd_fsctl_torture_async_sleep() when we get FSCTL_SMBTORTURE_FSP_ASYNC_SLEEP. Now all we need is the client-side test. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14769 Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- diff --git a/source3/smbd/smb2_ioctl_smbtorture.c b/source3/smbd/smb2_ioctl_smbtorture.c index 43abef78f3e..9a259fb0dbf 100644 --- a/source3/smbd/smb2_ioctl_smbtorture.c +++ b/source3/smbd/smb2_ioctl_smbtorture.c @@ -31,7 +31,6 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SMB2 -#if 0 struct async_sleep_state { struct smbd_server_connection *sconn; files_struct *fsp; @@ -132,7 +131,6 @@ static void smbd_fsctl_torture_async_sleep_done(struct tevent_req *subreq) } tevent_req_done(req); } -#endif struct tevent_req *smb2_ioctl_smbtorture(uint32_t ctl_code, struct tevent_context *ev, @@ -187,6 +185,35 @@ struct tevent_req *smb2_ioctl_smbtorture(uint32_t ctl_code, state->smb2req->xconn->smb2.smbtorture.read_body_padding = 8; tevent_req_done(req); return tevent_req_post(req, ev); + + case FSCTL_SMBTORTURE_FSP_ASYNC_SLEEP: { + struct tevent_req *subreq = NULL; + + /* Data is 1 byte of CVAL stored seconds to delay for. */ + if (state->in_input.length != 1) { + tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER); + return tevent_req_post(req, ev); + } + if (state->fsp == NULL) { + tevent_req_nterror(req, NT_STATUS_INVALID_HANDLE); + return tevent_req_post(req, ev); + } + + subreq = smbd_fsctl_torture_async_sleep_send( + req, + ev, + state->fsp, + CVAL(state->in_input.data,0)); + if (subreq == NULL) { + tevent_req_nterror(req, NT_STATUS_NO_MEMORY); + return tevent_req_post(req, ev); + } + tevent_req_set_callback(subreq, + smbd_fsctl_torture_async_sleep_done, + req); + return req; + } + default: goto not_supported; }