Signed-off-by: Günther Deschner <gd@samba.org>
static uint32_t build_ep_list(TALLOC_CTX *mem_ctx,
struct dcesrv_endpoint *endpoint_list,
const struct GUID *uuid,
static uint32_t build_ep_list(TALLOC_CTX *mem_ctx,
struct dcesrv_endpoint *endpoint_list,
const struct GUID *uuid,
struct dcesrv_ep_iface **peps)
{
struct dcesrv_ep_iface *eps = NULL;
struct dcesrv_ep_iface **peps)
{
struct dcesrv_ep_iface *eps = NULL;
description = d->ep_description;
description->object = iface->iface->syntax_id;
description = d->ep_description;
description->object = iface->iface->syntax_id;
+ if (description->transport == NCACN_IP_TCP &&
+ srv_addr != NULL &&
+ strequal(description->host, "0.0.0.0")) {
+ description->host = srv_addr;
+ }
status = dcerpc_binding_build_tower(eps,
description,
status = dcerpc_binding_build_tower(eps,
description,
eps->count = build_ep_list(eps,
endpoint_table,
NULL,
eps->count = build_ep_list(eps,
endpoint_table,
NULL,
+ p->server_id == NULL ? NULL : p->server_id->addr,
&eps->e);
break;
case RPC_C_EP_MATCH_BY_IF:
&eps->e);
break;
case RPC_C_EP_MATCH_BY_IF:
eps->count = build_ep_list(eps,
endpoint_table,
&r->in.interface_id->uuid,
eps->count = build_ep_list(eps,
endpoint_table,
&r->in.interface_id->uuid,
+ p->server_id == NULL ? NULL : p->server_id->addr,
&eps->e);
break;
case RPC_C_EP_MATCH_BY_OBJ:
&eps->e);
break;
case RPC_C_EP_MATCH_BY_OBJ:
eps->count = build_ep_list(eps,
endpoint_table,
r->in.object,
eps->count = build_ep_list(eps,
endpoint_table,
r->in.object,
+ p->server_id == NULL ? NULL : p->server_id->addr,
&eps->e);
break;
default:
&eps->e);
break;
default:
eps->count = build_ep_list(eps,
endpoint_table,
obj,
eps->count = build_ep_list(eps,
endpoint_table,
obj,
+ p->server_id == NULL ? NULL : p->server_id->addr,
&eps->e);
if (eps->count == 0) {
rc = EPMAPPER_STATUS_NO_MORE_ENTRIES;
&eps->e);
if (eps->count == 0) {
rc = EPMAPPER_STATUS_NO_MORE_ENTRIES;