�p�X���[�h�ύXCGI

  ����   CGI
�X�N���v�g
  CGI
�Ăяo��

smtp�T�[�o�ƒʐM�����[���𑗐M����X�N���v�g

#!/usr/local/bin/perl

# �ȉ���Net::Telnet���W���[�����W���̏ꏊ�ɂȂ��ꍇ�̂ݎw��
#use lib "/usr/local/lib/jperl5/Net";

######################################################################
# �ȉ��̕����ŗ��p����V�X�e����passwd�R�}���h�̃v�����v�g��ݒ肷��
######################################################################

$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 "�G���[���������܂���\n";
    &finalize;
}

sub bad_password{
    print "�p�X���[�h�Ƃ��Ďg�p�ł��Ȃ��������g�p���Ă���”\��������܂�\n";
    print "�p�X���[�h�ɂ̓A���t�@�x�b�g�Ɛ������g�����Ƃ��ł��܂�\n";
    print "�V�����p�X���[�h�ɕʂ̃p�X���[�h���w�肵�Ă�������\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 "�Q����͂����V�����p�X���[�h���قȂ�܂�\n";
    print "������x�����������\n";
    print "</body>\n";
    exit;
} else {
    $newpassword = $newpw1;
}

if ($newpassword !~ /[a-zA-Z0-9_]+/) {
    print "�g�����Ƃ̂ł��Ȃ��������g�p���Ă��܂�\n";
    print "�g�����Ƃ̂ł��镶���� a..z 0..9 _ �ł�\n";
    print "�啶�����g�����Ƃ͊��߂��Ă��܂���\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 "�p�X���[�h��ύX���܂���\n";
print "</body>\n";

FC Lab�̃z�[���� �u�l�b�g���[�N�v���O���~���O�v�̃y�[�W��