#!/usr/bin/perl
##############################################################################
# #
# hboard_std_admin.cgi Rev 1.0 (10/12/1998) #
# #
##############################################################################
# #
# 返事が書ける掲示板の管理メニュー #
# #
# Copyright (C) 1998 Web新撰組 #
# WWW: http://www.web-shinsengumi.com #
# 無断転載・複製を禁ずる #
# #
# 作成:萩原 逸郎(eMail:hagi2@kh.rim.or.jp) #
# #
##############################################################################
require './hmkpasswd.pl';
# 初期設定
# 初期設定以外はいじらんで下さい
$cginame='./hboard_std_admin.cgi'; # このCGIのファイル名
$logdata="./hboard_std.log"; # ログファイル名
$passwd_file="./passwd"; # パスワードファイル
$HOME='http://www.web-shinsengumi.com'; # ホームページのURL
$CGI_TITLE='普通の掲示板管理メニュー'; # このCGIの見出し
# 初期設定ここまで
%FORM=&get_formdata;
if($FORM{'action'}){
$action=$FORM{'action'};
$action =~ s/\n//g;
}else{
$action='show';
}
if($action eq 'show'){
&print_head;
&print_form;
&print_foot;
}elsif($action eq 'purge_data'){
if($FORM{'passwd'}){
$passwd=$FORM{'passwd'};
}else{
&error(100,'パスワードがありませぬ');
}
&check_passwd($passwd);
if($FORM{'dnum'}){
$purgenum=$FORM{'dnum'};
}else{
&error(101,'消去する番号を入れて下さい');
}
if($purgenum =~ /\D/){
&error(102,'しっぱい');
}
&purge_data($purgenum);
&print_head;
print "OK\n";
&print_foot;
}elsif($action eq 'change_passwd'){
if($FORM{'passwd'}){
$passwd=$FORM{'passwd'};
}else{
&error(200,'パスワードがありませぬ');
}
&check_passwd($passwd);
if($FORM{'passwd_a'}){
$passwd_a=$FORM{'passwd_a'};
}else{
&error(201,'パスワードが足りませぬ');
}
if($FORM{'passwd_b'}){
$passwd_b=$FORM{'passwd_b'};
}else{
&error(202,'パスワードが足りませぬ');
}
if($passwd_a ne $passwd_b){
&error(203,'パスワードがちゃいまする');
}
$new_passwd=&hmkpasswd($passwd_a);
open(OUT,"> $passwd_file");
print OUT $new_passwd;
close(OUT);
&print_head;
print "OK\n";
&print_foot;
}elsif($action eq 'bomb'){
if($FORM{'passwd'}){
$passwd=$FORM{'passwd'};
}else{
&error(200,'パスワードがありませぬ');
}
&check_passwd($passwd);
open(OUT,"> $logdata");
close(OUT);
&print_head;
print "OK\n";
&print_foot;
}
exit;
sub check_passwd {
local($passwd)=@_;
open(IN,"$passwd_file");
$enc_passwd=;
close(IN);
$enc_passwd =~ s/\n//g;
$dmy=crypt($passwd,$enc_passwd);
&error(500,'パスワードがちゃいます') if($dmy ne $enc_passwd);
}
sub purge_data{
local($purgenum)=@_;
open(IN,"$logdata");
flock(IN,2);
while(){
$data=$_;
chop($data);
push(@old,$data);
}
flock(IN,8);
close(IN);
for($i=0;$i<=$#old;$i++){
$data=$old[$i];
if($data =~ /^');
}
}else{
undef($bwd);
undef($new_bwd);
undef(@bwds);
push(@new,$data);
$i++;
$data=$old[$i];
if($data =~ /\d/){
if($data =~ /\,/){
@bwds=split(/\,/,$data);
}else{
$bwds[0]=$data;
}
foreach $bwd (@bwds) {
if($bwd != $purgenum){
$new_bwd = $new_bwd . "\," . $bwd;
}
}
$new_bwd =~ s/^\,//;
}else{
$new_bwd=$data;
}
push(@new,$new_bwd);
undef($bwd);
undef($new_bwd);
undef(@bwds);
$i++;
$data=$old[$i];
if($data =~ /\d/){
if($data =~ /\,/){
@bwds=split(/\,/,$data);
}else{
$bwds[0]=$data;
}
foreach $bwd (@bwds) {
if($bwd != $purgenum){
$new_bwd = $new_bwd . "\," . $bwd;
}
}
}else{
$new_bwd=$data;
}
$new_bwd =~ s/^\,//;
push(@new,$new_bwd);
}
}else{
push(@new,$data);
}
}
flock(IN,8);
close(IN);
open(OUT,"> $logdata");
flock(OUT,2);
foreach $data (@new){
print OUT $data,"\n";
}
flock(OUT,8);
close(OUT);
}
sub print_head {
print <<"EOL";
Content-type: text/html
$CGI_TITLE
[HOME]
$CGI_TITLE
EOL
$head_chk=1;
}
sub print_form {
print <<"EOL";
データを消す
パスワード変更
爆発
EOL
}
sub print_foot {
print "\n";
}
sub error {
local($num,$line)=@_;
if(!$head_chk){
&print_head;
}
print "\nError $num
\n$line
\n\n