#! /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 #----------------------------------------------------------------------------------------- # ■MultiBBSシステムの各ボードログから、指定したログデータを過去ログとして抽出します。 # ■過去ログデータはMultiBBSの設置ディレクトリ下の oldlog ディレクトリに格納されます # ■oldlog ディレクトリのパーミッションは 777(707) にしてください # ■過去ログファイルは、ボード名に000〜999までの連番が付加されます # ■過去ログファイルの拡張子は .bkl となります # ■過去ログファイルの表示は viewlog.cgi で行います # **** # ■このスクリプトは config.cgi を参照しています #========================================================================================== # 初期設定 #----------------------------------------------------------------------------------------- # CERN HTTPDなどのサーバーの場合で、ファイル関係のエラーが # 出る場合、設置するディレクトリのフルパスを指定してみて下 # さい。なお、最後は / で終わること。 # 例) $path = "/home/users/s-suzuki/public_html/bbs/"; #---------------------------------------------------------- $path = ""; #---------------------------------------------------------- # 共通設定ファイルの指定 #---------------------------------------------------------- require "$path"."config.cgi"; #---------------------------------------------------------- # 日本語コード変換ライブラリの指定 #---------------------------------------------------------- require "$path"."jcode.pl"; #---------------------------------------------------------- # このスクリプトでのみ必要な設定 #---------------------------------------------------------- $indexname = '戻る'; # makelog.cgiからの戻り先 $index = './'; # makelog.cgiからの戻り先(URL) $usermode = 0; # 利用できるユーザー # 0:システム管理者のみ # 1:ボード開設者も利用可能 #---------------------------------------------------------- # 外部からの(イタズラ)書き込みを禁止する場合、以下に、ス # クリプトのURLを記入する。(サーバーやブラウザによっては # うまくいかないこともあります) # 例:$script_url = 'http://www.aikis.or.jp/~s-suzuki/multibbs/makelog.cgi'; #---------------------------------------------------------- $script_url = ''; #---------------------------------------------------------- # ログ作成の後、File Not Found などがでる場合、CGIスクリプ # トを設置するディレクトリ名をURLで指定すると成功する場合 # があるそうです。 # ※この機能については未確認です # ※biglobeでは成功するそうです # ※最後は / で終わること。 # 例:$rerload_url = 'http://www.aikis.or.jp/~s-suzuki/multibbs/'; #---------------------------------------------------------- $reload_url = ''; #===================================================================== # これより、処理の開始 #===================================================================== &form; # フォーム入力された値の分解 &read_master_key; # 管理用マスターキー読み込み &init; # 各種データ変数の初期化 #---------------------------------------------------------- # スクリプトの動作を決定($FORM{'task'}で判定) #---------------------------------------------------------- if ( $FORM{'task'} eq 'make_log' ) { # データの削除ルーチンへ &read_cfg; # ボード定義ファイルの読み込み &make_log; } elsif ( $FORM{'task'} eq 'move' ) { # データの削除ルーチンへ &read_cfg; # ボード定義ファイルの読み込み &move_log; } else { # 通常の画面表示 &main; } #===================================================================== # 処理はここまで(以下は、サブルーチン) #===================================================================== #---------------------------------------------------------------------- # 通常の画面表示ルーチン #---------------------------------------------------------------------- sub main { if ( $path ne "" ) { opendir(DIR,"$path"."log/"); } else { opendir(DIR,"./log/"); } @readlist = grep(/cfg/, readdir(DIR)); closedir(DIR); print "Content-type: text/html\n\n"; print "\n"; print "
\n"; print "\n"; print "\n
\n";
print "\n";
exit;
}
#-----------------------------------------------------------------
# リストアップされたメッセージのデータ削除
#-----------------------------------------------------------------
sub move_log {
#--------------------------------------------------
# パスワードのチェック
#--------------------------------------------------
$passcheck = "NG";
if ( $FORM{'passwd'} eq "" ) {
&error("パスワードが入力されていません(E002)。");
}
else {
$temp = crypt( $FORM{'passwd'}, substr($master_pass,0,2) );
$temp2 = crypt( $FORM{'passwd'}, substr($CFG_DATA{'user_pass'},0,2) );
if( $usermode == 1 ) {
if ( $temp2 eq $CFG_DATA{'user_pass'} ) {
$passcheck = "OK";
}
}
if ( $temp eq $master_pass ) {
$passcheck = "OK";
}
}
if( $passcheck ne "OK" ) {
&error("パスワードが違います(E002)。");
}
#-------------------------------------
if( $FORM{'logtitle'} eq "" ) {
&error("過去ログのタイトルが入力されていません(E001)。");
}
#--------------------------------------------------
# 外部フォームからの書き込みの禁止チェック
#--------------------------------------------------
if ($script_url ne "") {
$ref = $ENV{'HTTP_REFERER'};
$ref_url = $script_url;
$ref_url =~ s/\~/.*/g;
if (!($ref =~ /$ref_url/i)) {
&error("「$script_url」以外からの投稿は受け付けられません(E001)。");
}
}
#-------------------------------------
# 過去ログファイル名の作成
#-------------------------------------
if ( $path ne "" ) {
$temp = "$path"."oldlog/";
}
else {
$temp = "./oldlog/";
}
for( $i=0; $i<1000; $i++ ) {
$new_log = sprintf "%s%s%03d.bkl", $temp, $FORM{'bordname'}, $i;
if ( -e $new_log ) {
if ($i == 999) {
&error("これ以上の過去ログを作成できません。");
}
next;
}
else {
last;
}
}
#-------------------------------------
# 通常ログの読み込み
#-------------------------------------
if (!open(IN,"$log_file")) {
&error("ファイルの入出力にエラーが発生しました(E006)。");
}
eval { flock( IN, 2 );}; # ファイルをロック
@lines =
に変換する(97.01.29)
#--------------------------------------------------
$value =~ s/\r\n/
/g;
$value =~ s/\n/
/g;
$value =~ s/\,//g;
#--------------------------------------------------
# 書き込まれたくないタグが含まれる内容を消去する
#--------------------------------------------------
if ( $mode ne "admin" ) {
$value =~ s/;
eval { flock( DB, 8 );}; # ロック解除
close(DB);
foreach $line (@lines) {
($name,$value) = split(/\,/,$line);
$CFG_DATA{$name} = $value;
}
if ( $CFG_DATA{'max'} > $log_max ) {
$CFG_DATA{'max'} = $log_max;
}
if ( $CFG_DATA{'page'} eq "" ) {
$CFG_DATA{'page'} = 0;
}
else {
if( $CFG_DATA{'page'} > $page_max ) {
$CFG_DATA{'page'} = $page_max;
}
}
}
#-----------------------------------------------------------------
# 管理用マスターキーの読み込み
#-----------------------------------------------------------------
sub read_master_key {
if ( open( DB, "$path$passwd_file" )) {
eval { flock( DB, 2 );}; # ファイルをロック
$master_pass =