mirror of
https://github.com/samba-team/samba.git
synced 2025-03-07 00:58:40 +03:00
s4:libcli: allow passing an already negotiated connection to smb_composite_connect()
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 <metze@samba.org> Reviewed-by: Alexander Bokovoy <ab@samba.org> (cherry picked from commit 2b68f9b8b0dd944fa89b9e0037886ddd4fb4e5f9)
This commit is contained in:
parent
71a1355172
commit
f9b685e9a5
@ -207,6 +207,7 @@ NTSTATUS smbcli_tree_full_connection(TALLOC_CTX *parent_ctx,
|
||||
io.in.called_name = strupper_talloc(tmp_ctx, dest_host);
|
||||
io.in.service = service;
|
||||
io.in.service_type = service_type;
|
||||
io.in.existing_conn = NULL;
|
||||
io.in.credentials = credentials;
|
||||
io.in.gensec_settings = gensec_settings;
|
||||
io.in.fallback_to_anonymous = false;
|
||||
|
@ -228,18 +228,10 @@ static NTSTATUS connect_session_setup(struct composite_context *c,
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
a negprot request has completed
|
||||
*/
|
||||
static NTSTATUS connect_negprot(struct composite_context *c,
|
||||
struct smb_composite_connect *io)
|
||||
static NTSTATUS connect_send_session(struct composite_context *c,
|
||||
struct smb_composite_connect *io)
|
||||
{
|
||||
struct connect_state *state = talloc_get_type(c->private_data, struct connect_state);
|
||||
NTSTATUS status;
|
||||
|
||||
status = smb_raw_negotiate_recv(state->subreq);
|
||||
TALLOC_FREE(state->subreq);
|
||||
NT_STATUS_NOT_OK_RETURN(status);
|
||||
|
||||
/* next step is a session setup */
|
||||
state->session = smbcli_session_init(state->transport, state, true, io->in.session_options);
|
||||
@ -281,6 +273,22 @@ static NTSTATUS connect_negprot(struct composite_context *c,
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
a negprot request has completed
|
||||
*/
|
||||
static NTSTATUS connect_negprot(struct composite_context *c,
|
||||
struct smb_composite_connect *io)
|
||||
{
|
||||
struct connect_state *state = talloc_get_type(c->private_data, struct connect_state);
|
||||
NTSTATUS status;
|
||||
|
||||
status = smb_raw_negotiate_recv(state->subreq);
|
||||
TALLOC_FREE(state->subreq);
|
||||
NT_STATUS_NOT_OK_RETURN(status);
|
||||
|
||||
return connect_send_session(c, io);
|
||||
}
|
||||
|
||||
/*
|
||||
setup a negprot send
|
||||
*/
|
||||
@ -432,6 +440,26 @@ struct composite_context *smb_composite_connect_send(struct smb_composite_connec
|
||||
nbt_choose_called_name(state, &state->called,
|
||||
io->in.called_name, NBT_NAME_SERVER);
|
||||
|
||||
if (io->in.existing_conn != NULL) {
|
||||
NTSTATUS status;
|
||||
|
||||
status = smbcli_transport_raw_init(state,
|
||||
c->event_ctx,
|
||||
&io->in.existing_conn,
|
||||
&io->in.options,
|
||||
&state->transport);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
status = connect_send_session(c, io);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
state->creq = smbcli_sock_connect_send(state,
|
||||
NULL,
|
||||
io->in.dest_ports,
|
||||
|
@ -118,6 +118,7 @@ struct smb_composite_connect {
|
||||
const char *called_name;
|
||||
const char *service;
|
||||
const char *service_type;
|
||||
struct smbXcli_conn *existing_conn; /* optional */
|
||||
struct cli_credentials *credentials;
|
||||
bool fallback_to_anonymous;
|
||||
const char *workgroup;
|
||||
|
@ -296,6 +296,7 @@ static NTSTATUS cvfs_connect(struct ntvfs_module_context *ntvfs,
|
||||
io.in.dest_ports = lpcfg_smb_ports(ntvfs->ctx->lp_ctx);
|
||||
io.in.socket_options = lpcfg_socket_options(ntvfs->ctx->lp_ctx);
|
||||
io.in.called_name = host;
|
||||
io.in.existing_conn = NULL;
|
||||
io.in.credentials = credentials;
|
||||
io.in.fallback_to_anonymous = false;
|
||||
io.in.workgroup = lpcfg_workgroup(ntvfs->ctx->lp_ctx);
|
||||
|
Loading…
x
Reference in New Issue
Block a user