diff options
-rw-r--r-- | source3/lib/smbd_shim.c | 16 | ||||
-rw-r--r-- | source3/lib/smbd_shim.h | 4 | ||||
-rw-r--r-- | source3/smbd/proto.h | 7 | ||||
-rw-r--r-- | source3/smbd/server.c | 3 | ||||
-rw-r--r-- | source3/smbd/server_exit.c | 4 | ||||
-rw-r--r-- | 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 78a101c2a7..d5ad577975 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 a51decc28c..1645837f36 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 1b3c23227d..a01629aaea 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -963,11 +963,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 d34ee4cbf2..8eb3d9ef93 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 517d4c27da..fa28374ba0 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 3b474597e9..72156a5752 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; |