#! /usr/local/bin/perl # ↑この上のPerlのパスを書き換えるのはお約束ですね #========================================================================================== # # マルチボード掲示板システム 『MultiBBS』ver 1.3 : 掲示板スクリプト本体 # # Copyright Shinobu Suzuki 1998. All rights reserved. #----------------------------------------------------------------------------------------- # HomePage : http://www.aikis.or.jp/~s-suzuki/cgilabo/ # E-mail : s-suzuki@aikis.or.jp # Version : 1.32 # Update : 1999/02/27 #----------------------------------------------------------------------------------------- # ■通常の掲示板機能に加え、メッセージの削除や編集、ボードのカスタマイズなどができます # ■crypt()を利用したパスワード設定で、投稿者もメッセージの削除や編集ができます # ■特定のメッセージにコメントを追加できます # ■メッセージや名前など、各項目のサイズを制限することができます # ■ログファイルのサイズを制限することができます # ■簡単なドメイン別のアクセス制限(プロキシ制限等)ができます # ■タグを全面禁止にしたり、一部を禁止したり、細かく設定できます # ■「WEB裏技」さんの MiniBBS v5.0をベースに開発していますが、主要部分ではもはや跡形がわ # からないくらいに変更を加えています。データの互換性なども当然ありませんし、使い方も大 # 幅に拡張されています。開発のきっかけとなった MiniBBSに敬意をあらわし、著作権表示を残 # します # **** # ■このスクリプトは config.cgi を参照しています #========================================================================================== # 初期設定 #----------------------------------------------------------------------------------------- # CERN HTTPDなどのサーバーの場合で、ファイル関係のエラーが # 出る場合、設置するディレクトリのフルパスを指定してみて下 # さい。なお、最後は / で終わること。 # 例) $path = "/home/users/s-suzuki/public_html/bbs/"; #---------------------------------------------------------- $path = ""; #---------------------------------------------------------- # 共通設定ファイルの指定 #---------------------------------------------------------- require "$path"."config.cgi"; #---------------------------------------------------------- # 日本語コード変換ライブラリの指定 #---------------------------------------------------------- require "$path"."jcode.pl"; #---------------------------------------------------------- # システム固定のリンクを使用したいときに指定する。これを利 # 用すると、ユーザーの設定に関係なくリンクタグが出ます。 #---------------------------------------------------------- $fixedlink1 = '掲示板一覧'; # システム固定のリンク1 $fixedurl1 = 'list.cgi'; # そのurl1 $fixedlink2 = ''; # システム固定のリンク2 $fixedurl2 = ''; # そのurl2 $fixedlink3 = ''; # システム固定のリンク3 $fixedurl3 = ''; # そのurl3 #---------------------------------------------------------- # 外部からの(イタズラ)書き込みを禁止する場合、以下に、ス # クリプトのURLを記入する。(サーバーやブラウザによっては # うまくいかないこともあります) # 例:$script_url = 'http://www.aikis.or.jp/~s-suzuki/multibbs/multibbs.cgi'; #---------------------------------------------------------- $script_url = ''; #---------------------------------------------------------- # 書き込みの後のリロードに失敗する場合(File Not Foundので # る場合)、CGIスクリプトを設置するディレクトリ名をURLで指 # 定すると成功する場合があるそうです。 # ※この機能については未確認です # ※biglobeでは成功するそうです # ※v1.24より記述方法を変更しています # ※最後は / で終わること。 # 例:$rerload_url = 'http://www.aikis.or.jp/~s-suzuki/multibbs/'; #---------------------------------------------------------- $reload_url = ''; #===================================================================== # これより、処理の開始 #===================================================================== $| = 1; # ファイルバッファリングをしない &form; # フォーム入力された値の分解 &read_master_key; # 管理用マスターキー読み込み &read_domainlist; # 制限するドメインリストの読み込み &init; # 各種データ変数の初期化 &read_cfg; # ボード定義ファイルの読み込み #-------------------------------------------------- # 主催者のパスワードが設定されていなければ設定する #-------------------------------------------------- if( $CFG_DATA{'user_pass'} eq "" ) { &error("主催者のパスワードが設定されていません。"); } #-------------------------------------------------- # スクリプトの動作を決定($FORM{'task'}で判定) #-------------------------------------------------- if ( $FORM{'task'} eq 'regist') { # データ書き込み(通常・コメント) ®ist; } elsif ( $FORM{'task'} eq 'remove' ) { # 削除データのリスト表示 if( -e "remove.cgi" ) { print "Location:$reload_url"."remove.cgi?bordname=$bordname\n\n"; } else { &error("削除スクリプト(remove.cgi)が見つかりません。"); } } elsif ( $FORM{'task'} eq 'edit' ) { # 編集データのリスト表示 if( -e "edit.cgi" ) { print "Location:$reload_url"."edit.cgi?bordname=$bordname\n\n"; } else { &error("編集スクリプト(edit.cgi)が見つかりません。"); } } elsif ( $FORM{'task'} eq 'cust') { # ボードのカスタマイズ if( -e "admin.cgi" ) { print "Location:$reload_url"."admin.cgi?pwd=$FORM{'pwd'}&task=edit_bord&mode=backbbs&bordname=$bordname\n\n"; } else { &error("管理スクリプト(admin.cgi)が見つかりません。"); } } elsif ($FORM{'task'} eq 'pass') { # ユーザーパスワードの変更 if( -e "admin.cgi" ) { print "Location:$reload_url"."admin.cgi?task=change_user_pass&bordname=$bordname\n\n"; } else { &error("管理スクリプト(admin.cgi)が見つかりません。"); } } else { # 通常の画面表示 if( $FORM{'task'} eq "log_all" ) { $CFG_DATA{'page'} = "0"; } &main; exit; } #===================================================================== # 処理はここまで(以下は、サブルーチン) #===================================================================== #---------------------------------------------------------------------- # 通常の画面表示ルーチン #---------------------------------------------------------------------- sub main { #--------------------------- # クッキーの取得(独自方式) #--------------------------- $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{$cookie_name}); foreach $pair (@pairs) { ($name, $value,$temp) = split(/:/, $pair); if( $name eq "url" ) { if( $value eq "" ) { $COOKIE{$name} = "http:\/\/"; } else { $COOKIE{$name} = "$value\:$temp"; } } else { $COOKIE{$name} = $value; } } if ( $COOKIE{'url'} eq "" ) { $COOKIE{'url'} = "http://"; } #--------------------------- # ログを配列<@lines>に格納 #--------------------------- &read_log; #--------------------------- # スタート番号をセット #--------------------------- if ( $CFG_DATA{'page'} ne "0" ) { $start = $FORM{'page'}*$CFG_DATA{'page'}; $end = $FORM{'page'}*$CFG_DATA{'page'}+$CFG_DATA{'page'}; } #--------------------- # メッセージ数の取得 #--------------------- $data_count = 0; $page_mode = 0; if ( $CFG_DATA{'page'} ne "0" ) { foreach $line (@lines) { if( $data_count < $start ) { # 開始番号までスキップ if ( substr($line, 0, 1) eq "#" ) { $data_count++; } } else { if ( substr($line, 0, 1) eq "@" ) { # コメントは無条件に格納 if( $data_count != $start ) { push( @line_data, $line ); } } elsif ( substr($line, 0, 1) eq "#" ) { # 本文の場合 if( $data_count < $end ) { push( @line_data, $line ); $data_count++; } else { $page_mode = 1; # 続きがあるよ! last; } } } } } else { foreach $line (@lines) { push( @line_data, $line ); } } #------------------------- # HTML(画面)の出力 #------------------------- print "Content-type: text/html\n\n"; print "\n
\n"; if( $CFG_DATA{'title_image'} ne "" ) { print " | \n"; } else { print "$CFG_DATA{'title'}\n"; } print ""; if( $CFG_DATA{'max'} ne '0' ) { print "全$CFG_DATA{'max'}件"; } else { print " "; } print " | \n"; print "
$CFG_DATA{'readme'}\n"; if ( $announce ne "" ) { print "
$announce\n"; } print "
$announce\n"; print "
ただ今、掲示板のメンテナンス中です。しばらくお待ち下さい。\n"; #------------------------- # スクリプトの著作権表示 #------------------------- print "
$value |
$subject"; print " 名前:$name"; if ($email ne "") { print " Mail"; } if ($url ne "") { print " Home"; } print " ($date) $value |
\n"; } else { $next_page = $FORM{'page'} + 1; print "
"; } } print "$CFG_DATA{'readme2'}\n"; } if ($maintenance == 1 ) { print "
ただ今、掲示板のメンテナンス中につき書き込みができません。しばらくお待ち下さい。\n"; #-------------------------- # スクリプトの著作権表示 #-------------------------- print "