s3-librpc: Add dcerpc_binding_vector_dup().
authorAndreas Schneider <asn@samba.org>
Fri, 1 Jul 2011 12:36:31 +0000 (14:36 +0200)
committerAndreas Schneider <asn@samba.org>
Mon, 1 Aug 2011 06:50:35 +0000 (08:50 +0200)
source3/librpc/rpc/dcerpc_ep.c
source3/librpc/rpc/dcerpc_ep.h

index 520460a8539b2636a69daa3059b58e790932099d..d73c43dc649e16b4c3fdad0f59e499bfa656441c 100644 (file)
@@ -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,
index 421038f0ad19ef36d7e465e38654ccea0242f02d..c982ff853c8710cc72453747062b046b6bd7bd1f 100644 (file)
@@ -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,