From 00073465df86210ba5f08a05d0cb1096595ae7e1 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 30 Jan 2014 22:00:44 +0100 Subject: [PATCH] s4:librpc/rpc: make use of dcerpc_binding_get_*() in dcerpc_connect.c Signed-off-by: Stefan Metzmacher Reviewed-by: Guenther Deschner --- source4/librpc/rpc/dcerpc_connect.c | 45 ++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/source4/librpc/rpc/dcerpc_connect.c b/source4/librpc/rpc/dcerpc_connect.c index 00a60c8d3d3..36a81a690a9 100644 --- a/source4/librpc/rpc/dcerpc_connect.c +++ b/source4/librpc/rpc/dcerpc_connect.c @@ -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; } -- 2.11.4.GIT