#!/opt/perl5/bin/perl -w use strict; use Fcntl qw (:flock); use Term::ReadKey; use Crypt::CBC; my $pass_file="passfile.txt"; my %Mgrs; my $user=shift; if($user eq "KEY"){die"Can't change that!!!!\n";} open(FH,"$pass_file")|| &ERR("Unable to read password file"); flock(FH,LOCK_EX); while(){ my($mgr,$passwd,$printer) = split /\|/; chomp $printer; $Mgrs{$mgr}=[$passwd,$printer]; } flock(FH,LOCK_UN); close FH; my $ck=$Mgrs{'KEY'}[0]; #debug #print"CK is $ck\n"; if(exists $Mgrs{$user}){ if($Mgrs{$user}[0] eq ""){ &newpass; }else{ & ERR("Incorrect username"); } }else{ & ERR("Non-Existent User"); } sub ERR{ my $msg=shift; print "$msg\n"; die; } sub newpass{ print"Enter new password: "; ReadMode 2; my $p1=; chomp $p1; ReadMode 0; print "\nEnter it again (for verification): "; ReadMode 2; my $p2=; chomp $p2; ReadMode 0; print"\n"; my $crypt=Crypt::CBC->new({'key'=>$ck,'cipher'=>'Blowfish'}); my $d1=$crypt->encrypt_hex($p1); #Debug #print "$d1\n"; my $d2=$crypt->encrypt_hex($p2); #Debug #print "$d2\n"; if($d1 eq $d2){ $Mgrs{$user}[0]= $d1; }else{ &ERR("Non matching passwords."); } }