From da878ceda5a4058ab54e1f2a9b2f96738720f8d0 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 9 Oct 2012 08:35:04 -0400 Subject: [PATCH] s3:smbd: add exit_server to the smbd_shim hooks This is in preparation of moving sessionid_tdb and conn_tdb to smbd exclusively. metze Signed-off-by: Michael Adam (cherry picked from commit 8a1c7a0a660d78786adac483ecafa157c3a3dc2e) Signed-off-by: Stefan Metzmacher --- source3/lib/smbd_shim.c | 16 ++++++++++++++++ source3/lib/smbd_shim.h | 4 ++++ source3/smbd/proto.h | 7 +++++-- source3/smbd/server.c | 3 +++ source3/smbd/server_exit.c | 4 ++-- source3/torture/vfstest.c | 14 +++++++++++--- 6 files changed, 41 insertions(+), 7 deletions(-) diff --git a/source3/lib/smbd_shim.c b/source3/lib/smbd_shim.c index 78a101c2a78..d5ad5779753 100644 --- a/source3/lib/smbd_shim.c +++ b/source3/lib/smbd_shim.c @@ -98,3 +98,19 @@ void unbecome_root(void) } return; } + +void exit_server(const char *reason) +{ + if (shim.exit_server) { + shim.exit_server(reason); + } + exit(1); +} + +void exit_server_cleanly(const char *const reason) +{ + if (shim.exit_server_cleanly) { + shim.exit_server_cleanly(reason); + } + exit(0); +} diff --git a/source3/lib/smbd_shim.h b/source3/lib/smbd_shim.h index a51decc28c4..1645837f36e 100644 --- a/source3/lib/smbd_shim.h +++ b/source3/lib/smbd_shim.h @@ -46,6 +46,10 @@ struct smbd_shim void (*become_root)(void); void (*unbecome_root)(void); + + void (*exit_server)(const char *const explanation) _NORETURN_; + + void (*exit_server_cleanly)(const char *const explanation) _NORETURN_; }; void set_smbd_shim(const struct smbd_shim *shim_functions); diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index 5d6a2999735..5af4449f799 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -946,11 +946,14 @@ void delete_and_reload_printers(struct tevent_context *ev, bool reload_services(struct smbd_server_connection *sconn, bool (*snumused) (struct smbd_server_connection *, int), bool test); -void exit_server(const char *const explanation); -void exit_server_cleanly(const char *const explanation); NTSTATUS messaging_send_to_children(struct messaging_context *msg_ctx, uint32_t msg_type, DATA_BLOB* data); +/* The following definitions come from smbd/server_exit.c */ + +void smbd_exit_server(const char *reason) _NORETURN_; +void smbd_exit_server_cleanly(const char *const reason) _NORETURN_; + /* The following definitions come from smbd/service.c */ bool set_conn_connectpath(connection_struct *conn, const char *connectpath); diff --git a/source3/smbd/server.c b/source3/smbd/server.c index d34ee4cbf25..8eb3d9ef933 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -1065,6 +1065,9 @@ extern void build_options(bool screen); .become_root = smbd_become_root, .unbecome_root = smbd_unbecome_root, + + .exit_server = smbd_exit_server, + .exit_server_cleanly = smbd_exit_server_cleanly, }; /* diff --git a/source3/smbd/server_exit.c b/source3/smbd/server_exit.c index 517d4c27da6..fa28374ba05 100644 --- a/source3/smbd/server_exit.c +++ b/source3/smbd/server_exit.c @@ -225,12 +225,12 @@ static void exit_server_common(enum server_exit_reason how, exit(0); } -void exit_server(const char *const explanation) +void smbd_exit_server(const char *const explanation) { exit_server_common(SERVER_EXIT_ABNORMAL, explanation); } -void exit_server_cleanly(const char *const explanation) +void smbd_exit_server_cleanly(const char *const explanation) { exit_server_common(SERVER_EXIT_NORMAL, explanation); } diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index 3b474597e9d..72156a5752b 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -33,6 +33,7 @@ #include "serverid.h" #include "messages.h" #include "libcli/security/security.h" +#include "lib/smbd_shim.h" /* List to hold groups of commands */ static struct cmd_list { @@ -405,15 +406,15 @@ static void process_file(struct vfs_state *pvfs, char *filename) { } } -void exit_server(const char *reason) +static void vfstest_exit_server(const char * const reason) { DEBUG(3,("Server exit (%s)\n", (reason ? reason : ""))); exit(0); } -void exit_server_cleanly(const char *const reason) +static void vfstest_exit_server_cleanly(const char * const reason) { - exit_server("normal exit"); + vfstest_exit_server("normal exit"); } struct smb_request *vfstest_get_smbreq(TALLOC_CTX *mem_ctx, @@ -464,6 +465,11 @@ int main(int argc, char *argv[]) POPT_COMMON_SAMBA POPT_TABLEEND }; + static const struct smbd_shim vfstest_shim_fns = + { + .exit_server = vfstest_exit_server, + .exit_server_cleanly = vfstest_exit_server_cleanly, + }; load_case_tables(); @@ -486,6 +492,8 @@ int main(int argc, char *argv[]) facilities. See lib/debug.c */ setup_logging("vfstest", DEBUG_STDOUT); + set_smbd_shim(&vfstest_shim_fns); + /* Load command lists */ cmd_set = vfstest_command_list; -- 2.11.4.GIT