summaryrefslogtreecommitdiff
path: root/source3/smbd/server.c
diff options
context:
space:
mode:
authorSamuel Cabrero <scabrero@suse.de>2019-02-26 13:58:43 +0100
committerSamuel Cabrero <scabrero@sn-devel-184>2020-03-20 15:36:32 +0000
commit3719de010703ff6deb16b76cd968cee8b6ac1811 (patch)
treed920539d8d04fa4e18f84c16caa20f287897253c /source3/smbd/server.c
parent20542bcfa9ba7b722e569a8ffbd4bfb41963349e (diff)
downloadsamba-3719de010703ff6deb16b76cd968cee8b6ac1811.tar.gz
s3:rpc_server: Initialize global dcesrv_context for embedded services
Signed-off-by: Samuel Cabrero <scabrero@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'source3/smbd/server.c')
-rw-r--r--source3/smbd/server.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index caa28e0a772..0ddc9bbd438 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -70,6 +70,7 @@ struct smbd_parent_context {
struct tevent_context *ev_ctx;
struct messaging_context *msg_ctx;
+ struct dcesrv_context *dce_ctx;
/* the list of listening sockets */
struct smbd_open_socket *sockets;
@@ -942,6 +943,7 @@ static void smbd_accept_connection(struct tevent_context *ev,
struct smbd_open_socket *s = talloc_get_type_abort(private_data,
struct smbd_open_socket);
struct messaging_context *msg_ctx = s->parent->msg_ctx;
+ struct dcesrv_context *dce_ctx = s->parent->dce_ctx;
struct sockaddr_storage addr;
socklen_t in_addrlen = sizeof(addr);
int fd;
@@ -960,7 +962,7 @@ static void smbd_accept_connection(struct tevent_context *ev,
if (s->parent->interactive) {
reinit_after_fork(msg_ctx, ev, true, NULL);
- smbd_process(ev, msg_ctx, fd, true);
+ smbd_process(ev, msg_ctx, dce_ctx, fd, true);
exit_server_cleanly("end of interactive mode");
return;
}
@@ -1009,7 +1011,7 @@ static void smbd_accept_connection(struct tevent_context *ev,
smb_panic("reinit_after_fork() failed");
}
- smbd_process(ev, msg_ctx, fd, false);
+ smbd_process(ev, msg_ctx, dce_ctx, fd, false);
exit:
exit_server_cleanly("end of child");
return;
@@ -1627,6 +1629,7 @@ extern void build_options(bool screen);
NTSTATUS status;
struct tevent_context *ev_ctx;
struct messaging_context *msg_ctx;
+ struct dcesrv_context *dce_ctx = NULL;
struct server_id server_id;
struct tevent_signal *se;
int profiling_level;
@@ -1830,6 +1833,11 @@ extern void build_options(bool screen);
exit(1);
}
+ dce_ctx = global_dcesrv_context();
+ if (dce_ctx == NULL) {
+ exit(1);
+ }
+
/*
* Reloading of the printers will not work here as we don't have a
* server info and rpc services set up. It will be called later.
@@ -1925,6 +1933,7 @@ extern void build_options(bool screen);
parent->interactive = interactive;
parent->ev_ctx = ev_ctx;
parent->msg_ctx = msg_ctx;
+ parent->dce_ctx = dce_ctx;
am_parent = parent;
se = tevent_add_signal(parent->ev_ctx,
@@ -2087,7 +2096,7 @@ extern void build_options(bool screen);
}
}
- status = dcesrv_ep_setup(ev_ctx, msg_ctx);
+ status = dcesrv_init(ev_ctx, ev_ctx, msg_ctx, dce_ctx);
if (!NT_STATUS_IS_OK(status)) {
DBG_ERR("Failed to setup RPC server: %s\n", nt_errstr(status));
exit_daemon("Samba cannot setup ep pipe", EACCES);
@@ -2153,7 +2162,7 @@ extern void build_options(bool screen);
/* Stop zombies */
smbd_setup_sig_chld_handler(parent);
- smbd_process(ev_ctx, msg_ctx, sock, true);
+ smbd_process(ev_ctx, msg_ctx, dce_ctx, sock, true);
exit_server_cleanly(NULL);
return(0);