summaryrefslogtreecommitdiff
path: root/source4/smbd
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2019-01-17 16:27:10 +0100
committerKarolin Seeger <kseeger@samba.org>2019-02-05 15:33:25 +0100
commit37b9360c714f1913e5107a5882d551bc35a20b24 (patch)
treed1963ef7a375dddd981d9f8babadfa3b8e4e03aa /source4/smbd
parent676a2fcfdf043cee82a47c8b340671c351e5e75c (diff)
downloadsamba-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.c38
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;
}