summaryrefslogtreecommitdiff
path: root/source3/librpc/rpc/dcerpc_ep.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/librpc/rpc/dcerpc_ep.c')
-rw-r--r--source3/librpc/rpc/dcerpc_ep.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/source3/librpc/rpc/dcerpc_ep.c b/source3/librpc/rpc/dcerpc_ep.c
index 520460a853..d73c43dc64 100644
--- a/source3/librpc/rpc/dcerpc_ep.c
+++ b/source3/librpc/rpc/dcerpc_ep.c
@@ -243,6 +243,39 @@ NTSTATUS dcerpc_binding_vector_add_unix(const struct ndr_interface_table *iface,
return NT_STATUS_OK;
}
+struct dcerpc_binding_vector *dcerpc_binding_vector_dup(TALLOC_CTX *mem_ctx,
+ const struct dcerpc_binding_vector *bvec)
+{
+ struct dcerpc_binding_vector *v;
+ uint32_t i;
+
+ v = talloc(mem_ctx, struct dcerpc_binding_vector);
+ if (v == NULL) {
+ return NULL;
+ }
+
+ v->bindings = talloc_array(v, struct dcerpc_binding, bvec->allocated);
+ if (v->bindings == NULL) {
+ talloc_free(v);
+ return NULL;
+ }
+ v->allocated = bvec->allocated;
+
+ for (i = 0; i < bvec->count; i++) {
+ struct dcerpc_binding *b;
+
+ b = dcerpc_binding_dup(v->bindings, &bvec->bindings[i]);
+ if (b == NULL) {
+ talloc_free(v);
+ return NULL;
+ }
+ v->bindings[i] = *b;
+ }
+ v->count = bvec->count;
+
+ return v;
+}
+
NTSTATUS dcerpc_binding_vector_create(TALLOC_CTX *mem_ctx,
const struct ndr_interface_table *iface,
uint16_t port,