[Linux-Biella] dopo tante ricerche...
LeOS
linux@bilug.linux.it
Mon, 18 Nov 2002 11:25:27 +0100
senza esito... mi son codato il programma ke mi serviva...
praticamente avevo necessita' di poter manipolare un file contentente
user e password hashata in MD5
nei termini taaaaaanto tempo fa avevo un programma chiamato mypwd che
funzionava cosi':
mypwd user pass file
e lui apriva il file, verificava l'esistenza di user e ne modificava la
pass hashandola, se invece questo user non esisteva, aggiungeva la riga
in fondo al file.
funzionava benissimo se non fosse per il fatto che era stato compilato
con librerie non statiche e non funzionava se non con la slack 7.1
quindi me lo sono rifatto :)
con un paio di modifiche:
1: e' possibile omettere il nome del file di destinazione, cosi' facendo
viene semplicemente visualizzato a schermo user:passhashed
2: se il programma incontra file di password complessi tipo shadow o che
altro, quindi con altri parametri oltre al semplice username e password,
mantiene anche quello che segue
3: do' per scontato che il file in questione abbia come primo valore
username e come secondo valore la password, divisi tra loro da i
classici due punti.
engioi:
#!/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;
}
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";
$sost = 1;
for($cntcampi=1;$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);
}