s4:librpc/rpc: use dcerpc_binding_[g|set]_string_option("localaddress")
authorStefan Metzmacher <metze@samba.org>
Thu, 16 Jan 2014 14:39:55 +0000 (15:39 +0100)
committerGünther Deschner <gd@samba.org>
Thu, 13 Feb 2014 10:54:14 +0000 (11:54 +0100)
We should avoid deferencing struct dcerpc_binding if possible.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
source4/librpc/rpc/dcerpc_connect.c
source4/librpc/rpc/dcerpc_secondary.c
source4/librpc/rpc/dcerpc_util.c

index f3983123614b9e3fe687326d9a2651d42dd6a552..00a60c8d3d3cebd756373d3f9a9822ab36908e22 100644 (file)
@@ -383,10 +383,8 @@ static struct composite_context* dcerpc_pipe_connect_ncacn_ip_tcp_send(TALLOC_CT
 
        /* store input parameters in state structure */
        s->io               = *io;
-       if (io->binding->localaddress != NULL) {
-               s->localaddr = talloc_strdup(s, io->binding->localaddress);
-               if (composite_nomem(s->localaddr, c)) return c;
-       }
+       s->localaddr = dcerpc_binding_get_string_option(io->binding,
+                                                       "localaddress");
        if (io->binding->host != NULL) {
                s->host = talloc_strdup(s, io->binding->host);
                if (composite_nomem(s->host, c)) return c;
index 6f28a2a91b2727e1327e34ccd063bba6a890e321..89a4df86f9803f645fe57ad7b3e12e8a2eca59af 100644 (file)
@@ -38,6 +38,7 @@ struct sec_conn_state {
        struct dcerpc_pipe *pipe2;
        struct dcerpc_binding *binding;
        struct socket_address *peer_addr;
+       const char *localaddress;
 };
 
 
@@ -93,8 +94,11 @@ _PUBLIC_ struct composite_context* dcerpc_secondary_connection_send(struct dcerp
                        return c;
                }
 
+               s->localaddress = dcerpc_binding_get_string_option(s->binding,
+                                                               "localaddress");
+
                pipe_tcp_req = dcerpc_pipe_open_tcp_send(s->pipe2->conn,
-                                                        s->binding->localaddress,
+                                                        s->localaddress,
                                                         s->peer_addr->addr,
                                                         s->binding->target_hostname,
                                                         atoi(s->binding->endpoint),
index 77dfc40d79d65086015e351820efbd90330b8a3a..70b73cdd27575ae4beb25b6598687e2e6a466cb5 100644 (file)
@@ -225,6 +225,7 @@ struct composite_context *dcerpc_epm_map_binding_send(TALLOC_CTX *mem_ctx,
        struct epm_map_binding_state *s;
        struct composite_context *pipe_connect_req;
        struct cli_credentials *anon_creds;
+       const char *localaddress;
 
        NTSTATUS status;
        struct dcerpc_binding *epmapper_binding;
@@ -295,6 +296,13 @@ struct composite_context *dcerpc_epm_map_binding_send(TALLOC_CTX *mem_ctx,
 
        /* basic endpoint mapping data */
        epmapper_binding->options               = NULL;
+       localaddress = dcerpc_binding_get_string_option(binding, "localaddress");
+       if (localaddress != NULL) {
+               c->status = dcerpc_binding_set_string_option(epmapper_binding,
+                                                            "localaddress",
+                                                            localaddress);
+               if (!composite_is_ok(c)) return c;
+       }
        epmapper_binding->flags                 = 0;
        epmapper_binding->assoc_group_id        = 0;
        epmapper_binding->endpoint              = NULL;