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