Mi basterebbe anche uno script di partenza da modificare per le esigenze
specifiche o almeno qualcosa su cui iniziare a lavorare.
Grazie, ciao!
Paperoga.
Anziché elencare ipotesi implementative, dovresti descrivere con
precisione quali sono le difficoltà che incontri, una alla volta,
altrimenti diventa difficile aiutarti (comunque quello che chiedi è
banale da implementare, se vuoi soltanto cambiare la password
dell'utente - per cui non capisco dov'è che ti sei bloccato: una cosa
alla volta, mi raccomando! ;-)
La cosa principale ed anche la più importante è che non ho idea di come
possa essere realizzata è: verificare che l'utente che immette i propri
login/password sia effettivamente un utente del dominio.
Il problema nasce dal fatto che il mio script che cambia le password
agli utenti, gira come root e quindi non gli viene mai chiesta la
vecchia password.
In questo modo però (ovvero se non autentico l'utente) non so mai se chi
cerca di cambiare la password è veramente chi dice di essere e quindi
potrebbero verificarsi situazioni in cui un utente ppuò cambiare la
password di un altro piuttosto che la sua.
Spero di essere stato maggiormente chiaro questa volta.
> Ciao Emanuele,
> ti ringrazio per l'interessamento e mi scuso se sono stato poco chiaro.
> Il punto è che non so da dove partire perciò cercavo qualcosa di
> semi-pronto da modificare ovviamente sulla base delle mie esigenze reali.
Nessun problema, ma il fatto è che non sapevo proprio dove indirizzarti,
non sapendo se ti eri fermato sull'autenticazione, o prima ancora sulla
lettura dei parametri cgi, o successivamente sul cambio della password:
avrei dovuto postare un sacco di esempi col rischio poi che non era
nulla di quello che ti serviva (da cui l'importanza di fare una sola
domanda alla volta il più possibile circostanziata ;-)
> La cosa principale ed anche la più importante è che non ho idea di come
> possa essere realizzata è: verificare che l'utente che immette i propri
> login/password sia effettivamente un utente del dominio.
>
> Il problema nasce dal fatto che il mio script che cambia le password
> agli utenti, gira come root e quindi non gli viene mai chiesta la
> vecchia password.
No, *non* lo fare, non c'è n'è alcun bisogno (vedi oltre).
Fai girare lo script come cgi normale, con i privilegi del web server.
> In questo modo però (ovvero se non autentico l'utente) non so mai se chi
> cerca di cambiare la password è veramente chi dice di essere e quindi
> potrebbero verificarsi situazioni in cui un utente ppuò cambiare la
> password di un altro piuttosto che la sua.
>
> Spero di essere stato maggiormente chiaro questa volta.
OK, allora mi sembra che il problema sia l'autenticazione dell'utente
contro Samba.
In realtà, se vuoi _solo_ cambiare la password, il problema non si pone
neanche: basta usare "smbpasswd -s -U username" come utente non
privilegiato e ti verrà chiesta la vecchia password, per cui l'utente lo
autentichi contestualmente al cambiamento della password (lo switch -s
serve ad eseguire smbpasswd in maniera non interattiva: man smbpasswd).
In sostanza, senza neanche farlo autenticare prima, basta che proponi
all'utente una form con i seguenti 4 campi: username, vecchia password,
nuova password, conferma della nuova passowrd, e poi invochi smbpasswd
con i dati POSTati.
Ecco lo script (quasi) completo:
-----
use CGI;
my $q = CGI->new;
my $user = $q->param('username');
my $old_p = $q->param('old_password');
my $new_p = $q->param('new_password');
my $new_p_2 = $q->param('confirm_new_password');
my $r =
`(echo $old_p; echo $new_p; echo $new_p_2;) | smbpasswd -s -U $user`
my $user_feedback = $r =~ /^Password changed/
? 'OK' : 'Error';
# ...
-----
Ma ora viene il brutto (era troppo semplice ;-)
Benché lo script funzioni (salvo errori di battitura e locales
nostrani), è estremamente insicuro, perché passa all'operatore `` input
utente non controllato.
La messa in sicurezza la lascio a te, ma se hai problemi fammi sapere
(non lo faccio per sadismo, se fossi partito subito con la soluzione
sicura sarebbe stato assai meno chiaro).
Questa FAQ dice già quasi tutto:
http://faq.perl.org/perlfaq8.html#How_can_I_call_backt
Se dovessi avere altri problemi o esigenze fammi sapere.
Sarebbe altresì utile che alla fine postassi la tua soluzione, perché
potrebbe servire a qualcun altro.
Ciao!
Ciao e grazie ancora.
Emanuele Zeppieri ha scritto: