session_yield(vuser);
- data_blob_free(&vuser->session_key);
-
if (vuser->auth_ntlmssp_state) {
auth_ntlmssp_end(&vuser->auth_ntlmssp_state);
}
int register_existing_vuid(uint16 vuid,
auth_serversupplied_info *server_info,
- DATA_BLOB session_key,
DATA_BLOB response_blob,
const char *smb_name)
{
fstrcpy(vuser->user.full_name,
pdb_get_fullname(server_info->sam_account));
- vuser->session_key = session_key;
-
DEBUG(10,("register_existing_vuid: (%u,%u) %s %s %s guest=%d\n",
(unsigned int)vuser->server_info->uid,
(unsigned int)vuser->server_info->gid,
!srv_signing_started()) {
/* Try and turn on server signing on the first non-guest
* sessionsetup. */
- srv_set_signing(vuser->session_key, response_blob);
+ srv_set_signing(vuser->server_info->user_session_key, response_blob);
}
/* fill in the current_user_info struct */
if (!is_partial_auth_vuid(sess_vuid)) {
sess_vuid = register_initial_vuid();
}
+
+ data_blob_free(&server_info->user_session_key);
+ server_info->user_session_key = session_key;
+ session_key = data_blob_null;
+
sess_vuid = register_existing_vuid(sess_vuid,
server_info,
- session_key,
nullblob,
client);
if (sess_vuid == UID_FIELD_INVALID ) {
ret = NT_STATUS_LOGON_FAILURE;
- data_blob_free(&session_key);
} else {
/* current_user_info is changed on new vuid */
reload_services( True );
(*auth_ntlmssp_state)->ntlmssp_state->session_key.length);
if (!is_partial_auth_vuid(vuid)) {
- data_blob_free(&session_key);
nt_status = NT_STATUS_LOGON_FAILURE;
goto out;
}
+
+ data_blob_free(&server_info->user_session_key);
+ server_info->user_session_key =
+ data_blob(
+ (*auth_ntlmssp_state)->ntlmssp_state->session_key.data,
+ (*auth_ntlmssp_state)->ntlmssp_state->session_key.length);
+
/* register_existing_vuid keeps the server info */
if (register_existing_vuid(vuid,
- server_info,
- session_key, nullblob,
+ server_info, nullblob,
(*auth_ntlmssp_state)->ntlmssp_state->user) !=
vuid) {
data_blob_free(&session_key);
bool doencrypt = global_encrypted_passwords_negotiated;
- DATA_BLOB session_key;
-
START_PROFILE(SMBsesssetupX);
ZERO_STRUCT(lm_resp);
return;
}
- if (server_info->user_session_key.data) {
- session_key = data_blob(server_info->user_session_key.data,
- server_info->user_session_key.length);
- } else {
- session_key = data_blob_null;
- }
-
data_blob_clear_free(&plaintext_password);
/* it's ok - setup a reply */
if (lp_security() == SEC_SHARE) {
sess_vuid = UID_FIELD_INVALID;
- data_blob_free(&session_key);
TALLOC_FREE(server_info);
} else {
/* Ignore the initial vuid. */
if (sess_vuid == UID_FIELD_INVALID) {
data_blob_free(&nt_resp);
data_blob_free(&lm_resp);
- data_blob_free(&session_key);
reply_nterror(req, nt_status_squash(
NT_STATUS_LOGON_FAILURE));
END_PROFILE(SMBsesssetupX);
/* register_existing_vuid keeps the server info */
sess_vuid = register_existing_vuid(sess_vuid,
server_info,
- session_key,
nt_resp.data ? nt_resp : lm_resp,
sub_user);
if (sess_vuid == UID_FIELD_INVALID) {
data_blob_free(&nt_resp);
data_blob_free(&lm_resp);
- data_blob_free(&session_key);
reply_nterror(req, nt_status_squash(
NT_STATUS_LOGON_FAILURE));
END_PROFILE(SMBsesssetupX);