mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
r26265: Use task-provided loadparm context in nbt and rpc servers.
(This used to be commit 75cb7676fd
)
This commit is contained in:
parent
1fbdd6ef1d
commit
c9f0011bc5
@ -98,6 +98,7 @@ struct nbtd_iface_name *nbtd_find_iname(struct nbtd_interface *iface,
|
||||
start listening on the given address
|
||||
*/
|
||||
static NTSTATUS nbtd_add_socket(struct nbtd_server *nbtsrv,
|
||||
struct loadparm_context *lp_ctx,
|
||||
const char *bind_address,
|
||||
const char *address,
|
||||
const char *bcast,
|
||||
@ -136,7 +137,7 @@ static NTSTATUS nbtd_add_socket(struct nbtd_server *nbtsrv,
|
||||
}
|
||||
|
||||
bcast_address = socket_address_from_strings(bcast_nbtsock, bcast_nbtsock->sock->backend_name,
|
||||
bcast, lp_nbt_port(global_loadparm));
|
||||
bcast, lp_nbt_port(lp_ctx));
|
||||
if (!bcast_address) {
|
||||
talloc_free(iface);
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
@ -145,7 +146,7 @@ static NTSTATUS nbtd_add_socket(struct nbtd_server *nbtsrv,
|
||||
status = socket_listen(bcast_nbtsock->sock, bcast_address, 0, 0);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
DEBUG(0,("Failed to bind to %s:%d - %s\n",
|
||||
bcast, lp_nbt_port(global_loadparm), nt_errstr(status)));
|
||||
bcast, lp_nbt_port(lp_ctx), nt_errstr(status)));
|
||||
talloc_free(iface);
|
||||
return status;
|
||||
}
|
||||
@ -163,12 +164,12 @@ static NTSTATUS nbtd_add_socket(struct nbtd_server *nbtsrv,
|
||||
|
||||
unicast_address = socket_address_from_strings(iface->nbtsock,
|
||||
iface->nbtsock->sock->backend_name,
|
||||
bind_address, lp_nbt_port(global_loadparm));
|
||||
bind_address, lp_nbt_port(lp_ctx));
|
||||
|
||||
status = socket_listen(iface->nbtsock->sock, unicast_address, 0, 0);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
DEBUG(0,("Failed to bind to %s:%d - %s\n",
|
||||
bind_address, lp_nbt_port(global_loadparm), nt_errstr(status)));
|
||||
bind_address, lp_nbt_port(lp_ctx), nt_errstr(status)));
|
||||
talloc_free(iface);
|
||||
return status;
|
||||
}
|
||||
@ -215,7 +216,7 @@ static NTSTATUS nbtd_add_wins_socket(struct nbtd_server *nbtsrv)
|
||||
/*
|
||||
setup our listening sockets on the configured network interfaces
|
||||
*/
|
||||
NTSTATUS nbtd_startup_interfaces(struct nbtd_server *nbtsrv)
|
||||
NTSTATUS nbtd_startup_interfaces(struct nbtd_server *nbtsrv, struct loadparm_context *lp_ctx)
|
||||
{
|
||||
int num_interfaces = iface_count();
|
||||
int i;
|
||||
@ -224,7 +225,7 @@ NTSTATUS nbtd_startup_interfaces(struct nbtd_server *nbtsrv)
|
||||
|
||||
/* if we are allowing incoming packets from any address, then
|
||||
we also need to bind to the wildcard address */
|
||||
if (!lp_bind_interfaces_only(global_loadparm)) {
|
||||
if (!lp_bind_interfaces_only(lp_ctx)) {
|
||||
const char *primary_address;
|
||||
|
||||
/* the primary address is the address we will return
|
||||
@ -234,12 +235,13 @@ NTSTATUS nbtd_startup_interfaces(struct nbtd_server *nbtsrv)
|
||||
primary_address = iface_n_ip(0);
|
||||
} else {
|
||||
primary_address = inet_ntoa(interpret_addr2(
|
||||
lp_netbios_name(global_loadparm)));
|
||||
lp_netbios_name(lp_ctx)));
|
||||
}
|
||||
primary_address = talloc_strdup(tmp_ctx, primary_address);
|
||||
NT_STATUS_HAVE_NO_MEMORY(primary_address);
|
||||
|
||||
status = nbtd_add_socket(nbtsrv,
|
||||
lp_ctx,
|
||||
"0.0.0.0",
|
||||
primary_address,
|
||||
talloc_strdup(tmp_ctx, "255.255.255.255"),
|
||||
@ -258,11 +260,12 @@ NTSTATUS nbtd_startup_interfaces(struct nbtd_server *nbtsrv)
|
||||
bcast = talloc_strdup(tmp_ctx, bcast);
|
||||
netmask = talloc_strdup(tmp_ctx, iface_n_netmask(i));
|
||||
|
||||
status = nbtd_add_socket(nbtsrv, address, address, bcast, netmask);
|
||||
status = nbtd_add_socket(nbtsrv, lp_ctx,
|
||||
address, address, bcast, netmask);
|
||||
NT_STATUS_NOT_OK_RETURN(status);
|
||||
}
|
||||
|
||||
if (lp_wins_server_list(global_loadparm)) {
|
||||
if (lp_wins_server_list(lp_ctx)) {
|
||||
status = nbtd_add_wins_socket(nbtsrv);
|
||||
NT_STATUS_NOT_OK_RETURN(status);
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ static void nbtd_task_init(struct task_server *task)
|
||||
nbtsrv->wins_interface = NULL;
|
||||
|
||||
/* start listening on the configured network interfaces */
|
||||
status = nbtd_startup_interfaces(nbtsrv);
|
||||
status = nbtd_startup_interfaces(nbtsrv, task->lp_ctx);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
task_server_terminate(task, "nbtd failed to setup interfaces");
|
||||
return;
|
||||
|
@ -216,7 +216,9 @@ static const struct stream_server_ops dcesrv_stream_ops = {
|
||||
|
||||
|
||||
|
||||
static NTSTATUS dcesrv_add_ep_unix(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
|
||||
static NTSTATUS dcesrv_add_ep_unix(struct dcesrv_context *dce_ctx,
|
||||
struct loadparm_context *lp_ctx,
|
||||
struct dcesrv_endpoint *e,
|
||||
struct event_context *event_ctx, const struct model_ops *model_ops)
|
||||
{
|
||||
struct dcesrv_socket_context *dcesrv_sock;
|
||||
@ -241,7 +243,9 @@ static NTSTATUS dcesrv_add_ep_unix(struct dcesrv_context *dce_ctx, struct dcesrv
|
||||
return status;
|
||||
}
|
||||
|
||||
static NTSTATUS dcesrv_add_ep_ncalrpc(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
|
||||
static NTSTATUS dcesrv_add_ep_ncalrpc(struct dcesrv_context *dce_ctx,
|
||||
struct loadparm_context *lp_ctx,
|
||||
struct dcesrv_endpoint *e,
|
||||
struct event_context *event_ctx, const struct model_ops *model_ops)
|
||||
{
|
||||
struct dcesrv_socket_context *dcesrv_sock;
|
||||
@ -256,7 +260,7 @@ static NTSTATUS dcesrv_add_ep_ncalrpc(struct dcesrv_context *dce_ctx, struct dce
|
||||
e->ep_description->endpoint = talloc_strdup(dce_ctx, "DEFAULT");
|
||||
}
|
||||
|
||||
full_path = talloc_asprintf(dce_ctx, "%s/%s", lp_ncalrpc_dir(global_loadparm),
|
||||
full_path = talloc_asprintf(dce_ctx, "%s/%s", lp_ncalrpc_dir(lp_ctx),
|
||||
e->ep_description->endpoint);
|
||||
|
||||
dcesrv_sock = talloc(event_ctx, struct dcesrv_socket_context);
|
||||
@ -310,7 +314,9 @@ static NTSTATUS add_socket_rpc_pipe_iface(struct dcesrv_context *dce_ctx, struct
|
||||
return status;
|
||||
}
|
||||
|
||||
static NTSTATUS dcesrv_add_ep_np(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
|
||||
static NTSTATUS dcesrv_add_ep_np(struct dcesrv_context *dce_ctx,
|
||||
struct loadparm_context *lp_ctx,
|
||||
struct dcesrv_endpoint *e,
|
||||
struct event_context *event_ctx, const struct model_ops *model_ops)
|
||||
{
|
||||
NTSTATUS status;
|
||||
@ -357,13 +363,15 @@ static NTSTATUS add_socket_rpc_tcp_iface(struct dcesrv_context *dce_ctx, struct
|
||||
return status;
|
||||
}
|
||||
|
||||
static NTSTATUS dcesrv_add_ep_tcp(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
|
||||
static NTSTATUS dcesrv_add_ep_tcp(struct dcesrv_context *dce_ctx,
|
||||
struct loadparm_context *lp_ctx,
|
||||
struct dcesrv_endpoint *e,
|
||||
struct event_context *event_ctx, const struct model_ops *model_ops)
|
||||
{
|
||||
NTSTATUS status;
|
||||
|
||||
/* Add TCP/IP sockets */
|
||||
if (lp_interfaces(global_loadparm) && lp_bind_interfaces_only(global_loadparm)) {
|
||||
if (lp_interfaces(lp_ctx) && lp_bind_interfaces_only(lp_ctx)) {
|
||||
int num_interfaces = iface_count();
|
||||
int i;
|
||||
for(i = 0; i < num_interfaces; i++) {
|
||||
@ -373,7 +381,7 @@ static NTSTATUS dcesrv_add_ep_tcp(struct dcesrv_context *dce_ctx, struct dcesrv_
|
||||
}
|
||||
} else {
|
||||
status = add_socket_rpc_tcp_iface(dce_ctx, e, event_ctx, model_ops,
|
||||
lp_socket_address(global_loadparm));
|
||||
lp_socket_address(lp_ctx));
|
||||
NT_STATUS_NOT_OK_RETURN(status);
|
||||
}
|
||||
|
||||
@ -381,21 +389,23 @@ static NTSTATUS dcesrv_add_ep_tcp(struct dcesrv_context *dce_ctx, struct dcesrv_
|
||||
}
|
||||
|
||||
|
||||
static NTSTATUS dcesrv_add_ep(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
|
||||
static NTSTATUS dcesrv_add_ep(struct dcesrv_context *dce_ctx,
|
||||
struct loadparm_context *lp_ctx,
|
||||
struct dcesrv_endpoint *e,
|
||||
struct event_context *event_ctx, const struct model_ops *model_ops)
|
||||
{
|
||||
switch (e->ep_description->transport) {
|
||||
case NCACN_UNIX_STREAM:
|
||||
return dcesrv_add_ep_unix(dce_ctx, e, event_ctx, model_ops);
|
||||
return dcesrv_add_ep_unix(dce_ctx, lp_ctx, e, event_ctx, model_ops);
|
||||
|
||||
case NCALRPC:
|
||||
return dcesrv_add_ep_ncalrpc(dce_ctx, e, event_ctx, model_ops);
|
||||
return dcesrv_add_ep_ncalrpc(dce_ctx, lp_ctx, e, event_ctx, model_ops);
|
||||
|
||||
case NCACN_IP_TCP:
|
||||
return dcesrv_add_ep_tcp(dce_ctx, e, event_ctx, model_ops);
|
||||
return dcesrv_add_ep_tcp(dce_ctx, lp_ctx, e, event_ctx, model_ops);
|
||||
|
||||
case NCACN_NP:
|
||||
return dcesrv_add_ep_np(dce_ctx, e, event_ctx, model_ops);
|
||||
return dcesrv_add_ep_np(dce_ctx, lp_ctx, e, event_ctx, model_ops);
|
||||
|
||||
default:
|
||||
return NT_STATUS_NOT_SUPPORTED;
|
||||
@ -424,7 +434,7 @@ static void dcesrv_task_init(struct task_server *task)
|
||||
}
|
||||
|
||||
for (e=dce_ctx->endpoint_list;e;e=e->next) {
|
||||
status = dcesrv_add_ep(dce_ctx, e, task->event_ctx, task->model_ops);
|
||||
status = dcesrv_add_ep(dce_ctx, task->lp_ctx, e, task->event_ctx, task->model_ops);
|
||||
if (!NT_STATUS_IS_OK(status)) goto failed;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user