summaryrefslogtreecommitdiffstats
path: root/source4
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2013-09-19 18:43:06 +0200
committerStefan Metzmacher <metze@samba.org>2014-01-07 08:37:44 +0100
commit7352f7f91dcb8fb98a8a33000f3caf8b6a21ce4a (patch)
tree3d09e91d804990aac29cb1be5c4cb6dd49e0587a /source4
parent45fc961932036fb2a0f1847f1606743f0c93c109 (diff)
downloadsamba-7352f7f91dcb8fb98a8a33000f3caf8b6a21ce4a.tar.gz
samba-7352f7f91dcb8fb98a8a33000f3caf8b6a21ce4a.tar.xz
samba-7352f7f91dcb8fb98a8a33000f3caf8b6a21ce4a.zip
s4:librpc: make use of dcerpc_pipe_open_smb_send/recv for SMB2
Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'source4')
-rw-r--r--source4/librpc/rpc/dcerpc_connect.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/source4/librpc/rpc/dcerpc_connect.c b/source4/librpc/rpc/dcerpc_connect.c
index 4383fe3b44..d8bedeed1c 100644
--- a/source4/librpc/rpc/dcerpc_connect.c
+++ b/source4/librpc/rpc/dcerpc_connect.c
@@ -189,7 +189,6 @@ static NTSTATUS dcerpc_pipe_connect_ncacn_np_smb_recv(struct composite_context *
struct pipe_np_smb2_state {
- struct smb2_tree *tree;
struct dcerpc_pipe_connect io;
};
@@ -203,7 +202,7 @@ static void continue_pipe_open_smb2(struct composite_context *ctx)
struct composite_context);
/* receive result of named pipe open request on smb2 */
- c->status = dcerpc_pipe_open_smb2_recv(ctx);
+ c->status = dcerpc_pipe_open_smb_recv(ctx);
if (!composite_is_ok(c)) return;
composite_done(c);
@@ -221,17 +220,43 @@ static void continue_smb2_connect(struct tevent_req *subreq)
struct composite_context);
struct pipe_np_smb2_state *s = talloc_get_type(c->private_data,
struct pipe_np_smb2_state);
+ struct smb2_tree *t;
+ struct smbXcli_conn *conn;
+ struct smbXcli_session *session;
+ struct smbXcli_tcon *tcon;
+ uint32_t timeout_msec;
/* receive result of smb2 connect request */
- c->status = smb2_connect_recv(subreq, s->io.pipe->conn, &s->tree);
+ c->status = smb2_connect_recv(subreq, s->io.pipe->conn, &t);
TALLOC_FREE(subreq);
if (!composite_is_ok(c)) return;
/* prepare named pipe open parameters */
s->io.pipe_name = s->io.binding->endpoint;
+ conn = t->session->transport->conn;
+ session = t->session->smbXcli;
+ tcon = t->smbXcli;
+ timeout_msec = t->session->transport->options.request_timeout * 1000;
+
+ /* if we don't have a binding on this pipe yet, then create one */
+ if (s->io.pipe->binding == NULL) {
+ const char *r = smbXcli_conn_remote_name(conn);
+ char *str;
+ SMB_ASSERT(r != NULL);
+ str = talloc_asprintf(s, "ncacn_np:%s", r);
+ if (composite_nomem(str, c)) return;
+ c->status = dcerpc_parse_binding(s->io.pipe, str,
+ &s->io.pipe->binding);
+ talloc_free(str);
+ if (!composite_is_ok(c)) return;
+ }
+
/* send named pipe open request */
- open_req = dcerpc_pipe_open_smb2_send(s->io.pipe, s->tree, s->io.pipe_name);
+ open_req = dcerpc_pipe_open_smb_send(s->io.pipe->conn,
+ conn, session,
+ tcon, timeout_msec,
+ s->io.pipe_name);
if (composite_nomem(open_req, c)) return;
composite_continue(c, open_req, continue_pipe_open_smb2, c);