summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/lib/smbd_shim.c16
-rw-r--r--source3/lib/smbd_shim.h4
-rw-r--r--source3/smbd/proto.h7
-rw-r--r--source3/smbd/server.c3
-rw-r--r--source3/smbd/server_exit.c4
-rw-r--r--source3/torture/vfstest.c14
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;