diff options
-rw-r--r-- | source3/smbd/process.c | 43 | ||||
-rw-r--r-- | source3/smbd/server.c | 45 |
2 files changed, 46 insertions, 42 deletions
diff --git a/source3/smbd/process.c b/source3/smbd/process.c index adfcad1bdc..61db7129b1 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -20,22 +20,8 @@ #include "includes.h" #include "smbd/globals.h" -#include "../librpc/gen_ndr/srv_dfs.h" -#include "../librpc/gen_ndr/srv_dssetup.h" -#include "../librpc/gen_ndr/srv_echo.h" -#include "../librpc/gen_ndr/srv_eventlog.h" -#include "../librpc/gen_ndr/srv_initshutdown.h" -#include "../librpc/gen_ndr/srv_lsa.h" -#include "../librpc/gen_ndr/srv_netlogon.h" -#include "../librpc/gen_ndr/srv_ntsvcs.h" -#include "../librpc/gen_ndr/srv_samr.h" -#include "../librpc/gen_ndr/srv_spoolss.h" -#include "../librpc/gen_ndr/srv_srvsvc.h" -#include "../librpc/gen_ndr/srv_svcctl.h" -#include "../librpc/gen_ndr/srv_winreg.h" -#include "../librpc/gen_ndr/srv_wkssvc.h" +#include "librpc/gen_ndr/netlogon.h" #include "librpc/gen_ndr/messaging.h" -#include "printing/nt_printing_migrate.h" extern bool global_machine_password_needs_changing; @@ -2868,13 +2854,6 @@ fail: return false; } -static bool spoolss_init_cb(void *ptr) -{ - struct messaging_context *msg_ctx = talloc_get_type_abort( - ptr, struct messaging_context); - return nt_printing_tdb_migrate(msg_ctx); -} - /**************************************************************************** Process commands from the client ****************************************************************************/ @@ -2889,7 +2868,6 @@ void smbd_process(struct smbd_server_connection *sconn) struct tsocket_address *remote_address = NULL; const char *remaddr = NULL; int ret; - struct rpc_srv_callbacks spoolss_cb; if (lp_maxprotocol() == PROTOCOL_SMB2 && lp_security() != SEC_SHARE && @@ -3127,25 +3105,6 @@ void smbd_process(struct smbd_server_connection *sconn) exit_server("failed to create smbd_server_connection fde"); } - /* - * Initialize spoolss with an init function to convert printers first. - * static_init_rpc will try to initialize the spoolss server too but you - * can't register it twice. - */ - spoolss_cb.init = spoolss_init_cb; - spoolss_cb.shutdown = NULL; - spoolss_cb.private_data = sconn->msg_ctx; - - if (!NT_STATUS_IS_OK(rpc_winreg_init(NULL))) { - exit(1); - } - - if (!NT_STATUS_IS_OK(rpc_spoolss_init(&spoolss_cb))) { - exit(1); - } - - static_init_rpc; - TALLOC_FREE(frame); while (True) { diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 90756e1df2..ca6f6c8e16 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -29,6 +29,23 @@ #include "libcli/auth/schannel.h" #include "secrets.h" +#include "../librpc/gen_ndr/srv_dfs.h" +#include "../librpc/gen_ndr/srv_dssetup.h" +#include "../librpc/gen_ndr/srv_echo.h" +#include "../librpc/gen_ndr/srv_eventlog.h" +#include "../librpc/gen_ndr/srv_initshutdown.h" +#include "../librpc/gen_ndr/srv_lsa.h" +#include "../librpc/gen_ndr/srv_netlogon.h" +#include "../librpc/gen_ndr/srv_ntsvcs.h" +#include "../librpc/gen_ndr/srv_samr.h" +#include "../librpc/gen_ndr/srv_spoolss.h" +#include "../librpc/gen_ndr/srv_srvsvc.h" +#include "../librpc/gen_ndr/srv_svcctl.h" +#include "../librpc/gen_ndr/srv_winreg.h" +#include "../librpc/gen_ndr/srv_wkssvc.h" + +#include "printing/nt_printing_migrate.h" + static_decl_rpc; #ifdef WITH_DFS @@ -767,6 +784,13 @@ static bool init_structs(void ) return True; } +static bool spoolss_init_cb(void *ptr) +{ + struct messaging_context *msg_ctx = talloc_get_type_abort( + ptr, struct messaging_context); + return nt_printing_tdb_migrate(msg_ctx); +} + /**************************************************************************** main program. ****************************************************************************/ @@ -815,6 +839,7 @@ extern void build_options(bool screen); TALLOC_CTX *frame = talloc_stackframe(); /* Setup tos. */ NTSTATUS status; uint64_t unique_id; + struct rpc_srv_callbacks spoolss_cb; /* Initialize the event context, it will panic on error */ smbd_event_context(); @@ -1111,6 +1136,26 @@ extern void build_options(bool screen); return -1; } + /* + * Initialize spoolss with an init function to convert printers first. + * static_init_rpc will try to initialize the spoolss server too but you + * can't register it twice. + */ + spoolss_cb.init = spoolss_init_cb; + spoolss_cb.shutdown = NULL; + spoolss_cb.private_data = smbd_server_conn->msg_ctx; + + /* Spoolss depends on a winreg pipe, so start it first. */ + if (!NT_STATUS_IS_OK(rpc_winreg_init(NULL))) { + exit(1); + } + + if (!NT_STATUS_IS_OK(rpc_spoolss_init(&spoolss_cb))) { + exit(1); + } + + static_init_rpc; + /* only start the background queue daemon if we are running as a daemon -- bad things will happen if smbd is launched via inetd and we fork a copy of |