summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/librpc/rpc/dcerpc_ep.c40
-rw-r--r--source3/librpc/rpc/dcerpc_ep.h15
2 files changed, 53 insertions, 2 deletions
diff --git a/source3/librpc/rpc/dcerpc_ep.c b/source3/librpc/rpc/dcerpc_ep.c
index 14d475fbef..cd8b656a7b 100644
--- a/source3/librpc/rpc/dcerpc_ep.c
+++ b/source3/librpc/rpc/dcerpc_ep.c
@@ -1,7 +1,7 @@
/*
* Endpoint Mapper Functions
* DCERPC local endpoint mapper client routines
- * Copyright (c) 2010 Andreas Schneider.
+ * Copyright (c) 2010-2011 Andreas Schneider.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -28,6 +28,44 @@
#define EPM_MAX_ANNOTATION_SIZE 64
+NTSTATUS dcerpc_binding_vector_new(TALLOC_CTX *mem_ctx,
+ struct dcerpc_binding_vector **pbvec)
+{
+ struct dcerpc_binding_vector *bvec;
+ NTSTATUS status;
+ TALLOC_CTX *tmp_ctx;
+
+ tmp_ctx = talloc_stackframe();
+ if (tmp_ctx == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ bvec = talloc_zero(tmp_ctx, struct dcerpc_binding_vector);
+ if (bvec == NULL) {
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
+ }
+
+ bvec->bindings = talloc_zero_array(bvec,
+ struct dcerpc_binding,
+ 4);
+ if (bvec->bindings == NULL) {
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
+ }
+
+ bvec->allocated = 4;
+ bvec->count = 0;
+
+ *pbvec = talloc_move(mem_ctx, &bvec);
+
+ status = NT_STATUS_OK;
+done:
+ talloc_free(tmp_ctx);
+
+ return status;
+}
+
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 226d402986..61b85e23dc 100644
--- a/source3/librpc/rpc/dcerpc_ep.h
+++ b/source3/librpc/rpc/dcerpc_ep.h
@@ -1,7 +1,7 @@
/*
* Endpoint Mapper Functions
* DCERPC local endpoint mapper client routines
- * Copyright (c) 2010 Andreas Schneider.
+ * Copyright (c) 2010-2011 Andreas Schneider.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,8 +23,21 @@
struct dcerpc_binding_vector {
struct dcerpc_binding *bindings;
uint32_t count;
+ uint32_t allocated;
};
+/**
+ * @brief Allocate a new binding vector.
+ *
+ * @param[in] mem_ctx The memory context to allocate the vector.
+ *
+ * @param[out] pbvec A pointer to store the binding vector.
+ *
+ * @return An NTSTATUS error code.
+ */
+NTSTATUS dcerpc_binding_vector_new(TALLOC_CTX *mem_ctx,
+ struct dcerpc_binding_vector **pbvec);
+
NTSTATUS dcerpc_binding_vector_create(TALLOC_CTX *mem_ctx,
const struct ndr_interface_table *iface,
uint16_t port,