mirror of
https://github.com/samba-team/samba.git
synced 2025-01-10 01:18:15 +03:00
s4:libcli: add fallback_to_anonymous to smb2_connect_send()
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>
This commit is contained in:
parent
f20e607c15
commit
ca000d8901
@ -35,6 +35,7 @@
|
|||||||
struct smb2_connect_state {
|
struct smb2_connect_state {
|
||||||
struct tevent_context *ev;
|
struct tevent_context *ev;
|
||||||
struct cli_credentials *credentials;
|
struct cli_credentials *credentials;
|
||||||
|
bool fallback_to_anonymous;
|
||||||
uint64_t previous_session_id;
|
uint64_t previous_session_id;
|
||||||
struct resolve_context *resolve_ctx;
|
struct resolve_context *resolve_ctx;
|
||||||
const char *host;
|
const char *host;
|
||||||
@ -64,6 +65,7 @@ struct tevent_req *smb2_connect_send(TALLOC_CTX *mem_ctx,
|
|||||||
const char *share,
|
const char *share,
|
||||||
struct resolve_context *resolve_ctx,
|
struct resolve_context *resolve_ctx,
|
||||||
struct cli_credentials *credentials,
|
struct cli_credentials *credentials,
|
||||||
|
bool fallback_to_anonymous,
|
||||||
struct smbXcli_conn **existing_conn,
|
struct smbXcli_conn **existing_conn,
|
||||||
uint64_t previous_session_id,
|
uint64_t previous_session_id,
|
||||||
const struct smbcli_options *options,
|
const struct smbcli_options *options,
|
||||||
@ -83,6 +85,7 @@ struct tevent_req *smb2_connect_send(TALLOC_CTX *mem_ctx,
|
|||||||
|
|
||||||
state->ev = ev;
|
state->ev = ev;
|
||||||
state->credentials = credentials;
|
state->credentials = credentials;
|
||||||
|
state->fallback_to_anonymous = fallback_to_anonymous;
|
||||||
state->previous_session_id = previous_session_id;
|
state->previous_session_id = previous_session_id;
|
||||||
state->options = *options;
|
state->options = *options;
|
||||||
state->host = host;
|
state->host = host;
|
||||||
@ -240,6 +243,34 @@ static void smb2_connect_session_done(struct tevent_req *subreq)
|
|||||||
|
|
||||||
status = smb2_session_setup_spnego_recv(subreq);
|
status = smb2_session_setup_spnego_recv(subreq);
|
||||||
TALLOC_FREE(subreq);
|
TALLOC_FREE(subreq);
|
||||||
|
if (!NT_STATUS_IS_OK(status) &&
|
||||||
|
!cli_credentials_is_anonymous(state->credentials) &&
|
||||||
|
state->fallback_to_anonymous) {
|
||||||
|
struct cli_credentials *anon_creds = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The transport was moved to session,
|
||||||
|
* we need to revert that before removing
|
||||||
|
* the old broken session.
|
||||||
|
*/
|
||||||
|
state->transport = talloc_move(state, &state->session->transport);
|
||||||
|
TALLOC_FREE(state->session);
|
||||||
|
|
||||||
|
anon_creds = cli_credentials_init_anon(state);
|
||||||
|
if (tevent_req_nomem(anon_creds, req)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
cli_credentials_set_workstation(anon_creds,
|
||||||
|
cli_credentials_get_workstation(state->credentials),
|
||||||
|
CRED_SPECIFIED);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* retry with anonymous credentials
|
||||||
|
*/
|
||||||
|
state->credentials = anon_creds;
|
||||||
|
smb2_connect_session_start(req);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (tevent_req_nterror(req, status)) {
|
if (tevent_req_nterror(req, status)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -331,6 +362,7 @@ NTSTATUS smb2_connect_ext(TALLOC_CTX *mem_ctx,
|
|||||||
share,
|
share,
|
||||||
resolve_ctx,
|
resolve_ctx,
|
||||||
credentials,
|
credentials,
|
||||||
|
false, /* fallback_to_anonymous */
|
||||||
NULL, /* existing_conn */
|
NULL, /* existing_conn */
|
||||||
previous_session_id,
|
previous_session_id,
|
||||||
options,
|
options,
|
||||||
|
@ -301,6 +301,7 @@ static struct composite_context *dcerpc_pipe_connect_ncacn_np_smb2_send(
|
|||||||
"IPC$",
|
"IPC$",
|
||||||
s->io.resolve_ctx,
|
s->io.resolve_ctx,
|
||||||
s->io.creds,
|
s->io.creds,
|
||||||
|
false, /* fallback_to_anonymous */
|
||||||
NULL, /* existing_conn */
|
NULL, /* existing_conn */
|
||||||
0, /* previous_session_id */
|
0, /* previous_session_id */
|
||||||
&options,
|
&options,
|
||||||
|
Loading…
Reference in New Issue
Block a user