[Linux-Biella] dopo tante ricerche...
LeOS
linux@bilug.linux.it
Mon, 18 Nov 2002 11:36:15 +0100
LeOS wrote:
>
> senza esito... mi son codato il programma ke mi serviva...
chiedo venia... c'era un bug nato dopo una modifica che pensavo indolore...
ecco il codice riveduto e corretto:
#!/usr/bin/perl
# finalmente dopo mille peripezie abbiamo finito mypwd
# se scrivo:
# mypwd user pass
# senza definire un output file
# mi visualizza semplicemente user:passwdMD5
#
# se invece scrivo
# mypwd user pass file
# apre il file
# verifica l'esistenza di user
# se esiste sostituisce la riga
# se non esiste aggiunge la riga in fondo
# serve il modulo: Crypt-PasswdMD5-1.2
$user = $ARGV[0];
$pass = $ARGV[1];
$file = $ARGV[2];
if ($user eq ""){
printf "usage:\nmypwd user pass outputfile\n\n";
exit;
}
if (-e $file){
system ("cp $file $file.old");
}
use Crypt::PasswdMD5;
my $salt;
$cryptedpass = unix_md5_crypt($pass, $salt);
if ($file eq ""){
printf "$user:$cryptedpass\n";
}
else{
&mod_add();
}
exit;
sub mod_add {
# apro il file e lo memorizzo in un array
open(readfile, "< $file") or die "Couldn't open $file $!\n";
@riga = <readfile>;
close(readfile);
$lung = @riga-1;
# eseguo la scanZione dell'array
$sost = 0;
for ($cnt = 0;$cnt <= $lung; $cnt++){
chomp($riga[$cnt]);
my @rigasplit;
@rigasplit=split("\\:",$riga[$cnt]);
$quanticampi=@rigasplit;
# lo user esiste...
if ($rigasplit[0] eq $user){
#$riga[$cnt] = "$user:$cryptedpass";
$riga[$cnt] = "$user:$cryptedpass";
$sost = 1;
for($cntcampi=2;$cntcampi<$quanticampi;$cntcampi++){
$riga[$cnt]=$riga[$cnt].":".$rigasplit[$cntcampi];
}
}
}
if ($sost != 1){
$lung++;
$riga[$lung] = "$user:$cryptedpass";
}
open (writefile, "> $file") || die "Stocazzo!!!";
for($cnt = 0; $cnt <= $lung ;$cnt ++){
print writefile "$riga[$cnt]\n";
}
close (writefile);
}