]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:librpc/rpc: make use of dcerpc_binding_get_*() in dcerpc_connect.c
authorStefan Metzmacher <metze@samba.org>
Thu, 30 Jan 2014 21:00:44 +0000 (22:00 +0100)
committerGünther Deschner <gd@samba.org>
Thu, 13 Feb 2014 10:54:16 +0000 (11:54 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
source4/librpc/rpc/dcerpc_connect.c

index 00a60c8d3d3cebd756373d3f9a9822ab36908e22..36a81a690a9655ec86dbf5af19bfca4b67a2c2a5 100644 (file)
@@ -605,6 +605,8 @@ static void continue_connect(struct composite_context *c, struct pipe_connect_st
        struct composite_context *ncacn_ip_tcp_req;
        struct composite_context *ncacn_unix_req;
        struct composite_context *ncalrpc_req;
+       enum dcerpc_transport_t transport;
+       uint32_t flags;
 
        /* dcerpc pipe connect input parameters */
        pc.pipe         = s->pipe;
@@ -614,10 +616,13 @@ static void continue_connect(struct composite_context *c, struct pipe_connect_st
        pc.creds        = s->credentials;
        pc.resolve_ctx  = lpcfg_resolve_context(s->lp_ctx);
 
+       transport = dcerpc_binding_get_transport(s->binding);
+       flags = dcerpc_binding_get_flags(s->binding);
+
        /* connect dcerpc pipe depending on required transport */
-       switch (s->binding->transport) {
+       switch (transport) {
        case NCACN_NP:
-               if (pc.binding->flags & DCERPC_SMB2) {
+               if (flags & DCERPC_SMB2) {
                        /* new varient of SMB a.k.a. SMB2 */
                        ncacn_np_smb2_req = dcerpc_pipe_connect_ncacn_np_smb2_send(c, &pc, s->lp_ctx);
                        composite_continue(c, ncacn_np_smb2_req, continue_pipe_connect_ncacn_np_smb2, c);
@@ -805,6 +810,8 @@ _PUBLIC_ struct composite_context* dcerpc_pipe_connect_b_send(TALLOC_CTX *parent
 {
        struct composite_context *c;
        struct pipe_connect_state *s;
+       enum dcerpc_transport_t transport;
+       const char *endpoint = NULL;
 
        /* composite context allocation and setup */
        c = composite_create(parent_ctx, ev);
@@ -836,33 +843,29 @@ _PUBLIC_ struct composite_context* dcerpc_pipe_connect_b_send(TALLOC_CTX *parent
        tevent_add_timer(c->event_ctx, c,
                         timeval_current_ofs(DCERPC_REQUEST_TIMEOUT, 0),
                         dcerpc_connect_timeout_handler, c);
-       
-       switch (s->binding->transport) {
-       case NCA_UNKNOWN: {
-               struct composite_context *binding_req;
-               binding_req = dcerpc_epm_map_binding_send(c, s->binding, s->table,
-                                                         s->pipe->conn->event_ctx,
-                                                         s->lp_ctx);
-               composite_continue(c, binding_req, continue_map_binding, c);
-               return c;
-               }
 
+       transport = dcerpc_binding_get_transport(s->binding);
+
+       switch (transport) {
        case NCACN_NP:
        case NCACN_IP_TCP:
        case NCALRPC:
-               if (!s->binding->endpoint) {
-                       struct composite_context *binding_req;
-                       binding_req = dcerpc_epm_map_binding_send(c, s->binding, s->table,
-                                                                 s->pipe->conn->event_ctx,
-                                                                 s->lp_ctx);
-                       composite_continue(c, binding_req, continue_map_binding, c);
-                       return c;
-               }
-
+               endpoint = dcerpc_binding_get_string_option(s->binding, "endpoint");
+               break;
        default:
                break;
        }
 
+       if (endpoint == NULL) {
+               struct composite_context *binding_req;
+
+               binding_req = dcerpc_epm_map_binding_send(c, s->binding, s->table,
+                                                         s->pipe->conn->event_ctx,
+                                                         s->lp_ctx);
+               composite_continue(c, binding_req, continue_map_binding, c);
+               return c;
+       }
+
        continue_connect(c, s);
        return c;
 }