From a70deab0fb3726611a041c83d616cda2594264c7 Mon Sep 17 00:00:00 2001 From: Gary Lockyer Date: Tue, 11 Dec 2018 11:39:23 +1300 Subject: [PATCH] s3 server: Add support for smbcontrol sleep Add a sleep command that pauses the target process for the specified number of seconds This command is only enabled on self test and developer builds. Signed-off-by: Gary Lockyer Reviewed-by: Andrew Bartlett --- source3/smbd/server.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 68cd1d7bd54..871bb923449 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -193,6 +193,36 @@ static void msg_inject_fault(struct messaging_context *msg, } #endif /* DEVELOPER */ +#if defined(DEVELOPER) || defined(ENABLE_SELFTEST) +/* + * Sleep for the specified number of seconds. + */ +static void msg_sleep(struct messaging_context *msg, + void *private_data, + uint32_t msg_type, + struct server_id src, + DATA_BLOB *data) +{ + unsigned int seconds; + struct server_id_buf tmp; + + if (data->length != sizeof(seconds)) { + DBG_ERR("Process %s sent bogus sleep request\n", + server_id_str_buf(src, &tmp)); + return; + } + + seconds = *(unsigned int *)data->data; + DBG_ERR("Process %s request a sleep of %u seconds\n", + server_id_str_buf(src, &tmp), + seconds); + sleep(seconds); + DBG_ERR("Restarting after %u second sleep requested by process %s\n", + seconds, + server_id_str_buf(src, &tmp)); +} +#endif /* DEVELOPER */ + static NTSTATUS messaging_send_to_children(struct messaging_context *msg_ctx, uint32_t msg_type, DATA_BLOB* data) { @@ -1301,6 +1331,10 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent, msg_inject_fault); #endif +#if defined(DEVELOPER) || defined(ENABLE_SELFTEST) + messaging_register(msg_ctx, NULL, MSG_SMB_SLEEP, msg_sleep); +#endif + if (lp_multicast_dns_register() && (dns_port != 0)) { #ifdef WITH_DNSSD_SUPPORT smbd_setup_mdns_registration(ev_ctx, -- 2.34.1