~ubuntu-branches/debian/lenny/fpc/lenny

« back to all changes in this revision

Viewing changes to fpcsrc/packages/extra/users/testpass.pp

  • Committer: Bazaar Package Importer
  • Author(s): Mazen Neifer, Torsten Werner, Mazen Neifer
  • Date: 2008-05-17 17:12:11 UTC
  • mfrom: (3.1.9 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080517171211-9qi33xhd9evfa0kg
Tags: 2.2.0-dfsg1-9
[ Torsten Werner ]
* Add Mazen Neifer to Uploaders field.

[ Mazen Neifer ]
* Moved FPC sources into a version dependent directory from /usr/share/fpcsrc
  to /usr/share/fpcsrc/${FPCVERSION}. This allow installing more than on FPC
  release.
* Fixed far call issue in compiler preventing building huge binearies.
  (closes: #477743)
* Updated building dependencies, recomennded and suggested packages.
* Moved fppkg to fp-utils as it is just a helper tool and is not required by
  compiler.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Program TestPass;
 
2
 
 
3
{Test the user's password}
 
4
{$DEFINE DEBUG}
 
5
 
 
6
uses shadow, pwd, strings, crypt_h, cmem;
 
7
 
 
8
Var
 
9
  strUserName, Password : String;
 
10
  sEntry : PPasswordFileEntry;
 
11
  pEntry : PPasswd;
 
12
 
 
13
Const
 
14
  Err_NoErr = 0;
 
15
  Err_NoUser = 1;
 
16
  Err_WrongPass = 2;
 
17
  NoUser = '*NO USER*';
 
18
 
 
19
Function UserEncPass(User: String): String;
 
20
Var
 
21
  A : Array[0..255] of char;
 
22
Begin
 
23
  A := strUserName;
 
24
  {$IFDEF DEBUG}
 
25
  Writeln('User name is ',A);
 
26
  {$ENDIF}
 
27
  sEntry := getspnam(A);
 
28
  If sEntry = nil then
 
29
  Begin
 
30
    {$IFDEF DEBUG}
 
31
    Writeln('No shadow entry');
 
32
    {$ENDIF}
 
33
    pEntry := getpwnam(A);
 
34
    If pEntry = nil then
 
35
    Begin
 
36
      {$IFDEF DEBUG}
 
37
      Writeln('No passwd entry');
 
38
      {$ENDIF}
 
39
      UserEncPass := NoUser
 
40
    End
 
41
  End;
 
42
  if sEntry <> nil then UserEncPass := sEntry^.sp_pwdp;
 
43
  if pEntry <> nil then UserEncPass := pEntry^.pw_passwd
 
44
End;
 
45
 
 
46
Function CheckPass(User, Pass: String): Integer;
 
47
Var
 
48
  EncPass, ResultPass, SSalt : String;
 
49
  PCPass, PCSalt, PCResult : Array[0..255] of Char;
 
50
  I : Integer;
 
51
Begin
 
52
  EncPass := UserEncPass(User);
 
53
  {$IFDEF DEBUG}
 
54
  Writeln('Encrypted PW is : ',EncPass);
 
55
  {$ENDIF}
 
56
  If EncPass = NoUser then
 
57
  Begin
 
58
    CheckPass := Err_NoUser;
 
59
    {$IFDEF DEBUG}
 
60
    Writeln('No user named ',User,'.');
 
61
    {$ENDIF}
 
62
    Exit
 
63
  End;
 
64
  PCPass := Pass;
 
65
  If Copy(EncPass,1,3) = '$1$' then
 
66
  Begin
 
67
    I := 4;
 
68
    SSalt := '$1$';
 
69
    Repeat
 
70
      SSalt := SSalt + EncPass[I];
 
71
      Inc(I)
 
72
    Until EncPass[I] = '$';
 
73
    PCSalt := SSalt
 
74
  End
 
75
  else
 
76
    PCSalt := Copy(EncPass,1,2);
 
77
  {$IFDEF DEBUG}
 
78
  Writeln('Salt is : ',PCSalt);
 
79
  {$ENDIF}
 
80
  PCResult := crypt(PCPass, PCSalt);
 
81
  ResultPass := StrPas(PCResult);
 
82
  {$IFDEF DEBUG}
 
83
  Writeln('From passwd/shadow : ',EncPass);
 
84
  Writeln('From crypt : ',ResultPass);
 
85
  {$ENDIF}
 
86
  If ResultPass = EncPass then
 
87
    CheckPass := Err_NoErr
 
88
  else
 
89
    CheckPass := Err_WrongPass
 
90
End;
 
91
 
 
92
Begin
 
93
  Write('User name : ');
 
94
  Readln(strUserName);
 
95
  Write('Password : ');
 
96
  Readln(Password);
 
97
  If CheckPass(strUserName, Password) = Err_NoErr then
 
98
    Writeln('User authentication succeeded')
 
99
  else
 
100
    Writeln('User autentication failed.');
 
101
End.