3
{Test the user's password}
6
uses shadow, pwd, strings, crypt_h, cmem;
9
strUserName, Password : String;
10
sEntry : PPasswordFileEntry;
19
Function UserEncPass(User: String): String;
21
A : Array[0..255] of char;
25
Writeln('User name is ',A);
27
sEntry := getspnam(A);
31
Writeln('No shadow entry');
33
pEntry := getpwnam(A);
37
Writeln('No passwd entry');
42
if sEntry <> nil then UserEncPass := sEntry^.sp_pwdp;
43
if pEntry <> nil then UserEncPass := pEntry^.pw_passwd
46
Function CheckPass(User, Pass: String): Integer;
48
EncPass, ResultPass, SSalt : String;
49
PCPass, PCSalt, PCResult : Array[0..255] of Char;
52
EncPass := UserEncPass(User);
54
Writeln('Encrypted PW is : ',EncPass);
56
If EncPass = NoUser then
58
CheckPass := Err_NoUser;
60
Writeln('No user named ',User,'.');
65
If Copy(EncPass,1,3) = '$1$' then
70
SSalt := SSalt + EncPass[I];
72
Until EncPass[I] = '$';
76
PCSalt := Copy(EncPass,1,2);
78
Writeln('Salt is : ',PCSalt);
80
PCResult := crypt(PCPass, PCSalt);
81
ResultPass := StrPas(PCResult);
83
Writeln('From passwd/shadow : ',EncPass);
84
Writeln('From crypt : ',ResultPass);
86
If ResultPass = EncPass then
87
CheckPass := Err_NoErr
89
CheckPass := Err_WrongPass
93
Write('User name : ');
97
If CheckPass(strUserName, Password) = Err_NoErr then
98
Writeln('User authentication succeeded')
100
Writeln('User autentication failed.');