diff options
author | Samuel Cabrero <scabrero@suse.de> | 2019-02-26 13:58:43 +0100 |
---|---|---|
committer | Samuel Cabrero <scabrero@sn-devel-184> | 2020-03-20 15:36:32 +0000 |
commit | 3719de010703ff6deb16b76cd968cee8b6ac1811 (patch) | |
tree | d920539d8d04fa4e18f84c16caa20f287897253c /source3/smbd/server.c | |
parent | 20542bcfa9ba7b722e569a8ffbd4bfb41963349e (diff) | |
download | samba-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.c | 17 |
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); |