s3: smbd: Call smbd_fsctl_torture_async_sleep() when we get FSCTL_SMBTORTURE_FSP_ASYN...
authorJeremy Allison <jra@samba.org>
Thu, 5 Aug 2021 23:07:09 +0000 (16:07 -0700)
committerJule Anger <janger@samba.org>
Tue, 17 Aug 2021 07:43:21 +0000 (07:43 +0000)
Now all we need is the client-side test.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14769

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
(cherry picked from commit c551d33c6bd2e74ea3a36bec5575a70d6833b98a)

source3/smbd/smb2_ioctl_smbtorture.c

index 43abef78f3e23ff89d9b6815283378d18a2ae656..9a259fb0dbfa9d12d8c25e7adc7d04d182358fd2 100644 (file)
@@ -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;
        }