Newsgroup: it.comp.lang.perl
Titolo: shadow password il mio incubo!!

Dopo vari tentativi..
provo ad inserire 2 utenti con la medesima password e vedo che succede:
useradd pippo
useradd pluto
passwd pippo (provapasswd)
passwd pluto (provapasswd)
quindi faccio un cat /etc/shadow ed ecco il risultato:
pippo:$1$2NIbClXS$r6sRYLhAXPFDEHNUTWZFg1:11959:0:99999:7:::
pluto:$1$DE0NKyNG$rVwGIGVFIYHvdaYu4/lo1/:11959:0:99999:7:::
al ché comincio a dubitare... com'è che con la medesima password 
"provapasswd" ottengo 2 stringhe diverse?
che dite mi sto avvicinando con una cosa simile:
#!/usr/bin/perl
print "Inserire user\n";
chop($name=<STDIN>);
print "\nInserire password per $name:\n";
chop($pwd=<STDIN>);
print "\nConferma password\n";
chop($pwd_confirm=<STDIN>);
if ($pwd ne $pwd_confirm) {
print "Le due password digitate non sono uguali\n";
exit;
} else {
open(PASSWD, ">> /root/Desktop/provapasswd")
|| die "Non riesco ad aprire il file. $!\n";
#$salt = chr(int(rand(26))+65) . chr(int(rand(26))+65);
$crypted_pwd = crypt($pwd, '$1$abcdefij$');
print PASSWD "$name:$crypted_pwd\n";
close PASSWD;
print "\nOperazione riuscita!\n";
}

 "provapasswd" ottengo 2 stringhe diverse?
E` il salt. E` stato fatto apposta.
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://www.radiance.d2g.com/~zefram
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 }
Se cerchi con google un mesetto fa avevo scritto un lungo post su 
questo argomento (cambio passwrd e gestione utenti, forse si parlava di 
/etc/passwd, ma il succo non cambia).
-- 
Saluti,
Giancarlo

 /etc/passwd, ma il succo non cambia).
purtroppo non l'ho trovato..
ma ho quasi risolto..
il modo è certamente poco elegante lo so ma è ancora allo stadio larvale..
anche se vorrei eliminare il modulo Crypt::PasswdMD5 o in alternativa dovrei 
farlo installare automaticamente a chi intenda utilizzare lo script il che 
non mi pare troppo carino..
#carico il modulo
use Crypt::PasswdMD5; 
#verifico che la password e la conferma coincidano
if ($password ne $confirm_password) {
print "Le due password digitate non sono uguali\n";
exit;
} else {
#quindi inserisco l'utente ..
system ("useradd  $user_id -c $domain_name -s /bin/bash -d 
/var/www/html/$domain_name ");
#ma siccome useradd scrive anche in /etc/shadow vado ad eliminare la riga 
#corrispondente all'utente appena inserito
system ("cat /etc/shadow |grep -v $user_id >> /etc/shadow_tmp");
system ("mv -f /etc/shadow_tmp /etc/shadow");
#quindi mi preparo a scrivere la password nel file shadow
open(PASSWD, ">> /etc/shadow")
|| die "Non riesco ad aprire il file. $!\n";
$salt = chr(int(rand(26))+65) . chr(int(rand(26))+65);
$crypted_pwd = unix_md5_crypt($password, $salt);
print PASSWD "$user_id:$crypted_pwd:11934:0:99999:7:::\n";
close PASSWD;
}
il tutto pare funzionare almeno a livello di test anche se la parte 
":11934:0:99999:7:::" immagino dovrei generarla dinamicamente in qualche 
modo 
 

 }
Io sostiuirei tutto cio con un 
open (PWD,'/etc/shadow');
open (NEW_PWD,'/etc/shadow_new');
while (<PWD>) {
        if (s/:$user_id:/) {
                print NEW_PWD "$user_id:$crypted_pwd:11934:0:99999:7:::\n";
        } else {
                print ;
        }
}
In generale occhio agli accessi concorrenti... magari usa flock sui 
file che apri.
Domanda: perche non set-ti la password con useradd con l'opzione -p?
-- 
Saluti,
Giancarlo

 }
mi son scordato la fine....
close PWD;
close NWE_PWD;
rename ('/etc/shadow_new','/etc/shadow');
-- 
Saluti,
Giancarlo