summaryrefslogtreecommitdiffstats
path: root/source4/librpc/rpc/dcerpc_connect.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2014-01-30 22:00:44 +0100
committerGünther Deschner <gd@samba.org>2014-02-13 11:54:16 +0100
commit00073465df86210ba5f08a05d0cb1096595ae7e1 (patch)
tree310b30d2ce38f5de686521407168b0d1db03854c /source4/librpc/rpc/dcerpc_connect.c
parenta281574c9fcb77813e1f269b1e54b513ae977640 (diff)
downloadsamba-00073465df86210ba5f08a05d0cb1096595ae7e1.tar.gz
samba-00073465df86210ba5f08a05d0cb1096595ae7e1.tar.xz
samba-00073465df86210ba5f08a05d0cb1096595ae7e1.zip
s4:librpc/rpc: make use of dcerpc_binding_get_*() in dcerpc_connect.c
Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Guenther Deschner <gd@samba.org>
Diffstat (limited to 'source4/librpc/rpc/dcerpc_connect.c')
-rw-r--r--source4/librpc/rpc/dcerpc_connect.c45
1 files 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;
}