#!/usr/bin/perl
#┌─────────────────────────────────
#│ Honey Board v2.3 - 2006/06/14
#│ Copyright (c) KentWeb
#│ webmaster@kent-web.com
#│ http://www.kent-web.com/
#└─────────────────────────────────
$ver = 'Honey Board v2.3';
#┌─────────────────────────────────
#│ [注意事項]
#│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した
#│ いかなる損害に対して作者は一切の責任を負いません。
#│ 2. 設置に関する質問はサポート掲示板にお願いいたします。
#│ 直接メールによる質問は一切お受けいたしておりません。
#└─────────────────────────────────
#
# 【ファイル構成例】
#
# public_html (ホームディレクトリ)
# |
# +-- honey / honey.cgi [705]
# | honeylog.cgi [606]
# | jcode.pl [604]
# |
# +-- img / *.gif
# |
# +-- lock [707] /
#
#
# [ チェックモードの仕方 ] : mode=check という引数を付けて呼出す
#
# 例 http://〜〜/honey.cgi?mode=check
#-------------------------------------------------
# 基本設定
#-------------------------------------------------
# 文字コードライブラリ取込み
require './jcode.pl';
# タイトル名
$title = "いちひこ 掲示板";
# タイトル文字の色
$t_color = "#DD0000";
# タイトル文字のタイプ
$t_face = "MS Pゴシック";
# タイトル文字サイズ
$t_point = '24px';
# 本文の文字サイズ
$b_size = '13px';
# スクリプト名
$script = './honey.cgi';
# ログファイル名
$logfile = './honeylog.cgi';
# 管理用パスワード
$pass = '0123';
# 最大記事数(これを超える記事は古い順に削除されます)
$max = 50;
# 戻り先
$home = "../index.html";
# 画像格納ディレクトリ
# → フルパスなら http:// から記述する
# → 最後は / を閉じない
$imgurl = "./img";
# 背景色、文字色
$bgrnd = ""; # 壁紙
$bgcol = "#FFF7DD"; # 背景色
$text = "#452815"; # 文字色
$link = "#0000FF"; # リンク色:未訪問
$vlink = "#800080"; # リンク色:既訪問
$alink = "#DD0000"; # リンク色:訪問中
# 記事タイトル色 / 記事Noの色
$onepnt = "#008000";
# 文字色
@colors = ('#800000','#DF0000','#008040','#0000FF','#C100C1','#FF80C0','#FF8040','#000080');
# Eメールアドレスの必須入力 (0=no 1=yes)
$in_email = 0;
# 記事の更新は method=POST 限定 (0=no 1=yes)
# --> 連続投稿などの荒らし対策
$postonly = 1;
# 同一IPアドレスからの連続投稿時間(秒数)
# --> 連続投稿などの荒らし対策
# --> 値を 0 にするとこの機能は無効になります
$wait = 100;
# URLの自動リンク (0=no 1=yes)
$autolink = 1;
# 1ページあたりの記事表示件数
$logview = 7;
# レスがついたらツリー毎トップへ移動 (0=no 1=yes)
$top_sort = 1;
# ロックファイル機構 (0=no 1=symlink関数 2=mkdir関数)
$lockkey = 0;
# ロックファイル名
$lockfile = "./lock/honey.lock";
# メール通知機能
# --> 0 : no
# --> 1 : yes 自分の投稿記事もメール通知する
# --> 2 : yes 自分の投稿記事はメール通知しない
$mailing = 0;
# sendmailのパス(メール通知する場合)
$sendmail = '/usr/lib/sendmail';
# メール通知先アドレス(メール通知する場合)
$mailto = 'xxx@xxx.xxx';
# キャラクタを指定(上下の配列はペアで)
@icon1 = (
'boy1.gif','boy2.gif','seinen.gif','girl1.gif','girl2.gif',
'ol1.gif','ol2.gif','ol3.gif','china.gif','cook.gif','piero.gif',
'dog.gif','cat.gif','mouse.gif','pig.gif','hiyoko.gif','flog.gif');
@icon2 = (
'少年1','少年2','青年','少女1','少女2',
'OL風1','OL風2','OL風3','中国風','コック風','ピエロ',
'子犬','子猫','子ネズミ','子ブタ','ヒヨコ','カエル');
# 管理者用アイコン
# --> 管理アイコンを指定する場合は「削除キー」欄に管理用パスワードを
# 同時に入力する必要があります。
$mgr_icon = "master.gif";
# タグ広告挿入オプション
# → の代わりに「広告タグ」を挿入する。
# → 広告タグ以外に、MIDIタグ や LimeCounter等のタグにも使用可能です。
$banner1 = ''; # 掲示板上部に挿入
$banner2 = ''; # 掲示板下部に挿入
# タイトル画像を使う場合
# --> 画像URLを http:// から記述
$ImgT = "";
$ImgW = 150; # 画像横幅
$ImgH = 50; # 画像縦幅
# 投稿後の処理
# → 掲示板自身のURLを記述しておくと、投稿後リロードします
# → ブラウザを再読み込みしても二重投稿されない措置。
# → Locationヘッダの使用可能なサーバのみ
$location = '';
# ホスト取得方法
# 0 : gethostbyaddr関数を使わない
# 1 : gethostbyaddr関数を使う
$gethostbyaddr = 0;
# アクセス制限(半角スペースで区切る、アスタリスク可)
# → 拒否ホスト名を記述(後方一致)【例】*.anonymizer.com
$deny_host = '';
# → 拒否IPアドレスを記述(前方一致)【例】210.12.345.*
$deny_addr = '';
# 1回当りの最大投稿サイズ (bytes)
$maxData = 51200;
# 他サイトから投稿排除時に指定する場合(セキュリティ対策)
# → 掲示板のURLをhttp://から書く
$baseUrl = '';
# 禁止ワード
# → 投稿時禁止するワードをコンマで区切る
$no_wd = '';
# 日本語チェック(投稿時日本語が含まれていなければ拒否する)
# 0=No 1=Yes
$jp_wd = 0;
# URL個数チェック
# → 投稿コメント中に含まれるURL個数の最大値
$urlnum = 3;
# 親記事の吹出色
# → 順に、「幅」「下地色」「画像ファイル名」
$oyaWid = 500;
$oyaCol = "#FFFFFF";
@oyaCol = ("wh1.gif","wh2.gif","wh3.gif","wh4.gif","wh5.gif","wh6.gif");
# レス記事の吹出色
# → 順に、「幅」「下地色」「画像ファイル名」
$resWid = 380;
$resCol = "#EFEFEF";
@resCol = ("lg1.gif","lg2.gif","lg3.gif","lg4.gif","lg5.gif","lg6.gif");
#-------------------------------------------------
# 設定完了
#-------------------------------------------------
&decode;
&axscheck;
if ($mode eq 'regist') { ®ist; }
if ($mode eq 'find') { &find; }
if ($mode eq 'howto') { &howto; }
if ($mode eq 'admin') { &admin; }
if ($mode eq 'usrdel') { &usrdel; }
if ($mode eq 'image') { ℑ }
if ($mode eq 'res') { &res_form; }
if ($mode eq 'check') { ✓ }
&html;
#-------------------------------------------------
# アクセス制限
#-------------------------------------------------
sub axscheck {
# IP&ホスト取得
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($gethostbyaddr && ($host eq "" || $host eq $addr)) {
$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}
# IPチェック
local($flg);
foreach ( split(/\s+/, $deny_addr) ) {
s/\./\\\./g;
s/\*/\.\*/g;
if ($addr =~ /^$_/i) { $flg = 1; last; }
}
if ($flg) {
&error("アクセスを許可されていません");
# ホストチェック
} elsif ($host) {
foreach ( split(/\s+/, $deny_host) ) {
s/\./\\\./g;
s/\*/\.\*/g;
if ($host =~ /$_$/i) { $flg = 1; last; }
}
if ($flg) {
&error("アクセスを許可されていません");
}
}
if ($host eq "") { $host = $addr; }
}
#-------------------------------------------------
# 記事表示処理
#-------------------------------------------------
sub html {
# ヘッダ
&header;
print "
\n";
if ($banner1 ne "") { print "$banner1\n
\n"; }
# タイトル部
if ($ImgT) {
print "
\n";
} else {
print "$title\n";
}
print <
[トップに戻る]
[留意事項]
[ワード検索]
[管理用]
EOM
# フォームを表示
&form_view;
local($i,$top);
open(IN,"$logfile") || &error("Open Error: $logfile");
$top = ;
while () {
local($no,$reno,$date,$name,$eml,$sub,$icon,$icon2,$com,$color,$url,$host,$pw) = split(/<>/);
if ($reno eq "") { $i++; }
if ($i < $page + 1) { next; }
if ($i > $page + $logview) { last; }
if ($eml) { $name = "$name"; }
if ($url) {
if ($url !~ /^http/i) { $url = "http://$url"; }
$url = "
";
}
# 1マスの大きさ
$pix = 18;
# レス記事
if ($reno) {
$wide = $resWid;
$iro = $resCol;
@gif = ("",@resCol);
# 親記事
} else {
$wide = $oyaWid;
$iro = $oyaCol;
@gif = ("",@oyaCol);
}
# 記事を表示
if (!$reno) { print "
\n"; }
print "