#!/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削除スクリプト
bbs,key
Res No.

bbs,key

bbs,key
to bbs

|; 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 "【:】\n
1 名前:


\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 "【:】移転したよ\n
1 名前:移転したよ :移転したよ
$path に移転したよ

\n"; close(OUT); chmod(0666,$HTMLFILE); } else { open(OUT,'>' . $HTMLFILE); flock(OUT,2); print OUT "【:】\n
1 名前:


\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; }