struct reply_sesssetup_and_X_state {
struct smb_request *req;
+ struct auth4_context *auth_context;
+ struct auth_usersupplied_info *user_info;
const char *user;
const char *domain;
DATA_BLOB lm_resp;
const char *native_os;
const char *native_lanman;
const char *primary_domain;
- struct auth_usersupplied_info *user_info = NULL;
struct auth_session_info *session_info = NULL;
uint16_t smb_flag2 = req->flags2;
uint16_t action = 0;
reload_services(sconn, conn_snum_used, true);
if (!*state->user) {
- struct auth4_context *auth_context = NULL;
-
DEBUG(3,("Got anonymous request\n"));
- nt_status = make_auth4_context(state, &auth_context);
+ nt_status = make_auth4_context(state, &state->auth_context);
if (NT_STATUS_IS_OK(nt_status)) {
uint8_t chal[8];
- auth_context->get_ntlm_challenge(auth_context,
- chal);
+ state->auth_context->get_ntlm_challenge(
+ state->auth_context, chal);
if (!make_user_info_guest(state,
sconn->remote_address,
sconn->local_address,
- "SMB", &user_info)) {
+ "SMB", &state->user_info)) {
nt_status = NT_STATUS_NO_MEMORY;
}
if (NT_STATUS_IS_OK(nt_status)) {
- user_info->auth_description = "guest";
- nt_status = auth_check_password_session_info(
- auth_context,
- req, user_info,
- &session_info);
+ state->user_info->auth_description = "guest";
}
- TALLOC_FREE(auth_context);
}
} else if (doencrypt) {
- struct auth4_context *negprot_auth_context = NULL;
- negprot_auth_context = xconn->smb1.negprot.auth_context;
- if (!negprot_auth_context) {
+ state->auth_context = xconn->smb1.negprot.auth_context;
+ if (state->auth_context == NULL) {
DEBUG(0, ("reply_sesssetup_and_X: Attempted encrypted "
"session setup without negprot denied!\n"));
reply_nterror(req, nt_status_squash(
return;
}
nt_status = make_user_info_for_reply_enc(state,
- &user_info,
+ &state->user_info,
state->user,
state->domain,
sconn->remote_address,
state->nt_resp);
if (NT_STATUS_IS_OK(nt_status)) {
- user_info->auth_description = "bare-NTLM";
- nt_status = auth_check_password_session_info(negprot_auth_context,
- req, user_info, &session_info);
+ state->user_info->auth_description = "bare-NTLM";
}
} else {
- struct auth4_context *plaintext_auth_context = NULL;
-
- nt_status = make_auth4_context(
- state, &plaintext_auth_context);
-
+ nt_status = make_auth4_context(state, &state->auth_context);
if (NT_STATUS_IS_OK(nt_status)) {
uint8_t chal[8];
- plaintext_auth_context->get_ntlm_challenge(
- plaintext_auth_context, chal);
+ state->auth_context->get_ntlm_challenge(
+ state->auth_context, chal);
if (!make_user_info_for_reply(state,
- &user_info,
+ &state->user_info,
state->user,
state->domain,
sconn->remote_address,
}
if (NT_STATUS_IS_OK(nt_status)) {
- user_info->auth_description = "plaintext";
- nt_status = auth_check_password_session_info(plaintext_auth_context,
- req, user_info, &session_info);
+ state->user_info->auth_description = "plaintext";
}
- TALLOC_FREE(plaintext_auth_context);
}
}
- TALLOC_FREE(user_info);
+ if (!NT_STATUS_IS_OK(nt_status)) {
+ reply_nterror(req, nt_status_squash(nt_status));
+ END_PROFILE(SMBsesssetupX);
+ return;
+ }
+ nt_status = auth_check_password_session_info(state->auth_context,
+ req, state->user_info,
+ &session_info);
+ TALLOC_FREE(state->user_info);
if (!NT_STATUS_IS_OK(nt_status)) {
reply_nterror(req, nt_status_squash(nt_status));
END_PROFILE(SMBsesssetupX);