s4 messaging: Add support for smbcontrol sleep
authorGary Lockyer <gary@catalyst.net.nz>
Mon, 10 Dec 2018 22:43:52 +0000 (11:43 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 19 Dec 2018 03:52:59 +0000 (04:52 +0100)
Add a sleep command that pauses the target process for the specified
number of seconds

This command is only enabled on developer and self test builds.

Signed-off-by: Gary Lockyer <gary@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
selftest/knownfail.d/smbcontrol [deleted file]
source4/lib/messaging/messaging_handlers.c

diff --git a/selftest/knownfail.d/smbcontrol b/selftest/knownfail.d/smbcontrol
deleted file mode 100644 (file)
index 8d92d92..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-^samba.tests.blackbox.smbcontrol_process.samba.tests.blackbox.smbcontrol_process.SmbcontrolProcessBlockboxTests.test_sleep\(preforkrestartdc:local\)
-^samba.tests.blackbox.smbcontrol_process.python3.samba.tests.blackbox.smbcontrol_process.SmbcontrolProcessBlockboxTests.test_sleep\(preforkrestartdc:local\)
index 97b326ee568e14ba273e1247e7cba1be38a82763..aee7b66e306bbc71d088464a356f1c2c48736453 100644 (file)
@@ -69,6 +69,34 @@ static void do_inject_fault(struct imessaging_context *msg,
        kill(getpid(), sig);
 }
 
+/*
+ * Cause the current process to sleep for a specified number of seconds
+ */
+static void do_sleep(struct imessaging_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 requested 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));
+}
+
 /*
  * Register the extra messaging handlers
  */
@@ -82,6 +110,11 @@ NTSTATUS imessaging_register_extra_handlers(struct imessaging_context *msg)
                return status;
        }
 
+       status = imessaging_register(msg, NULL, MSG_SMB_SLEEP, do_sleep);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
        return NT_STATUS_OK;
 }