1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-07 20:23:50 +03:00

r9112: Fix #2953 - credentials chain on DC gets out of sync with client when

NT_STATUS_NO_USER returned.  We were moving to the next step in the
chain when the client wasn't.  Only update when the user logs on.
This commit is contained in:
Jim McDonough
2005-08-05 12:33:00 +00:00
committed by Gerald (Jerry) Carter
parent f5756c2611
commit b01a3a4111
2 changed files with 42 additions and 7 deletions

View File

@@ -208,8 +208,36 @@ BOOL deal_with_creds(uchar sess_key[8],
DEBUG(5,("deal_with_creds: clnt_cred=%s\n", credstr(sto_clnt_cred->challenge.data)));
/* store new seed in client credentials */
SIVAL(sto_clnt_cred->challenge.data, 0, new_cred);
/* Bug #2953 - don't store new seed in client credentials
here, because we need to make sure we're moving forward first
*/
return True;
}
/*
stores new seed in client credentials
jmcd - Bug #2953 - moved this functionality out of deal_with_creds, because we're
not supposed to move to the next step in the chain if a nonexistent user tries to logon
*/
void reseed_client_creds(DOM_CRED *sto_clnt_cred, DOM_CRED *rcv_clnt_cred)
{
UTIME new_clnt_time;
uint32 new_cred;
/* increment client time by one second */
new_clnt_time.time = rcv_clnt_cred->timestamp.time + 1;
/* first 4 bytes of the new seed is old client 4 bytes + clnt time + 1 */
new_cred = IVAL(sto_clnt_cred->challenge.data, 0);
new_cred += new_clnt_time.time;
DEBUG(5,("reseed_client_creds: new_cred[0]=%x\n", new_cred));
DEBUG(5,("reseed_client_creds: new_clnt_time=%x\n",
new_clnt_time.time));
DEBUG(5,("reseed_client_creds: clnt_cred=%s\n",
credstr(sto_clnt_cred->challenge.data)));
/* store new seed in client credentials */
SIVAL(sto_clnt_cred->challenge.data, 0, new_cred);
}