diff options
author | Stefan Metzmacher <metze@samba.org> | 2014-01-16 14:20:04 +0100 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2014-02-13 11:54:14 +0100 |
commit | e4b246a968c66c00643a3689c35f86bbf80dc7ec (patch) | |
tree | 4ff3f853a82e3145b7829aa716969d12ca2a17e3 /librpc | |
parent | 5d221271182f2614b5d2cd3adab728c20f655c2e (diff) | |
download | samba-e4b246a968c66c00643a3689c35f86bbf80dc7ec.tar.gz |
librpc/rpc: handle "localaddress" in dcerpc_binding_[s|g]et_string_option()
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
Diffstat (limited to 'librpc')
-rw-r--r-- | librpc/rpc/binding.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/librpc/rpc/binding.c b/librpc/rpc/binding.c index e34d31fcef3..d55939031f6 100644 --- a/librpc/rpc/binding.c +++ b/librpc/rpc/binding.c @@ -440,6 +440,12 @@ _PUBLIC_ const char *dcerpc_binding_get_string_option(const struct dcerpc_bindin const char *name) { size_t i; + int ret; + + ret = strcmp(name, "localaddress"); + if (ret == 0) { + return b->localaddress; + } if (b->options == NULL) { return NULL; @@ -449,7 +455,6 @@ _PUBLIC_ const char *dcerpc_binding_get_string_option(const struct dcerpc_bindin 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) { @@ -497,15 +502,37 @@ _PUBLIC_ NTSTATUS dcerpc_binding_set_string_option(struct dcerpc_binding *b, char *tmp; size_t name_len = strlen(name); size_t i; + int ret; /* * Note: value == NULL, means delete it. * value != NULL means add or reset. */ + ret = strcmp(name, "localaddress"); + if (ret == 0) { + tmp = discard_const_p(char, b->localaddress); + + if (value == NULL) { + talloc_free(tmp); + b->localaddress = NULL; + b->flags &= ~DCERPC_LOCALADDRESS; + return NT_STATUS_OK; + } + + b->localaddress = talloc_strdup(b, value); + if (b->localaddress == NULL) { + b->localaddress = tmp; + return NT_STATUS_NO_MEMORY; + } + talloc_free(tmp); + + b->flags |= DCERPC_LOCALADDRESS; + return NT_STATUS_OK; + } + for (i=0; b->options && b->options[i]; i++) { const char *o = b->options[i]; - int ret; ret = strncmp(name, o, name_len); if (ret != 0) { |