summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/librpc/rpc/dcerpc_ep.c33
-rw-r--r--source3/librpc/rpc/dcerpc_ep.h12
2 files changed, 45 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,
diff --git a/source3/librpc/rpc/dcerpc_ep.h b/source3/librpc/rpc/dcerpc_ep.h
index 421038f0ad..c982ff853c 100644
--- a/source3/librpc/rpc/dcerpc_ep.h
+++ b/source3/librpc/rpc/dcerpc_ep.h
@@ -83,6 +83,18 @@ NTSTATUS dcerpc_binding_vector_add_unix(const struct ndr_interface_table *iface,
struct dcerpc_binding_vector *bvec,
const char *name);
+/**
+ * @brief Duplicate a dcerpc_binding_vector.
+ *
+ * @param[in] mem_ctx The memory context to create the duplicate on.
+ *
+ * @param[in] bvec The binding vector to duplicate.
+ *
+ * @return The duplicated binding vector or NULL on error.
+ */
+struct dcerpc_binding_vector *dcerpc_binding_vector_dup(TALLOC_CTX *mem_ctx,
+ const struct dcerpc_binding_vector *bvec);
+
NTSTATUS dcerpc_binding_vector_create(TALLOC_CTX *mem_ctx,
const struct ndr_interface_table *iface,
uint16_t port,