From: Stefan Metzmacher Date: Wed, 18 Jul 2018 14:44:16 +0000 (+0200) Subject: s4:libcli: allow passing an already negotiated connection to smb2_connect_send() X-Git-Tag: ldb-1.3.6~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2fd61b0e8645a832aeb963b8f437f279f7eaa735;p=thirdparty%2Fsamba.git s4:libcli: allow passing an already negotiated connection to smb2_connect_send() It will just do the session setup and tree connect steps. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13308 Signed-off-by: Stefan Metzmacher Reviewed-by: Alexander Bokovoy (cherry picked from commit f20e607c15b4c8ae56ade5d7e68d832542a2cd5e) --- diff --git a/source4/libcli/smb2/connect.c b/source4/libcli/smb2/connect.c index ac37eae6aa8..2dee5021869 100644 --- a/source4/libcli/smb2/connect.c +++ b/source4/libcli/smb2/connect.c @@ -64,6 +64,7 @@ struct tevent_req *smb2_connect_send(TALLOC_CTX *mem_ctx, const char *share, struct resolve_context *resolve_ctx, struct cli_credentials *credentials, + struct smbXcli_conn **existing_conn, uint64_t previous_session_id, const struct smbcli_options *options, const char *socket_options, @@ -107,6 +108,25 @@ struct tevent_req *smb2_connect_send(TALLOC_CTX *mem_ctx, return tevent_req_post(req, ev); } + if (existing_conn != NULL) { + NTSTATUS status; + + status = smb2_transport_raw_init(state, ev, + existing_conn, + options, + &state->transport); + if (tevent_req_nterror(req, status)) { + return tevent_req_post(req, ev); + } + + smb2_connect_session_start(req); + if (!tevent_req_is_in_progress(req)) { + return tevent_req_post(req, ev); + } + + return req; + } + creq = smbcli_sock_connect_send(state, NULL, state->ports, state->host, state->resolve_ctx, state->ev, state->socket_options, @@ -311,6 +331,7 @@ NTSTATUS smb2_connect_ext(TALLOC_CTX *mem_ctx, share, resolve_ctx, credentials, + NULL, /* existing_conn */ previous_session_id, options, socket_options, diff --git a/source4/librpc/rpc/dcerpc_connect.c b/source4/librpc/rpc/dcerpc_connect.c index 1252e74b5a9..a3f25efc0b4 100644 --- a/source4/librpc/rpc/dcerpc_connect.c +++ b/source4/librpc/rpc/dcerpc_connect.c @@ -301,6 +301,7 @@ static struct composite_context *dcerpc_pipe_connect_ncacn_np_smb2_send( "IPC$", s->io.resolve_ctx, s->io.creds, + NULL, /* existing_conn */ 0, /* previous_session_id */ &options, lpcfg_socket_options(lp_ctx),