diff options
author | Stefan Metzmacher <metze@samba.org> | 2019-01-17 16:27:10 +0100 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2019-02-05 15:33:25 +0100 |
commit | 37b9360c714f1913e5107a5882d551bc35a20b24 (patch) | |
tree | d1963ef7a375dddd981d9f8babadfa3b8e4e03aa /source4/smbd | |
parent | 676a2fcfdf043cee82a47c8b340671c351e5e75c (diff) | |
download | samba-37b9360c714f1913e5107a5882d551bc35a20b24.tar.gz |
s4:server: add support for 'smbcontrol samba shutdown'
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13752
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Björn Baumbach <bbaumbach@samba.org>
(cherry picked from commit 832776c0fcf7cc658c128765514755c2d15b06a6)
Diffstat (limited to 'source4/smbd')
-rw-r--r-- | source4/smbd/server.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/source4/smbd/server.c b/source4/smbd/server.c index 274a45d600c..05d62c9a03c 100644 --- a/source4/smbd/server.c +++ b/source4/smbd/server.c @@ -44,6 +44,8 @@ #include "nsswitch/winbind_client.h" #include "libds/common/roles.h" #include "lib/util/tfork.h" +#include "dsdb/samdb/ldb_modules/util.h" +#include "lib/util/server_id.h" #ifdef HAVE_PTHREAD #include <pthread.h> @@ -250,6 +252,31 @@ static void prime_ldb_databases(struct tevent_context *event_ctx) /* + called from 'smbcontrol samba shutdown' + */ +static void samba_parent_shutdown(struct imessaging_context *msg, + void *private_data, + uint32_t msg_type, + struct server_id src, + DATA_BLOB *data) +{ + struct server_state *state = + talloc_get_type_abort(private_data, + struct server_state); + struct server_id_buf src_buf; + struct server_id dst = imessaging_get_server_id(msg); + struct server_id_buf dst_buf; + + DBG_ERR("samba_shutdown of %s %s: from %s\n", + state->binary_name, + server_id_str_buf(dst, &dst_buf), + server_id_str_buf(src, &src_buf)); + + TALLOC_FREE(state); + exit(0); +} + +/* called when a fatal condition occurs in a child task */ static NTSTATUS samba_terminate(struct irpc_message *msg, @@ -283,10 +310,19 @@ static NTSTATUS setup_parent_messaging(struct server_state *state, return status; } + status = imessaging_register(msg, state, MSG_SHUTDOWN, + samba_parent_shutdown); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + status = IRPC_REGISTER(msg, irpc, SAMBA_TERMINATE, samba_terminate, state); + if (!NT_STATUS_IS_OK(status)) { + return status; + } - return status; + return NT_STATUS_OK; } |