パスワード変更CGI

  説明   CGI
スクリプト
  CGI
呼び出し

smtpサーバと通信しメールを送信するスクリプト

#!/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";

FC Labのホームへ 「ネットワークプログラミング」のページへ