mirror of
https://github.com/samba-team/samba.git
synced 2025-03-09 08:58:35 +03:00
s3:smb2cli: remove unused smb2cli_sesssetup_ntlmssp*
metze
This commit is contained in:
parent
5c97bbf3ef
commit
8428db0a17
@ -39,16 +39,6 @@ NTSTATUS smb2cli_session_setup_recv(struct tevent_req *req,
|
||||
struct iovec **recv_iov,
|
||||
DATA_BLOB *out_security_buffer);
|
||||
|
||||
struct tevent_req *smb2cli_sesssetup_ntlmssp_send(TALLOC_CTX *mem_ctx,
|
||||
struct tevent_context *ev,
|
||||
struct cli_state *cli,
|
||||
const char *user,
|
||||
const char *domain,
|
||||
const char *pass);
|
||||
NTSTATUS smb2cli_sesssetup_ntlmssp_recv(struct tevent_req *req);
|
||||
NTSTATUS smb2cli_sesssetup_ntlmssp(struct cli_state *cli, const char *user,
|
||||
const char *domain, const char *pass);
|
||||
|
||||
struct tevent_req *smb2cli_logoff_send(TALLOC_CTX *mem_ctx,
|
||||
struct tevent_context *ev,
|
||||
struct cli_state *cli);
|
||||
|
@ -240,209 +240,6 @@ NTSTATUS smb2cli_session_setup_recv(struct tevent_req *req,
|
||||
return status;
|
||||
}
|
||||
|
||||
struct smb2cli_sesssetup_ntlmssp_state {
|
||||
struct tevent_context *ev;
|
||||
struct cli_state *cli;
|
||||
struct ntlmssp_state *ntlmssp;
|
||||
struct iovec iov[2];
|
||||
uint8_t fixed[24];
|
||||
DATA_BLOB msg;
|
||||
int turn;
|
||||
};
|
||||
|
||||
static void smb2cli_sesssetup_ntlmssp_done(struct tevent_req *subreq);
|
||||
|
||||
struct tevent_req *smb2cli_sesssetup_ntlmssp_send(TALLOC_CTX *mem_ctx,
|
||||
struct tevent_context *ev,
|
||||
struct cli_state *cli,
|
||||
const char *user,
|
||||
const char *domain,
|
||||
const char *pass)
|
||||
{
|
||||
struct tevent_req *req, *subreq;
|
||||
struct smb2cli_sesssetup_ntlmssp_state *state;
|
||||
NTSTATUS status;
|
||||
DATA_BLOB blob_out;
|
||||
const char *OIDs_ntlm[] = {OID_NTLMSSP, NULL};
|
||||
|
||||
req = tevent_req_create(mem_ctx, &state,
|
||||
struct smb2cli_sesssetup_ntlmssp_state);
|
||||
if (req == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
state->ev = ev;
|
||||
state->cli = cli;
|
||||
|
||||
status = ntlmssp_client_start(state,
|
||||
lp_netbios_name(),
|
||||
lp_workgroup(),
|
||||
lp_client_ntlmv2_auth(),
|
||||
&state->ntlmssp);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
goto post_status;
|
||||
}
|
||||
ntlmssp_want_feature(state->ntlmssp,
|
||||
NTLMSSP_FEATURE_SESSION_KEY);
|
||||
status = ntlmssp_set_username(state->ntlmssp, user);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
goto post_status;
|
||||
}
|
||||
status = ntlmssp_set_domain(state->ntlmssp, domain);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
goto post_status;
|
||||
}
|
||||
status = ntlmssp_set_password(state->ntlmssp, pass);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
goto post_status;
|
||||
}
|
||||
|
||||
status = ntlmssp_update(state->ntlmssp, data_blob_null, &blob_out);
|
||||
if (!NT_STATUS_IS_OK(status)
|
||||
&& !NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
|
||||
goto post_status;
|
||||
}
|
||||
|
||||
blob_out = spnego_gen_negTokenInit(state, OIDs_ntlm, &blob_out, NULL);
|
||||
state->turn = 1;
|
||||
|
||||
state->cli->smb2.session = smbXcli_session_create(cli, cli->conn);
|
||||
if (tevent_req_nomem(state->cli->smb2.session, req)) {
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
|
||||
subreq = smb2cli_session_setup_send(state, state->ev,
|
||||
state->cli->conn,
|
||||
state->cli->timeout,
|
||||
state->cli->smb2.session,
|
||||
0, /* in_flags */
|
||||
SMB2_CAP_DFS, /* in_capabilities */
|
||||
0, /* in_channel */
|
||||
NULL, /* in_previous_session */
|
||||
&blob_out);
|
||||
if (tevent_req_nomem(subreq, req)) {
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
tevent_req_set_callback(subreq, smb2cli_sesssetup_ntlmssp_done, req);
|
||||
return req;
|
||||
post_status:
|
||||
tevent_req_nterror(req, status);
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
|
||||
static void smb2cli_sesssetup_ntlmssp_done(struct tevent_req *subreq)
|
||||
{
|
||||
struct tevent_req *req =
|
||||
tevent_req_callback_data(subreq,
|
||||
struct tevent_req);
|
||||
struct smb2cli_sesssetup_ntlmssp_state *state =
|
||||
tevent_req_data(req,
|
||||
struct smb2cli_sesssetup_ntlmssp_state);
|
||||
NTSTATUS status;
|
||||
DATA_BLOB blob, blob_in, blob_out, spnego_blob;
|
||||
bool ret;
|
||||
struct iovec *recv_iov;
|
||||
|
||||
status = smb2cli_session_setup_recv(subreq, state, &recv_iov, &blob);
|
||||
TALLOC_FREE(subreq);
|
||||
if (!NT_STATUS_IS_OK(status)
|
||||
&& !NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
|
||||
tevent_req_nterror(req, status);
|
||||
return;
|
||||
}
|
||||
|
||||
if (NT_STATUS_IS_OK(status)) {
|
||||
status = smb2cli_session_update_session_key(state->cli->smb2.session,
|
||||
state->ntlmssp->session_key,
|
||||
recv_iov);
|
||||
if (tevent_req_nterror(req, status)) {
|
||||
return;
|
||||
}
|
||||
|
||||
tevent_req_done(req);
|
||||
return;
|
||||
}
|
||||
|
||||
if (state->turn == 1) {
|
||||
DATA_BLOB tmp_blob = data_blob_null;
|
||||
ret = spnego_parse_challenge(state, blob, &blob_in, &tmp_blob);
|
||||
data_blob_free(&tmp_blob);
|
||||
} else {
|
||||
ret = spnego_parse_auth_response(state, blob, status,
|
||||
OID_NTLMSSP, &blob_in);
|
||||
}
|
||||
TALLOC_FREE(subreq);
|
||||
if (!ret) {
|
||||
tevent_req_nterror(req, NT_STATUS_INVALID_NETWORK_RESPONSE);
|
||||
return;
|
||||
}
|
||||
|
||||
status = ntlmssp_update(state->ntlmssp, blob_in, &blob_out);
|
||||
data_blob_free(&blob_in);
|
||||
state->turn += 1;
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
tevent_req_nterror(req, status);
|
||||
return;
|
||||
}
|
||||
|
||||
spnego_blob = spnego_gen_auth(state, blob_out);
|
||||
TALLOC_FREE(subreq);
|
||||
if (tevent_req_nomem(spnego_blob.data, req)) {
|
||||
return;
|
||||
}
|
||||
|
||||
subreq = smb2cli_session_setup_send(state, state->ev,
|
||||
state->cli->conn,
|
||||
state->cli->timeout,
|
||||
state->cli->smb2.session,
|
||||
0, /* in_flags */
|
||||
SMB2_CAP_DFS, /* in_capabilities */
|
||||
0, /* in_channel */
|
||||
NULL, /* in_previous_session */
|
||||
&spnego_blob);
|
||||
if (tevent_req_nomem(subreq, req)) {
|
||||
return;
|
||||
}
|
||||
tevent_req_set_callback(subreq, smb2cli_sesssetup_ntlmssp_done, req);
|
||||
}
|
||||
|
||||
NTSTATUS smb2cli_sesssetup_ntlmssp_recv(struct tevent_req *req)
|
||||
{
|
||||
return tevent_req_simple_recv_ntstatus(req);
|
||||
}
|
||||
|
||||
NTSTATUS smb2cli_sesssetup_ntlmssp(struct cli_state *cli, const char *user,
|
||||
const char *domain, const char *pass)
|
||||
{
|
||||
TALLOC_CTX *frame = talloc_stackframe();
|
||||
struct event_context *ev;
|
||||
struct tevent_req *req;
|
||||
NTSTATUS status = NT_STATUS_NO_MEMORY;
|
||||
|
||||
if (cli_has_async_calls(cli)) {
|
||||
/*
|
||||
* Can't use sync call while an async call is in flight
|
||||
*/
|
||||
status = NT_STATUS_INVALID_PARAMETER;
|
||||
goto fail;
|
||||
}
|
||||
ev = event_context_init(frame);
|
||||
if (ev == NULL) {
|
||||
goto fail;
|
||||
}
|
||||
req = smb2cli_sesssetup_ntlmssp_send(frame, ev, cli, user, domain, pass);
|
||||
if (req == NULL) {
|
||||
goto fail;
|
||||
}
|
||||
if (!tevent_req_poll_ntstatus(req, ev, &status)) {
|
||||
goto fail;
|
||||
}
|
||||
status = smb2cli_sesssetup_ntlmssp_recv(req);
|
||||
fail:
|
||||
TALLOC_FREE(frame);
|
||||
return status;
|
||||
}
|
||||
|
||||
struct smb2cli_logoff_state {
|
||||
uint8_t fixed[4];
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user