ctdb-server: Remove duplicate logic
[samba4-gss.git] / source4 / lib / messaging / messaging_handlers.c
blob57e3e1c8f1b5a40fdfd37a69eba3e55ff607c811
1 /*
2 Unix SMB/CIFS implementation.
4 Handers for non core Samba internal messages
6 Handlers for messages that are only included in developer and self test
7 builds.
9 Copyright (C) Andrew Bartlett <abartlet@samba.org> 2018
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 3 of the License, or
14 (at your option) any later version.
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with this program. If not, see <http://www.gnu.org/licenses/>.
25 #include "includes.h"
26 #include "lib/util/server_id.h"
27 #include "messaging/messaging.h"
28 #include "messaging/messaging_internal.h"
30 #if defined(DEVELOPER) || defined(ENABLE_SELFTEST)
33 * Inject a fault into the currently running process
35 static void do_inject_fault(struct imessaging_context *msg,
36 void *private_data,
37 uint32_t msg_type,
38 struct server_id src,
39 size_t num_fds,
40 int *fds,
41 DATA_BLOB *data)
43 int sig;
44 struct server_id_buf tmp;
46 if (num_fds != 0) {
47 DBG_WARNING("Received %zu fds, ignoring message\n", num_fds);
48 return;
51 if (data->length != sizeof(sig)) {
52 DBG_ERR("Process %s sent bogus signal injection request\n",
53 server_id_str_buf(src, &tmp));
54 return;
57 sig = *(int *)data->data;
58 if (sig == -1) {
59 DBG_ERR("Process %s requested an iternal failure, "
60 "calling exit(1)\n",
61 server_id_str_buf(src, &tmp));
62 exit(1);
65 #if HAVE_STRSIGNAL
66 DBG_ERR("Process %s requested injection of signal %d (%s)\n",
67 server_id_str_buf(src, &tmp),
68 sig,
69 strsignal(sig));
70 #else
71 DBG_ERR("Process %s requested injection of signal %d\n",
72 server_id_str_buf(src, &tmp),
73 sig);
74 #endif
76 kill(getpid(), sig);
80 * Cause the current process to sleep for a specified number of seconds
82 static void do_sleep(struct imessaging_context *msg,
83 void *private_data,
84 uint32_t msg_type,
85 struct server_id src,
86 size_t num_fds,
87 int *fds,
88 DATA_BLOB *data)
90 unsigned int seconds;
91 struct server_id_buf tmp;
93 if (num_fds != 0) {
94 DBG_WARNING("Received %zu fds, ignoring message\n", num_fds);
95 return;
98 if (data->length != sizeof(seconds)) {
99 DBG_ERR("Process %s sent bogus sleep request\n",
100 server_id_str_buf(src, &tmp));
101 return;
104 seconds = *(unsigned int *)data->data;
105 DBG_ERR("Process %s requested a sleep of %u seconds\n",
106 server_id_str_buf(src, &tmp),
107 seconds);
108 sleep(seconds);
109 DBG_ERR("Restarting after %u second sleep requested by process %s\n",
110 seconds,
111 server_id_str_buf(src, &tmp));
115 * Register the extra messaging handlers
117 NTSTATUS imessaging_register_extra_handlers(struct imessaging_context *msg)
119 NTSTATUS status;
121 status = imessaging_register(
122 msg, NULL, MSG_SMB_INJECT_FAULT, do_inject_fault);
123 if (!NT_STATUS_IS_OK(status)) {
124 return status;
127 status = imessaging_register(msg, NULL, MSG_SMB_SLEEP, do_sleep);
128 if (!NT_STATUS_IS_OK(status)) {
129 return status;
132 return NT_STATUS_OK;
135 #endif /* defined(DEVELOPER) || defined(ENABLE_SELFTEST) */