diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/librpc/rpc/dcerpc_ep.c | 40 | ||||
-rw-r--r-- | source3/librpc/rpc/dcerpc_ep.h | 15 |
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, |