Dieses Programm dient dazu, sein eigenes Passwort zu ändern.
Dateiname: /usr/local/httpd/htdocs/passwd/index.cgi.
#!/usr/bin/perl -wT
# (C) 2001 Thomas Bleher <ThomasBleher@gmx.de> under the GNU GPL
# Zuletzt geändert am 22.01.2001
use CGI;# qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
#use Crypt::Cracklib;
# Konfiguration:
$PASSWORD_STRENGTH_CHECK = 0; # soll Passwort auf Sicherheit überprüft werden?
# 1: Ja; 0: Nein
# Konfiguration Ende
my $q = new CGI;
my $login = ($ENV{REMOTE_USER} =~ /^([-\w.]+)$/)[0]; # untaint me
my $user = ((getpwnam($login))[6] =~ /^([- \wäöüß]+)$/i)[0]; # me too
# (accents berücksichtigen?)
delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
$ENV{'PATH'} = '/bin:/usr/bin:/usr/local/bin';
my %errors = (
'difference' => 'Die beiden eingegebenen Passwörter waren leider
nicht identisch! :-( ',
'too short' => 'Das Passwort ist leider zu kurz! Es muss mindestens 5
Zeichen lang sein! ',
'too long' => 'Das Passwort ist leider zu lang! Es darf höchstens
8 Zeichen lang sein! ',
'ungueltig' => 'Das Paswort enthält ungültige Zeichen! Erlaubt sind die
Zeichen <b>a-z</b>, <b>A-Z</b>, <b>0-9</b> sowie
<b>#*,;:._-+$%&/|?{[()]}</b>! ',
'too easy' => 'Das Passwort ist zu leicht erratbar! Wählen sie
ein schwierigeres Passwort!!! Genauer Fehler: ',
);
print $q->header,
$q->start_html( -title=>'Passwortänderung',
-author=>'webmaster@gm.rt.schule-bw.de'),
$q->h1('Passwortänderung'),
"Hallo Benutzer <b>$user</b> ($login)! (Wenn Sie nicht Benutzer
<b>$user</b> sind, melden sie sich bitte beim <A
HREF=\"mailto:webmaster\@gm.rt.schule-bw.de\">Systemadministrator</A>!)",
$q->p, $q->startform;
if ($q->param()) { # Passwort aendern
$pw1=$q->param('pw1');
$pw2=$q->param('pw2');
# Error-checking
$pw1 ne $pw2 && fehler($errors{'difference'});
length($pw1) < 5 && fehler($errors{'too short'});
length($pw1) > 8 && fehler($errors{'too long'});
$pw1 =~ m@[^-\w#*,;:.+!$%&/|?{[()]}]@ && fehler($errors{'ungueltig'});
if ($PASSWORD_STRENGTH_CHECK) {
my $fehler = fascist_check($pw1, '/usr/lib/cracklib_dict');
$fehler !~ /^ok$/ && fehler($errors{'too easy'}.'<b>"'.$fehler.'"</b>');
}
# change passwd
# my $pw = ($pw1 =~ m@^([-\w#*,;:.+!\$\%&/|?{\[()\]}]+)$@)[0]; # untaint me
my $pw = ($pw1 =~ /(.+)/)[0]; # was already checked
$enc_passwd = crypt($pw,
join('',('.','/',0..9,'A'..'Z','a'..'z')[rand 64, rand 64]));
system('sudo','/usr/sbin/usermod','-p',$enc_passwd,$login);
fehler_bei_aenderung() if ($! or $?);
system('sudo','/usr/local/sbin/generate_apache_auth');
open PIPE, "|sudo smbpasswd -a -s $login > /dev/null"
or fehler_bei_aenderung();
print PIPE $pw,"\n",$pw,"\n" or fehler_bei_aenderung();
close PIPE or fehler_bei_aenderung();
print "<p><strong>Passwort erfolgreich geändert!</strong>";
sub fehler_bei_aenderung {
print "<p><strong>Bei der Passwortänderung ist leider etwas
schiefgegangen. (Fehlermeldung: $!). Bitte melden sie den Fehler dem
<a href=\"mailto:webmaster\@gm.rt.schule-bw.de\">Systemadministrator
</a>!</strong>";
ende();
}
} else {
print <<HERE;
Hier haben sie die Möglichkeit, ihr Passwort zu ändern.
Geben Sie es bitte zweimal ein, damit sichergestellt ist, dass sie sich
nicht vertippt haben.
<p><strong>Achtung:</strong> Ihr Passwort muss zwischen 5 und 8 Zeichen lang
sein und darf die Buchstaben <b>a-z</b>, <b>A-Z</b>, die Zahlen <b>0-9</b>
sowie die Zeichen <b>#*,;:._-+!\$\%\&/|?{[()]}</b> enthalten.
<p style="color:red"><strong>Wählen sie
ein Passwort, das nicht leicht zu erraten ist! Die
Sicherheit ihrer Daten hängt entscheidend von der
Sicherheit ihres Passworts ab!</strong>
<p style="color:red">Ihr Passwort sollte nicht nur Kleinbuchstaben, sondern
auch Großbuchstaben,
Zahlen und Sonderzeichen beinhalten!
<p>Passwort eingeben:<br>
HERE
print $q->password_field(-name=>"pw1",-size=>"8",-maxlength=>"8"),$q->br;
print $q->password_field(-name=>"pw2",-size=>"8",-maxlength=>"8"),$q->br;
print $q->submit(-name=>"eingeben",-value=>'Passwort verändern');
ende();
}
sub fehler {
my $fehler = shift;
print <<HERE;
<h1>Fehler</h1>
<p><strong style="color:#FF0000;">$fehler</strong>
<p>Geben Sie entweder die Passwörter noch einmal ein oder gehen sie
zurück zur <a href="/">Startseite</a>.
<p><strong>Achtung:</strong> Ihr Passwort muss zwischen 5 und 8 Zeichen lang
sein und darf die Buchstaben <b>a-z</b>, <b>A-Z</b>, die Zahlen <b>0-9</b>
sowie die Zeichen <b>#*,;:._-+!\$\%\&/|?{[()]}</b> enthalten.
<p>
HERE
print $q->password_field(-name=>"pw1",-size=>"8",-maxlength=>"8"),$q->br;
print $q->password_field(-name=>"pw2",-size=>"8",-maxlength=>"8"),$q->br;
print $q->submit(-name=>"eingeben",-value=>'Passwort verändern');
ende();
}
sub ende {
print '<p>Zurück zur <a href="/">Startseite</a>';
print $q->endform, $q->end_html;
exit;
}