diff options
author | Stefan Metzmacher <metze@samba.org> | 2014-09-29 10:50:18 +0200 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2014-09-30 23:35:08 +0200 |
commit | c723d57e66b22260b73edeaa1b1ed1b9d8c7bf7d (patch) | |
tree | fb4cbde656e4e531f0119c648e39415ac76f577c | |
parent | d11b0c42228c4ed5f465ed7e5023985a275a59b7 (diff) | |
download | samba-c723d57e66b22260b73edeaa1b1ed1b9d8c7bf7d.tar.gz |
s4:libcli/smb2: make use of smb2cli_tcon*() in connect.c
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
-rw-r--r-- | source4/libcli/smb2/connect.c | 55 |
1 files changed, 25 insertions, 30 deletions
diff --git a/source4/libcli/smb2/connect.c b/source4/libcli/smb2/connect.c index 7a69b3e7d35..c81bd67fba5 100644 --- a/source4/libcli/smb2/connect.c +++ b/source4/libcli/smb2/connect.c @@ -39,13 +39,13 @@ struct smb2_connect_state { struct resolve_context *resolve_ctx; const char *host; const char *share; + const char *unc; const char **ports; const char *socket_options; struct nbt_name calling, called; struct gensec_settings *gensec_settings; struct smbcli_options options; struct smb2_transport *transport; - struct smb2_tree_connect tcon; struct smb2_session *session; struct smb2_tree *tree; }; @@ -100,6 +100,12 @@ struct tevent_req *smb2_connect_send(TALLOC_CTX *mem_ctx, nbt_choose_called_name(state, &state->called, host, NBT_NAME_SERVER); + state->unc = talloc_asprintf(state, "\\\\%s\\%s", + state->host, state->share); + if (tevent_req_nomem(state->unc, req)) { + return tevent_req_post(req, ev); + } + creq = smbcli_sock_connect_send(state, NULL, state->ports, state->host, state->resolve_ctx, state->ev, state->socket_options, @@ -187,7 +193,7 @@ static void smb2_connect_negprot_done(struct tevent_req *subreq) tevent_req_set_callback(subreq, smb2_connect_session_done, req); } -static void smb2_connect_tcon_done(struct smb2_request *smb2req); +static void smb2_connect_tcon_done(struct tevent_req *subreq); static void smb2_connect_session_done(struct tevent_req *subreq) { @@ -197,8 +203,8 @@ static void smb2_connect_session_done(struct tevent_req *subreq) struct smb2_connect_state *state = tevent_req_data(req, struct smb2_connect_state); - struct smb2_request *smb2req; NTSTATUS status; + uint32_t timeout_msec; status = smb2_session_setup_spnego_recv(subreq); TALLOC_FREE(subreq); @@ -206,49 +212,38 @@ static void smb2_connect_session_done(struct tevent_req *subreq) return; } - state->tcon.in.reserved = 0; - state->tcon.in.path = talloc_asprintf(state, "\\\\%s\\%s", - state->host, state->share); - if (tevent_req_nomem(state->tcon.in.path, req)) { + state->tree = smb2_tree_init(state->session, state, true); + if (tevent_req_nomem(state->tree, req)) { return; } - smb2req = smb2_tree_connect_send(state->session, &state->tcon); - if (tevent_req_nomem(smb2req, req)) { + timeout_msec = state->transport->options.request_timeout * 1000; + + subreq = smb2cli_tcon_send(state, state->ev, + state->transport->conn, + timeout_msec, + state->session->smbXcli, + state->tree->smbXcli, + 0, /* flags */ + state->unc); + if (tevent_req_nomem(subreq, req)) { return; } - smb2req->async.fn = smb2_connect_tcon_done; - smb2req->async.private_data = req; + tevent_req_set_callback(subreq, smb2_connect_tcon_done, req); } -static void smb2_connect_tcon_done(struct smb2_request *smb2req) +static void smb2_connect_tcon_done(struct tevent_req *subreq) { struct tevent_req *req = - talloc_get_type_abort(smb2req->async.private_data, + tevent_req_callback_data(subreq, struct tevent_req); - struct smb2_connect_state *state = - tevent_req_data(req, - struct smb2_connect_state); NTSTATUS status; - status = smb2_tree_connect_recv(smb2req, &state->tcon); + status = smb2cli_tcon_recv(subreq); if (tevent_req_nterror(req, status)) { return; } - state->tree = smb2_tree_init(state->session, state, true); - if (tevent_req_nomem(state->tree, req)) { - return; - } - - smb2cli_tcon_set_values(state->tree->smbXcli, - state->session->smbXcli, - state->tcon.out.tid, - state->tcon.out.share_type, - state->tcon.out.flags, - state->tcon.out.capabilities, - state->tcon.out.access_mask); - tevent_req_done(req); } |