summaryrefslogtreecommitdiffstats
path: root/librpc
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2014-01-16 14:20:04 +0100
committerGünther Deschner <gd@samba.org>2014-02-13 11:54:14 +0100
commite4b246a968c66c00643a3689c35f86bbf80dc7ec (patch)
tree4ff3f853a82e3145b7829aa716969d12ca2a17e3 /librpc
parent5d221271182f2614b5d2cd3adab728c20f655c2e (diff)
downloadsamba-e4b246a968c66c00643a3689c35f86bbf80dc7ec.tar.gz
samba-e4b246a968c66c00643a3689c35f86bbf80dc7ec.tar.xz
samba-e4b246a968c66c00643a3689c35f86bbf80dc7ec.zip
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.c31
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) {