#!/usr/local/bin/perl # Re^9: First aid (レスキューファーストエイド) # $vers = '1.04'; # Copyright © 2001 Acupuncture Point of Happiness. # created: February 01, modified: April 01 #*#*# 用途 #*#*# # MiniBBS タイプ1のログを壊してしまった時、それを修復します。 # バージョン7〜10、およびMiniBBS2000に対応。どのバージョンのログかを自動識別します。 #*#*# 使い方 #*#*# # 1. このファイルの拡張子を、サーバがCGIだと認識できるものに変更して下さい。拡張子以外は任意に変えて大丈夫です。 # 2. 下の初期設定を設定します。上にあるperlのパスも環境に合わせて下さい。 # 3. 通常のCGIと同様に、サーバに転送しパーミッションを設定します。設置場所やパーミッションはプロバイダの指示に従って下さい。特に指示がない場合は755です。 # 4. 対象ファイルのバックアップを作ります。対象ファイルのパーミッションが、CGIで読み書きできるようになっていることを確認して下さい。 # 5. ブラウザからこのCGIを呼び出します。 # 6. 画面の指示に従って対象ファイルを指定し、祈りながら「修復」ボタンを押します。 # 7. 元のMiniBBSにアクセスし、修復されているか確認して下さい。 #*#*# 初期設定 #*#*# # 簡易パスワード(必須) # 安全のためパスワードを設定する # ※このスクリプトは修復終了後速やかにサーバから削除すること $password = '任意のパスワード'; # ログファイルのあるディレクトリを設定 # このスクリプトがある場所からの相対パス、又はサーバの絶対パスを記入 $where = './'; # このスクリプトのファイル名 # 通常はこのままでよい。うまく動作しない時はファイル名・パス・URIのいずれかを記入 $here = "$ENV{'SCRIPT_NAME'}"; #*#*# 初期設定ここまで #*#*# # 1.04 バグを修正、きちんと動作するように # 1.03 2000のログに対応 # 1.02 7.x系のcryptなしログに対応 # 1.01 指定されたファイルの存在を明示的にチェック # 1.00 公開 if ($password eq "") { &error('エラー','パスワードが設定されていません'); } read(STDIN,$form,$ENV{'CONTENT_LENGTH'}); foreach (split(/&/,$form)) { ($name,$data) = split(/=/); next if $data eq ""; $data =~ tr/+/ /; $data =~ s/%([a-fA-F\d]{2})/pack("C", hex($1))/eg; $FORM{$name} = $data; } if ($FORM{'log'}) { &restore; } else { &prompt; } exit(0); sub prompt { print <<"HTML"; Content-Type: text/html
※必ずバックアップをとってから試して下さい。修復できなかった場合、更に悪化する可能性があります。
※正常なファイルは指定しないで下さい。逆に破壊してしまう可能性があります。
※ログファイルが大きい場合、タイムアウトエラーが表示されることがあります。修復できたかはMiniBBSにアクセスして確認して下さい。
バージョン $type 系のログファイルとして修復できたようです。
MiniBBSにアクセスして、修復できているか確認して下さい。
ブラウザの[戻る]ボタンで戻ってください。
HTML &foot; exit; } __END__