#!/usr/bin/perl
#┌─────────────────────────────────
#│ [ YY-BOARD ]
#│ yybbs.cgi - 2007/09/17
#│ Copyright (c) KentWeb
#│ webmaster@kent-web.com
#│ http://www.kent-web.com/
#│
#│ YY-BOARD Antispam Version Modified by isso.
#│ http://swanbay-web.hp.infoseek.co.jp/index.html
#└─────────────────────────────────
# 外部ファイル取込
require './init.cgi';
require $jcode;
#-------------------------------------------------
# 設定チェック
#-------------------------------------------------
if(!$writevalue || !$postvalue) {
&error("init.cgiファイルが正しく転送されていないか設定値が正しくありません。");
}
if($writevalue eq $postvalue) {
&error("\$writevalueと\$postvalueの文字は同じにしないでください");
}
# データ用ディレクトリ
unless(-d "./data/") {
mkdir ("./data/", 0707) || die "ディレクトリを作成できません : $!";
}
# ログファイル
unless(-e "$logfile") {
&error("ログファイル $logfile がありません。");
}
# 過去ログデータファイル
if($pastkey) {
unless(-e "$nofile") {
&error("過去ログデータファイル $nofile がありません。");
}
}
# カウンターデータファイル
unless(-e "$cntfile") {
&error("カウンターデータファイル $cntfile がありません。");
}
# Webmail認証用ディレクトリ
if($webmail){
unless(-d "$mailchk") {
mkdir ($mailchk, 0707) || die "ディレクトリを作成できません : $!";
}
# ディレクトリ内を掃除
opendir DIR, $mailchk;
my @files = grep { !m/^(\.|\.\.|$sendmaillog)$/g } readdir DIR;
close DIR;
foreach (@files) {
my $wt = (stat "$mailchk$_")[9];
if (time - $wt > $maxtime) { unlink ("$mailchk$_"); }
}
}
# カラーデータファイル
if (-e "$colorfile") {
open(COL,"$colorfile");
$boardmode =
;
close(COL);
} else {
open(OUT,">>$colorfile");
print OUT "0";
close(OUT);
$boardmode = 0;
}
unless(-e "$colordata") {
&error("カラーデータファイル $colordata がありません。");
}
# 表示モード設定
if ($boardmode && -s "$colordata") { &read_color; }
# 投稿キー暗号用パスワードチェック
if ($regist_key) {
if (!$pcp_passwd) {
&error("投稿キー暗号用パスワード \$pcp_passwd が設定されていません。");
}
}
# スクリプト名をロード
my ($chscript,$chregist,$acnt,$chtime);
if (-e "$scriptfile") {
open(SCRPT, "$scriptfile");
eval { flock(SCRPT, 1); };
$scriptname = ;
($chscript,$chregist,$acnt,$chtime,$indexcgi) = split(/<>/, $scriptname);
close(SCRPT);
if (!$indexcgi) {
$indexcgi = $indexorg;
open(OUT,"+>$scriptfile");
eval { flock(OUT, 2); };
seek(OUT, 0, 0);
print OUT "$chscript<>$chregist<>$acnt<>$chtime<>$indexcgi<>";
close(OUT);
}
unless (-e $indexcgi) {
&error("$indexcgi がありません。");
}
unless (-x $indexcgi) {
chmod (0705,"$indexcgi");
}
if (-e "$chscript") {
$bbscgi = $chscript;
# カウント
if ($chcount) {
if ($acnt < $chcount) {
$acnt++;
open(OUT,"+>$scriptfile");
eval { flock(OUT, 2); };
seek(OUT, 0, 0);
print OUT "$chscript<>$chregist<>$acnt<>$chtime<>$indexcgi<>";
close(OUT);
}
}
} else {
my $time = time;
open(OUT,"> $scriptfile");
eval { flock(OUT, 2); };
chmod (0606,"$scriptfile");
print OUT "$bbscgi<>$registcgi<>0<>$time<>$indexcgi<>";
close(OUT);
}
if (-e "$chregist") {
$registcgi = $chregist;
}
} else {
my $time = time;
open(OUT,"> $scriptfile") || &error("dataディレクトリのパーミッションを変更してください。");
eval { flock(OUT, 2); };
chmod (0606,"$scriptfile");
print OUT "$bbscgi<>$registcgi<>0<>$time<>$indexcgi<>";
close(OUT);
}
#-------------------------------------------------
# メイン処理
#-------------------------------------------------
&agent;
&decode;
&axsCheck;
# 自動閉鎖
if ($clday) {
my $last = (stat $logfile)[9];
if (abs(time - $last) > $clday*24*3600) {
&header;
&pseudo;
&autoclose;
}
}
if ($mode eq "find") { &find; }
elsif ($mode eq "image") { ℑ }
elsif ($mode eq "form") { require $formpl; &postform; }
elsif ($mode eq "past") { require $pastlogpl; &past_log; }
elsif ($mode eq "howto") { require $howtopl; &howto; }
elsif ($mode eq "check") { require $checkpl; ✓ }
elsif ($mode eq "noscript") { require $howtopl; &noscript; }
elsif ($mode eq "writemail") { require $webmailpl; &writemail; }
elsif ($mode eq "sendmail") { require $webmailpl; &sendmail; }
elsif ($mode eq "postform") { require $formpl; &postform; }
elsif ($mode eq "wana") { &wana; }
# 携帯対応改造
elsif ($keitai ne 'p' && $mode eq "knew") { &k_new; }
elsif ($keitai ne 'p' && $mode eq "klist") { &k_list; }
elsif ($keitai ne 'p' && $mode eq "klview") { &k_view; }
elsif ($keitai ne 'p' && $mode eq "kaview") { &k_msg; }
elsif ($keitai ne 'p' && $mode eq "kmsgview") { &k_msg; }
elsif ($keitai ne 'p' && $mode eq "k_admin") { &k_new; }
elsif ($keitai ne 'p' && $mode eq "newpost") { &k_form; }
elsif ($keitai ne 'p' && $mode eq "admin" && $in{'no'}) { &k_dele; }
&log_view;
#-------------------------------------------------
# 記事表示部
#-------------------------------------------------
sub log_view {
# 携帯モード
if (-e "$kscript" && $keitai ne 'p') { &k_list; }
# ページ繰越
local($resfm);
foreach ( keys(%in) ) {
if (/^page_(\d+)$/) {
$page = $1;
}
if (/^res_(\d+)$/) {
$resfm = $1;
last;
}
}
# 返信フォーム押下
if ($resfm) { &res_form; }
# クッキー取得
local($cnam,$ceml,$curl,$cpwd,$cico,$ccol,$csmail,$caikotoba,$cref) = &get_cookie;
&set_cookie($cnam,$ceml,$curl,$cpwd,$cico,$ccol,$csmail,$caikotoba,$cref);
# ヘッダを出力
if ($ImageView == 1) { &header('ImageUp'); }
else { &header; }
# カウンタ処理
if ($counter) { &counter; }
# ダミー
&pseudo;
# 投稿キー
local($str_plain,$str_crypt);
if ($regist_key) {
require $regkeypl;
($str_plain,$str_crypt) = &pcp_makekey;
}
# タイトル部
print qq|\n|;
if ($banner1 ne "") { print "$banner1
\n"; }
# if ($t_img eq '') {
# print qq|$title\n|;
# } else {
# print qq|\n|;
# }
# カスタマイズ
print <
$title
Gの夢サイトにお越しいただき、どうもありがとうございます!
おもしろかった、つまらない、などなど、ご意見、ご感想、なんでもお気軽にどうぞ。
EOTITLE
# 表示ヘッダ
print qq|$header
\n|;
# スパムログチェック
if (-s $spamlogfile) {
open(IN,"<$spamlogfile");
eval { flock(IN, 2); };
my @spmlog = ;
close(IN);
if ($#spmlog >= $spamlog_max) {
print qq|
\n
\n|;
print qq||;
print qq|$postmodeログが許容数を超えました。管理モードから$postmodeログを削除して下さい。|;
print qq|
\n
\n|;
}
}
# 表示初期設定
if (!$in{'list'}) { $in{'list'} = $list_ini; }
# メニュー部
if ($boardmode) {
if (!defined($list_type{$in{'list'}})) {
if (defined($list_type{$view_type})) {
$in{'list'} = $view_type;
} else {
$in{'list'} = 'thread';
}
}
print qq|\n|;
print qq|\n
\n|;
} else {
print qq|
\n|;
print qq|[ホームに戻る]\n|;
# 投稿フォームリンク
my $formlink = 0;
if ($referercheck && !$ENV{'HTTP_REFERER'}) {
if ($in{'list'} ne "pickup") {
$formlink = 1;
}
} elsif (!$postform) {
$formlink = 1;
} else {
if ($in{'list'} eq "tree" || $in{'list'} eq "topic") {
$formlink = 1;
}
}
if ($formlink) {
print qq|[新規投稿]\n|;
}
if (!defined($list_type{$in{'list'}})) {
if (defined($list_type{$view_type})) {
$in{'list'} = $view_type;
} else {
$in{'list'} = 'thread';
}
}
foreach ( 'thread', 'tree', 'topic', 'new' ) {
next if ($in{'list'} eq $_);
print qq|[$list_type{$_}]\n|;
}
print <留意事項]
[ワード検索]
EOM
# 過去ログのリンク部を表示
if ($pastkey) {
print qq|[過去ログ]\n|;
}
print <管理用]
EOM
}
# タイトル一覧表示
if (-s $logfile) {
if ($alltitle) {
if ($in{'list'} eq 'thread' || $in{'list'} eq 'new') {
&SubjectList;
}
}
}
# 投稿フォーム
if ($in{'list'} eq 'thread' || $in{'list'} eq 'new') {
if ($postform) {
if ($adminchk && $nam eq $a_name) {
$nam = $admin_id;
}
if (!$re_box) {
$cref = 0;
}
if (!$referercheck || $ENV{'HTTP_REFERER'}) {
print qq|\n\n|;
} else {
print qq|\n
\n\n|;
print qq|\n
\n|;
}
}
print qq|
\n\n|;
}
if ($in{'list'} eq "new") {
# 新着順表示
require $newsortpl;
&newsort;
} elsif ($in{'list'} eq "pickup") {
# 関連記事表示
require $pickuppl;
&pickup;
} else {
# 件数チェック
if ($pglog{$in{'list'}} <= 0) { $pglog{$in{'list'}} = 10; }
# 記事を展開
my $i = 0;
open(IN,"$logfile") || &error("Open Error: $logfile");
my $top =
;
while () {
my ($no,$reno,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico,$tm,$sml) = split(/<>/);
if ($reno eq "") { $i++; }
if ($i < $page + 1) { next; }
if ($i > $page + $pglog{$in{'list'}}) { next; }
# 親記事
if (!$reno) {
push(@view,$no);
# レス記事
} else {
$res{$reno} .= "$no,";
}
# 題名の長さ
if (length($sub) > $sub_len*2) {
$sub = substr($sub, 0, $sub_len*2) . "...";
}
$author = $nam;
require $messagepl;
$nam = &emailscript($nam,$no,$eml,$sml,$col);
$author{$no} = $author;
$no{$no} = $no;
$re{$no} = $reno;
$nam{$no} = $nam;
$eml{$no} = $eml;
$sub{$no} = $sub;
$dat{$no} = $dat;
$com{$no} = $com;
$col{$no} = $col;
$url{$no} = $url;
$ico{$no} = $ico;
$pw{$no} = $pw;
$tm{$no} = $tm;
$sml{$no} = $sml;
}
close(IN);
# 記事表示
if ($in{'list'} eq "tree") {
require $list_log_tree;
&list_log_tree;
} elsif ($in{'list'} eq "topic") {
require $list_log_topic;
&list_log_topic;
} else {
require $list_log_thread;
&list_log_thread;
}
# ページ移動ボタン表示
if ($page - $pglog{$in{'list'}} >= 0 || $page + $pglog{$in{'list'}} < $i) {
print qq|\n|;
print qq|Page:\n|;
&mvbtn("$bbscgi?page=", $i, $pglog{$in{'list'}});
print qq| |
\n|;
}
print qq|\n|;
}
# ユーザメンテフォーム(トピック表示以外)
if ($in{'list'} ne "topic" && $mode ne "past" && $in{'action'} ne "past") {
if ($boardmode) {
print qq|
\n\n|; }
}
# 著作権表示(削除不可)
print <
- YY-BOARD
EOM
# --------------------------------ここから--------------------------------
# MakiMakiさんの画像を使用しない場合に限り、下記MakiMakiさんのリンクを外すことは可能です。
print qq|
- icon:MakiMaki
- |;
# --------------------------------ここまで--------------------------------
# 著作権表示(削除不可)
print <Antispam Version -
$footer