From 6557b429ef9f330d66f42a02530d40db14bc3493 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 15 Jan 2014 15:15:35 +0100 Subject: [PATCH] librpc/rpc: add dcerpc_binding_get_string_option() This allows get value string of a [key=value] option of the dcerpc_binding. Signed-off-by: Stefan Metzmacher Reviewed-by: Guenther Deschner --- librpc/rpc/binding.c | 32 ++++++++++++++++++++++++++++++++ librpc/rpc/rpc_common.h | 2 ++ 2 files changed, 34 insertions(+) diff --git a/librpc/rpc/binding.c b/librpc/rpc/binding.c index de319be4b46..277900c7355 100644 --- a/librpc/rpc/binding.c +++ b/librpc/rpc/binding.c @@ -425,6 +425,38 @@ _PUBLIC_ NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struc return NT_STATUS_OK; } +_PUBLIC_ const char *dcerpc_binding_get_string_option(const struct dcerpc_binding *b, + const char *name) +{ + size_t i; + + if (b->options == NULL) { + return NULL; + } + + for (i=0; b->options[i]; i++) { + const char *o = b->options[i]; + const char *vs = NULL; + size_t name_len = strlen(name); + int ret; + + ret = strncmp(name, o, name_len); + if (ret != 0) { + continue; + } + + if (o[name_len] != '=') { + continue; + } + + vs = &o[name_len + 1]; + + return vs; + } + + return NULL; +} + _PUBLIC_ NTSTATUS dcerpc_floor_get_lhs_data(const struct epm_floor *epm_floor, struct ndr_syntax_id *syntax) { diff --git a/librpc/rpc/rpc_common.h b/librpc/rpc/rpc_common.h index 6d23cebc2c0..89312ce620f 100644 --- a/librpc/rpc/rpc_common.h +++ b/librpc/rpc/rpc_common.h @@ -136,6 +136,8 @@ NTSTATUS dcerpc_binding_from_tower(TALLOC_CTX *mem_ctx, struct dcerpc_binding **b_out); NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struct dcerpc_binding **b_out); char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_binding *b); +const char *dcerpc_binding_get_string_option(const struct dcerpc_binding *b, + const char *name); NTSTATUS dcerpc_floor_get_lhs_data(const struct epm_floor *epm_floor, struct ndr_syntax_id *syntax); const char *derpc_transport_string_by_transport(enum dcerpc_transport_t t); enum dcerpc_transport_t dcerpc_transport_by_name(const char *name); -- 2.11.4.GIT