#!/usr/local/bin/perl
# 以下はNet::Telnetモジュールが標準の場所にない場合のみ指定
#use lib "/usr/local/lib/jperl5/Net";
######################################################################
# 以下の部分で利用するシステムのpasswdコマンドのプロンプトを設定する
######################################################################
$passwd_prompt1 = '(current) UNIX password: ';
$passwd_prompt2 = 'Enter new UNIX password: ';
$passwd_prompt3 = 'Retype new UNIX password: ';
$passwd_success = "password updated successfully";
######################################################################
# subroutines
######################################################################
sub unexpected_error{
print "エラーが発生しました\n";
&finalize;
}
sub bad_password{
print "パスワードとして使用できない文字を使用している可能性があります\n";
print "パスワードにはアルファベットと数字を使うことができます\n";
print "新しいパスワードに別のパスワードを指定してください\n";
&finalize;
}
sub finalize {
$t->close;
print "</body>\n";
exit;
}
######################################################################
# main routine
######################################################################
$request_method = $ENV{'REQUEST_METHOD'};
if ($request_method eq "GET") {
@args = split(/&/,$ENV{'QUERY_STRING'});
} else {
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
@args = split(/&/,$buffer);
}
foreach $arg (@args) {
($name, $value) = split(/=/,$arg);
$name =~ s/\n//g;
$form{$name} = $value;
}
$hostname = $form{'hostname'};
$username = $form{'username'};
$password = $form{'password'};
$newpw1 = $form{'newpw1'};
$newpw2 = $form{'newpw2'};
print "Content-type: text/html\n\n";
print "<html><head><title>password change</title></head>\n";
print "<body>\n";
if ($newpw1 ne $newpw2) {
print "2回入力した新しいパスワードが異なります\n";
print "もう一度いれてください\n";
print "</body>\n";
exit;
} else {
$newpassword = $newpw1;
}
if ($newpassword !~ /[a-zA-Z0-9_]+/) {
print "使うことのできない文字を使用しています\n";
print "使うことのできる文字は a..z 0..9 _ です\n";
print "大文字を使うことは勧められていません\n";
print "</body>\n";
exit;
}
use Net::Telnet ();
#$t = new Net::Telnet (Host => "localhost", Dump_Log => "log");
$t = new Net::Telnet (Host => "localhost", Errmode => "return");
$t->login($username,$password);
$t->print("passwd");
$t->waitfor(String => $passwd_prompt1);
if ($t->timed_out) {&unexpected_error;}
$t->print("$password");
$t->waitfor(String => $passwd_prompt2);
if ($t->timed_out) {&unexpected_error;}
$t->print("$newpassword");
$t->waitfor(String => $passwd_prompt3);
if ($t->timed_out) {&unexpected_error;}
$t->print("$newpassword");
$t->waitfor(String => $passwd_success);
if ($t->timed_out) {&unexpected_error;}
$t->close;
print "パスワードを変更しました\n";
print "</body>\n";
|