#!/usr/bin/perl
# 投稿削除用スクリプト ver 2.01
# last modified 2002年 6月 17日 by あぼーん男爵
#==================================================
# 初期設定
#==================================================
use strict;
use vars qw(%FORM $SCRIPT $NOW $DATFILE $HTMLFILE);
$SCRIPT = './delete.cgi';
$ENV{'TZ'} = "JST-9";
$NOW = time;
@SIG{'PIPE','INT','HUP','QUIT','TERM'} = (sub{exit 0})[0,0,0,0,0];
# BEGIN{$|=1; print "Content-type: text/html\n\n"; open STDERR, ">&STDOUT";}
#==================================================
# POST内容を読み取る
#==================================================
{
my $buffer;
if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); }
elsif ($ENV{'REQUEST_METHOD'} eq 'GET') { $buffer = $ENV{'QUERY_STRING'}; }
foreach (split(/&/,$buffer)) {
tr/+/ /;
my ($key,$value) = split(/=/);
$value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2",$1)/eg;
$value =~ tr/\x00-\x1f//d;
$FORM{$key} = $value;
}
}
#==================================================
# 分岐点
#==================================================
if ($FORM{'mode'} eq 'res') { &res; }
elsif ($FORM{'mode'} eq 'thread') { &thread; }
elsif ($FORM{'mode'} eq 'iten') { &iten; }
else { &head; }
Error('スクリプトに異常があります。');
#==================================================
# メイン処理
#==================================================
sub head
{
print qq|Content-type: text/html\n\n
削除スクリプト
|;
exit;
}
#==================================================
# レス操作
#==================================================
sub res
{
&jokyo;
$FORM{'nos'} =~ s/\Q〜|ー|ー|─|━|→\E/-/;
$FORM{'nos'} =~ s|[、./\ ]|,|g;
Error('変な文字があるよ。') if ($FORM{'nos'} =~ /[^\d,-]/);
my (%delflag, @temp);
foreach (split(/,/,$FORM{'nos'})) {
if (/^(\d{1,4})$/ || /^(\d{1,4})-(\d{1,4})$/) {
&Error('範囲外の選択は削除できません。') if ($1<1 || $1>1000 || $2>1000);
if ($2 && $1<$2) { foreach ($1..$2) { $delflag{$_} = 1; } }
else { $delflag{$1} = 1; }
}
}
Error('1は透明あぼーんできません。') if ($delflag{1} && $FORM{'mes'});
open(IN,'<' . $DATFILE);
@temp = ;
close(IN);
foreach (0..@temp) {
if ($delflag{($_+1)}) {
$temp[$_] = $FORM{'mes'} ? '' : "あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん\n";
}
}
open(OUT,'>' . $DATFILE);
flock(OUT,2);
foreach (@temp) {
print OUT;
}
close(OUT);
chmod(0666,$DATFILE);
&head;
}
#==================================================
# スレッド操作
#==================================================
sub thread
{
&jokyo;
if ($FORM{'mode2'} eq 'del') {
unlink $DATFILE;
open(OUT,'>' . $HTMLFILE);
flock(OUT,2);
print OUT "【:】\n1 名前: :
\n";
close(OUT);
chmod(0666,$HTMLFILE);
&subject;
} elsif ($FORM{'mode2'} eq 'stop') {
open(OUT,'>>' . $DATFILE);
flock(OUT,2);
print OUT "書けませんよ。。。<>停止<>停止<> 真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ <>書けませんよ。\n";
close(OUT);
chmod(0544,$DATFILE);
} else { Error('何がしたいのかわかりません。'); }
&head;
}
#==================================================
# 移転処理
#==================================================
sub iten
{
&jokyo;
my ($bbs, $toname, $path);
Error('変な文字があるよ。') if ($FORM{'to'} =~ /\W/ || $FORM{'c'}=~ /\W/);
$bbs = ($FORM{'to'} eq '') ? $FORM{'bbs'} . '/temp' : $FORM{'to'} . '/dat';
$toname = "../$bbs/$FORM{'key'}.dat";
$path = "http://$ENV{'SERVER_NAME'}/honwaka/$FORM{'to'}/";
Error('そんな板orディレクトリないです。') unless -e '../' . $bbs;
rename($DATFILE, $toname);
if ($FORM{'to'} ne '' && $FORM{'c'} ne '') {
open(OUT,'>' . $DATFILE);
flock(OUT,2);
print OUT "移転したよ<>移転したよ<>移転したよ<>移転しました
こちらです。$path<>移転しました\n";
close(OUT);
chmod(0666,$DATFILE);
open(OUT,'>' . $HTMLFILE);
flock(OUT,2);
print OUT "【:】移転したよ\n1 名前:移転したよ :移転したよ $path に移転したよ
\n";
close(OUT);
chmod(0666,$HTMLFILE);
} else {
open(OUT,'>' . $HTMLFILE);
flock(OUT,2);
print OUT "【:】\n1 名前: :
\n";
close(OUT);
chmod(0666,$HTMLFILE);
}
&subject;
&head;
}
#==================================================
# subject.txt処理
#==================================================
sub subject
{
my ($subject, $tmp) = ("../$FORM{'bbs'}/subject.txt", $NOW^$$);
open(SUBW,'>' . $subject . $tmp);
flock(SUBW,2);
binmode(SUBW);
open(IN,'<' . $subject);
while () {
print SUBW $_ unless $_ =~ /$FORM{'key'}/;
}
close(IN);
close(SUBW);
rename($subject . $tmp, $subject);
chmod(0666,$subject);
}
#==================================================
# 汚染除去
#==================================================
sub jokyo
{
Error('変な文字があるよ。') if ($FORM{'bbs'} =~ /\W/ || $FORM{'key'} =~ /\D/);
$DATFILE = "../$FORM{'bbs'}/dat/$FORM{'key'}.dat";
$HTMLFILE = "../$FORM{'bbs'}/html/$FORM{'key'}.html";
Error('そんなスレッドないです。') unless -e $DATFILE;
}
#==================================================
# エラー処理
#==================================================
sub Error
{
my ($topic) = @_;
print qq|Content-type: text/html\n\nエラー$topic
key = $FORM{'key'}
bbs = $FORM{'bbs'}
res = $FORM{'nos'}|;
exit;
}