1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

librpc:core: Split dcesrv context init and endpoint servers init

The S4 server will initialize the endpoint servers specified in smb.conf,
but the S3 server need to initialize all registered endpoint servers (the
embedded ones).

Signed-off-by: Samuel Cabrero <scabrero@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
Samuel Cabrero 2019-02-05 18:54:02 +01:00 committed by Andrew Bartlett
parent fee5c6a424
commit 39dfc5c82b
4 changed files with 30 additions and 13 deletions

View File

@ -2320,18 +2320,10 @@ static NTSTATUS dcesrv_process_ncacn_packet(struct dcesrv_connection *dce_conn,
_PUBLIC_ NTSTATUS dcesrv_init_context(TALLOC_CTX *mem_ctx,
struct loadparm_context *lp_ctx,
const char **endpoint_servers,
struct dcesrv_context_callbacks *cb,
struct dcesrv_context **_dce_ctx)
{
NTSTATUS status;
struct dcesrv_context *dce_ctx;
int i;
if (!endpoint_servers) {
DEBUG(0,("dcesrv_init_context: no endpoint servers configured\n"));
return NT_STATUS_INTERNAL_ERROR;
}
dce_ctx = talloc_zero(mem_ctx, struct dcesrv_context);
NT_STATUS_HAVE_NO_MEMORY(dce_ctx);
@ -2353,6 +2345,21 @@ _PUBLIC_ NTSTATUS dcesrv_init_context(TALLOC_CTX *mem_ctx,
dce_ctx->callbacks = *cb;
}
*_dce_ctx = dce_ctx;
return NT_STATUS_OK;
}
_PUBLIC_ NTSTATUS dcesrv_init_ep_servers(struct dcesrv_context *dce_ctx,
const char **endpoint_servers)
{
NTSTATUS status;
int i;
if (endpoint_servers == NULL) {
DBG_ERR("No endpoint servers configured\n");
return NT_STATUS_INTERNAL_ERROR;
}
for (i=0;endpoint_servers[i];i++) {
const struct dcesrv_endpoint_server *ep_server;
@ -2370,7 +2377,6 @@ _PUBLIC_ NTSTATUS dcesrv_init_context(TALLOC_CTX *mem_ctx,
}
}
*_dce_ctx = dce_ctx;
return NT_STATUS_OK;
}

View File

@ -444,11 +444,12 @@ NTSTATUS dcesrv_interface_register(struct dcesrv_context *dce_ctx,
const struct dcesrv_interface *iface,
const struct security_descriptor *sd);
NTSTATUS dcerpc_register_ep_server(const struct dcesrv_endpoint_server *ep_server);
NTSTATUS dcesrv_init_ep_servers(struct dcesrv_context *dce_ctx,
const char **ep_servers);
const struct dcesrv_endpoint_server *dcesrv_ep_server_byname(const char *name);
NTSTATUS dcesrv_init_context(TALLOC_CTX *mem_ctx,
struct loadparm_context *lp_ctx,
const char **endpoint_servers,
struct dcesrv_context_callbacks *cb,
struct dcesrv_context **_dce_ctx);

View File

@ -129,6 +129,7 @@ static NTSTATUS dcesrv_task_init(struct task_server *task)
{
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
struct dcesrv_context *dce_ctx;
const char **ep_servers = NULL;
dcerpc_server_init(task->lp_ctx);
@ -136,13 +137,18 @@ static NTSTATUS dcesrv_task_init(struct task_server *task)
status = dcesrv_init_context(task->event_ctx,
task->lp_ctx,
lpcfg_dcerpc_endpoint_servers(task->lp_ctx),
&srv_callbacks,
&dce_ctx);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
ep_servers = lpcfg_dcerpc_endpoint_servers(task->lp_ctx);
status = dcesrv_init_ep_servers(dce_ctx, ep_servers);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
/* Make sure the directory for NCALRPC exists */
if (!directory_exist(lpcfg_ncalrpc_dir(task->lp_ctx))) {
mkdir(lpcfg_ncalrpc_dir(task->lp_ctx), 0755);

View File

@ -483,11 +483,15 @@ static bool test_start_dcerpc_server(struct torture_context *tctx,
address, NULL);
torture_assert_ntstatus_ok(tctx, status, "starting smb server");
status = dcesrv_init_context(tctx, tctx->lp_ctx, endpoints,
&srv_cb, &dce_ctx);
status = dcesrv_init_context(tctx, tctx->lp_ctx, &srv_cb, &dce_ctx);
torture_assert_ntstatus_ok(tctx, status,
"unable to initialize DCE/RPC server");
status = dcesrv_init_ep_servers(dce_ctx, endpoints);
torture_assert_ntstatus_ok(tctx,
status,
"unable to initialize DCE/RPC ep servers");
for (e=dce_ctx->endpoint_list;e;e=e->next) {
status = dcesrv_add_ep(dce_ctx, tctx->lp_ctx,
e, tctx->ev,