s4 messaging: Add support for smbcontrol sleep
[bbaumbach/samba-autobuild/.git] / source4 / lib / messaging / messaging_handlers.c
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;
 }