Add LM_OWF_PASSWORD and NT_OWF_PASSWORD types and use them.
See MS-NRPC sections 2.2.1.1.1 to 2.2.1.1.4.

svn path=/trunk/; revision=71364
This commit is contained in:
Eric Kohl 2016-05-21 13:12:53 +00:00
parent 2eca65d304
commit c26a5012b8
3 changed files with 18 additions and 11 deletions

View file

@ -300,10 +300,10 @@ SamChangePasswordUser(IN SAM_HANDLE UserHandle,
IN PUNICODE_STRING OldPassword, IN PUNICODE_STRING OldPassword,
IN PUNICODE_STRING NewPassword) IN PUNICODE_STRING NewPassword)
{ {
ENCRYPTED_NT_OWF_PASSWORD OldNtPassword; NT_OWF_PASSWORD OldNtPassword;
ENCRYPTED_NT_OWF_PASSWORD NewNtPassword; NT_OWF_PASSWORD NewNtPassword;
ENCRYPTED_LM_OWF_PASSWORD OldLmPassword; LM_OWF_PASSWORD OldLmPassword;
ENCRYPTED_LM_OWF_PASSWORD NewLmPassword; LM_OWF_PASSWORD NewLmPassword;
OEM_STRING LmPwdString; OEM_STRING LmPwdString;
CHAR LmPwdBuffer[15]; CHAR LmPwdBuffer[15];
BOOLEAN OldLmPasswordPresent = FALSE; BOOLEAN OldLmPasswordPresent = FALSE;
@ -312,8 +312,8 @@ SamChangePasswordUser(IN SAM_HANDLE UserHandle,
ENCRYPTED_LM_OWF_PASSWORD OldLmEncryptedWithNewLm; ENCRYPTED_LM_OWF_PASSWORD OldLmEncryptedWithNewLm;
ENCRYPTED_LM_OWF_PASSWORD NewLmEncryptedWithOldLm; ENCRYPTED_LM_OWF_PASSWORD NewLmEncryptedWithOldLm;
ENCRYPTED_LM_OWF_PASSWORD OldNtEncryptedWithNewNt; ENCRYPTED_NT_OWF_PASSWORD OldNtEncryptedWithNewNt;
ENCRYPTED_LM_OWF_PASSWORD NewNtEncryptedWithOldNt; ENCRYPTED_NT_OWF_PASSWORD NewNtEncryptedWithOldNt;
PENCRYPTED_LM_OWF_PASSWORD pOldLmEncryptedWithNewLm = NULL; PENCRYPTED_LM_OWF_PASSWORD pOldLmEncryptedWithNewLm = NULL;
PENCRYPTED_LM_OWF_PASSWORD pNewLmEncryptedWithOldLm = NULL; PENCRYPTED_LM_OWF_PASSWORD pNewLmEncryptedWithOldLm = NULL;
@ -377,6 +377,7 @@ SamChangePasswordUser(IN SAM_HANDLE UserHandle,
if (OldLmPasswordPresent && NewLmPasswordPresent) if (OldLmPasswordPresent && NewLmPasswordPresent)
{ {
/* Encrypt the old LM hash with the new LM hash */
Status = SystemFunction012((const BYTE *)&OldLmPassword, Status = SystemFunction012((const BYTE *)&OldLmPassword,
(const BYTE *)&NewLmPassword, (const BYTE *)&NewLmPassword,
(LPBYTE)&OldLmEncryptedWithNewLm); (LPBYTE)&OldLmEncryptedWithNewLm);
@ -386,6 +387,7 @@ SamChangePasswordUser(IN SAM_HANDLE UserHandle,
return Status; return Status;
} }
/* Encrypt the new LM hash with the old LM hash */
Status = SystemFunction012((const BYTE *)&NewLmPassword, Status = SystemFunction012((const BYTE *)&NewLmPassword,
(const BYTE *)&OldLmPassword, (const BYTE *)&OldLmPassword,
(LPBYTE)&NewLmEncryptedWithOldLm); (LPBYTE)&NewLmEncryptedWithOldLm);
@ -399,6 +401,7 @@ SamChangePasswordUser(IN SAM_HANDLE UserHandle,
pNewLmEncryptedWithOldLm = &NewLmEncryptedWithOldLm; pNewLmEncryptedWithOldLm = &NewLmEncryptedWithOldLm;
} }
/* Encrypt the old NT hash with the new NT hash */
Status = SystemFunction012((const BYTE *)&OldNtPassword, Status = SystemFunction012((const BYTE *)&OldNtPassword,
(const BYTE *)&NewNtPassword, (const BYTE *)&NewNtPassword,
(LPBYTE)&OldNtEncryptedWithNewNt); (LPBYTE)&OldNtEncryptedWithNewNt);
@ -408,6 +411,7 @@ SamChangePasswordUser(IN SAM_HANDLE UserHandle,
return Status; return Status;
} }
/* Encrypt the new NT hash with the old NT hash */
Status = SystemFunction012((const BYTE *)&NewNtPassword, Status = SystemFunction012((const BYTE *)&NewNtPassword,
(const BYTE *)&OldNtPassword, (const BYTE *)&OldNtPassword,
(LPBYTE)&NewNtEncryptedWithOldNt); (LPBYTE)&NewNtEncryptedWithOldNt);

View file

@ -8047,10 +8047,10 @@ SamrChangePasswordUser(IN SAMPR_HANDLE UserHandle,
{ {
ENCRYPTED_LM_OWF_PASSWORD StoredLmPassword; ENCRYPTED_LM_OWF_PASSWORD StoredLmPassword;
ENCRYPTED_NT_OWF_PASSWORD StoredNtPassword; ENCRYPTED_NT_OWF_PASSWORD StoredNtPassword;
ENCRYPTED_LM_OWF_PASSWORD OldLmPassword; LM_OWF_PASSWORD OldLmPassword;
ENCRYPTED_LM_OWF_PASSWORD NewLmPassword; LM_OWF_PASSWORD NewLmPassword;
ENCRYPTED_NT_OWF_PASSWORD OldNtPassword; NT_OWF_PASSWORD OldNtPassword;
ENCRYPTED_NT_OWF_PASSWORD NewNtPassword; NT_OWF_PASSWORD NewNtPassword;
BOOLEAN StoredLmPresent = FALSE; BOOLEAN StoredLmPresent = FALSE;
BOOLEAN StoredNtPresent = FALSE; BOOLEAN StoredNtPresent = FALSE;
BOOLEAN StoredLmEmpty = TRUE; BOOLEAN StoredLmEmpty = TRUE;

View file

@ -28,7 +28,10 @@ typedef [context_handle] void *SAMPR_HANDLE;
typedef struct _ENCRYPTED_LM_OWF_PASSWORD typedef struct _ENCRYPTED_LM_OWF_PASSWORD
{ {
char data[16]; char data[16];
} ENCRYPTED_LM_OWF_PASSWORD, *PENCRYPTED_LM_OWF_PASSWORD, ENCRYPTED_NT_OWF_PASSWORD, *PENCRYPTED_NT_OWF_PASSWORD; } LM_OWF_PASSWORD, *PLM_OWF_PASSWORD,
NT_OWF_PASSWORD, *PNT_OWF_PASSWORD,
ENCRYPTED_LM_OWF_PASSWORD, *PENCRYPTED_LM_OWF_PASSWORD,
ENCRYPTED_NT_OWF_PASSWORD, *PENCRYPTED_NT_OWF_PASSWORD;
typedef struct _SAMPR_ULONG_ARRAY typedef struct _SAMPR_ULONG_ARRAY
{ {