summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source4/rpc_server/epmapper/rpc_epmapper.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/source4/rpc_server/epmapper/rpc_epmapper.c b/source4/rpc_server/epmapper/rpc_epmapper.c
index 371a3b5dd53..58cdc0f9a2e 100644
--- a/source4/rpc_server/epmapper/rpc_epmapper.c
+++ b/source4/rpc_server/epmapper/rpc_epmapper.c
@@ -50,9 +50,10 @@ static uint32_t build_ep_list(TALLOC_CTX *mem_ctx,
for (d=endpoint_list; d; d=d->next) {
struct dcesrv_if_list *iface;
- struct dcerpc_binding *description;
for (iface=d->interface_list;iface;iface=iface->next) {
+ struct dcerpc_binding *description;
+
(*eps) = talloc_realloc(mem_ctx,
*eps,
struct dcesrv_ep_iface,
@@ -62,12 +63,18 @@ static uint32_t build_ep_list(TALLOC_CTX *mem_ctx,
}
(*eps)[total].name = iface->iface.name;
- description = d->ep_description;
+ description = dcerpc_binding_dup(*eps, d->ep_description);
+ if (description == NULL) {
+ return 0;
+ }
+
description->object = iface->iface.syntax_id;
status = dcerpc_binding_build_tower(*eps, description, &(*eps)[total].ep);
- if (NT_STATUS_IS_ERR(status)) {
- DEBUG(1, ("Unable to build tower for %s\n", iface->iface.name));
+ TALLOC_FREE(description);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("Unable to build tower for %s - %s\n",
+ iface->iface.name, nt_errstr(status)));
continue;
}
total++;