#! /usr/local/bin/perl
#
#==========================================================================================
#
# 多機能(?)掲示板システム 『SSBoard』 : カスタマイズスクリプト
#
# 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.3'; # 本スクリプトのバージョン
$script = 'ssboard.cgi'; # ターゲットとなる掲示板スクリプト名
$cfg_file = 'ssboard.cfg'; # ボード情報の定義ファイル名
#-------------------------------------------------------------------------------
# 以後の値は参考値です。設定変更時に空データだった場合に、とりあえずここの値で
# 保存されます。フォームからデータが入力された場合は無視される値です。不測の事
# 態に備えて、きちんと設定しておきましょう。また削除もしない方が安全です。
#-------------------------------------------------------------------------------
$max = '100'; # 保存するログ数の初期設定値
$file_size = '0'; # ログファイルのサイズ制限(0で制限なし)
$max_comment = '10'; # コメントの保存数の初期設定値
$max_size = '2000'; # 書き込みサイズの制限値
$page = '20'; # 1ページあたりのメッセージ数
$bg_col = '#e0e0e0'; # 背景色
$title_col = '#000080'; # タイトルの色
$text_col = '#000000'; # テキストの色
$link_col = '#0000ff'; # リンクの色
$alink_col = '#ff0000'; # リンク中の色
$vlink_col = '#800080'; # 既リンクの色
$subject_col = '#ff0000'; # 題名の色
$name_col = '#008000'; # 投稿者名の色
$max_size = '1500'; # 最大書き込みサイズ(0で制限なし)
$max_subject = '100'; # 題名のサイズ
$max_name = '100'; # 投稿者名のサイズ
$max_email = '100'; # 投稿者emailのサイズ
$max_url = '200'; # 投稿者homeのサイズ
#----------------------------------------------------------
# 管理用パスワード
#----------------------------------------------------------
$master_pass = '1234';
#----------------------------------------------------------
# デフォルトセキュリティレベルの設定
# セキュリティレベルの設定がされていない場合のデフォルト
# 0:制限なし
# 1:JPドメインのみ許可
# 2:プロキシの禁止
# 3:JPおよびプロキシ
#----------------------------------------------------------
#
$security = '0';
#----------------------------------------------------------
# CERN HTTPDなどのサーバーの場合で、ファイル関係のエラーが
# 出る場合、設置するディレクトリのフルパスを指定してみて下
# さい。なお、最後は / で終わること。
# $path = "/home/users/s-suzuki/public_html/bbs/";
#----------------------------------------------------------
#
$path = "";
#-----------------------------------------------------
# 日本語コード変換ライブラリの指定
#-----------------------------------------------------
#
require "$path"."jcode.pl";
#===============================================================================
# これより、スクリプト処理の開始
#===============================================================================
&form; # フォーム入力されたデータの格納
&read_cfg; # ボード定義情報の読み込み
#-----------------------------------------------------
# フォームから渡されてきた引数の解析と動作の決定
#-----------------------------------------------------
if ( $FORM{'task'} eq "write" ){
&change_board;
}
else {
&html;
}
exit;
#===============================================================================
# スクリプト処理の終わり(^^;;)
#===============================================================================
#-----------------------------------------------------
# 通常の画面:掲示板データ変更画面
#-----------------------------------------------------
#
sub html {
print "Content-type: text/html\n\n";
print "\n";
print "
\n";
print "SSBoard:ボードデータの変更\n";
print "\n\n";
print "\n\n";
print "SSBoard:ボードデータの変更
\n";
print "
\n\n";
print "\n";
print "\n";
print "\n";
exit;
}
#-----------------------------------------------------
# 掲示板データの変更・書き込み
#-----------------------------------------------------
sub change_board {
# 入力されたデータのチェック
if ( $FORM{'master_pass'} ne "$master_pass" ) {
&error('パスワードが違います。')
}
if ($FORM{'title'} eq "" ) {
&error('タイトルが記入されていません。');
}
if ($FORM{'user_name'} eq "" ) {
&error('主催者名が記入されていません。');
}
if ($FORM{'user_email'} eq "" ) {
&error('主催者E-Mailが記入されていません。');
}
if ( $FORM{'page'} > $FORM{'max'} || $FORM{'page'} < 0 ) {
&error('1ページごと表示数が、最大ログ数をオーバーしています。');
}
if ( $FORM{'max_comment'} ne "" ) {
if ( $FORM{'max_comment'} > 99 || $FORM{'max_comment'} < 1 ) {
&error('コメントの保存数は1〜99です。');
}
}
if (!open(CFG,">$cfg_file")) {
&error('ボード定義ファイルをオープンできません。');
}
print CFG "title,$FORM{'title'},\n";
print CFG "user_name,$FORM{'user_name'},\n";
print CFG "user_email,$FORM{'user_email'},\n";
print CFG "security,$FORM{'security'},\n";
if ( $FORM{'max_comment'} ne "" ) {
print CFG "max,$FORM{'max'},\n";
}
else {
print CFG "max,$max,\n";
}
if ( $FORM{'file_size'} ne "" ) {
print CFG "file_size,$FORM{'file_size'},\n";
}
else {
print CFG "file_size,$file_size,\n";
}
if ( $FORM{'max_comment'} ne "" ) {
print CFG "max_comment,$FORM{'max_comment'},\n";
}
else {
print CFG "max_comment,$max_comment,\n";
}
if ( $FORM{'max_size'} ne "" ) {
print CFG "max_size,$FORM{'max_size'},\n";
}
else {
print CFG "max_size,$max_size,\n";
}
if ( $FORM{'max_subject'} ne "" ) {
print CFG "max_subject,$FORM{'max_subject'},\n";
}
else {
print CFG "max_subject,$max_subject,\n";
}
if ( $FORM{'max_name'} ne "" ) {
print CFG "max_name,$FORM{'max_name'},\n";
}
else {
print CFG "max_name,$max_name,\n";
}
if ( $FORM{'max_email'} ne "" ) {
print CFG "max_email,$FORM{'max_email'},\n";
}
else {
print CFG "max_email,$max_email,\n";
}
if ( $FORM{'max_url'} ne "" ) {
print CFG "max_url,$FORM{'max_url'},\n";
}
else {
print CFG "max_url,$max_url,\n";
}
print CFG "page,$FORM{'page'},\n";
print CFG "bg_image,$FORM{'bg_image'},\n";
print CFG "title_image,$FORM{'title_image'},\n";
if ($FORM{'bg_col'} ne "" ) {
print CFG "bg_col,$FORM{'bg_col'},\n";
}
else {
print CFG "bg_col,$bg_col,\n";
}
if ($FORM{'title_col'} ne "" ) {
print CFG "title_col,$FORM{'title_col'},\n";
}
else {
print CFG "title_col,$title_col,\n";
}
if ($FORM{'subject_col'} ne "" ) {
print CFG "subject_col,$FORM{'subject_col'},\n";
}
else {
print CFG "subject_col,$subject_col,\n";
}
if ($FORM{'name_col'} ne "" ) {
print CFG "name_col,$FORM{'name_col'},\n";
}
else {
print CFG "name_col,$name_col,\n";
}
if ($FORM{'text_col'} ne "" ) {
print CFG "text_col,$FORM{'text_col'},\n";
}
else {
print CFG "text_col,$text_col,\n";
}
if ($FORM{'link_col'} ne "" ) {
print CFG "link_col,$FORM{'link_col'},\n";
}
else {
print CFG "link_col,$link_col,\n";
}
if ($FORM{'alink_col'} ne "" ) {
print CFG "alink_col,$FORM{'alink_col'},\n";
}
else {
print CFG "alink_col,$alink_col,\n";
}
if ($FORM{'vlink_col'} ne "" ) {
print CFG "vlink_col,$FORM{'vlink_col'},\n";
}
else {
print CFG "vlink_col,$vlink_col,\n";
}
print CFG "linkname1,$FORM{'linkname1'},\n";
print CFG "link1,$FORM{'link1'},\n";
print CFG "linkname2,$FORM{'linkname2'},\n";
print CFG "link2,$FORM{'link2'},\n";
print CFG "linkname3,$FORM{'linkname3'},\n";
print CFG "link3,$FORM{'link3'},\n";
print CFG "readme,$FORM{'readme'},\n";
print CFG "readme2,$FORM{'readme2'},\n";
print CFG "maintenance,$FORM{'maintenance'},\n";
close(CFG);
print "Content-type: text/html\n\n";
print "\n\nSSBoard:ボードのカスタマイズ\n\n\n";
print "\n\n";
print "SSboard:ボードのカスタマイズ\n
\n\n";
print "\n";
print "ボードデータの変更が終了しました。
";
print "
\n\n";
print "\n";
print "
\n
\n\n\n";
exit;
}
#-----------------------------------------------------------------
# エラーメッセージの出力
#-----------------------------------------------------------------
sub error {
$error_msg = $_[0];
print "Content-type: text/html\n\n";
print "SSBoard:ボードデータの変更\n";
print "\n";
print "おしらせ
\n";
print "エラー発生:$error_msg
\n";
print "\n";
exit;
}
#-----------------------------------------------------------------
# フォーム投稿されたデータを解析し、配列にリストする
#-----------------------------------------------------------------
#
sub form {
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
$buffer = $ENV{'QUERY_STRING'};
}
#--------------------------------------------------
# $bufferに格納されたFORM形式のデータを取り出す
#--------------------------------------------------
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#--------------------------------------------------
# 処理の都合上、改行コード等を文字列から排除する
# 改行コードを
に変換する(97.01.29)
#--------------------------------------------------
$value =~ s/\r\n/
/g;
$value =~ s/\n/
/g;
$value =~ s/\,//g;
#--------------------------------------------------
# 掲示板に書き込まれたくないタグが含まれる内容を消去する
#--------------------------------------------------
if ( $mode ne "admin" ) {
$value =~ s/;
close(DB);
foreach $line (@lines) {
($name,$value) = split(/\,/,$line);
$CFG_DATA{$name} = $value;
}
if ( $CFG_DATA{'max'} eq "" ) {
$CFG_DATA{'max'} = $max;
}
if ( $CFG_DATA{'file_size'} eq "" ) {
$CFG_DATA{'file_size'} = $file_size;
}
if ( $CFG_DATA{'max_comment'} eq "" ) {
$CFG_DATA{'max_comment'} = $max_comment;
}
if ( $CFG_DATA{'page'} eq "" ) {
$CFG_DATA{'page'} = $page;
}
if ( $CFG_DATA{'max_size'} eq "" ) {
$CFG_DATA{'max_size'} = $max_size;
}
if ( $CFG_DATA{'max_subject'} eq "" ) {
$CFG_DATA{'max_subject'} = $max_subject;
}
if ( $CFG_DATA{'max_name'} eq "" ) {
$CFG_DATA{'max_name'} = $max_name;
}
if ( $CFG_DATA{'max_email'} eq "" ) {
$CFG_DATA{'max_email'} = $max_email;
}
if ( $CFG_DATA{'max_url'} eq "" ) {
$CFG_DATA{'max_url'} = $max_url;
}
if ( $CFG_DATA{'security'} eq "" ) {
$CFG_DATA{'security'} = $security;
}
if ( $CFG_DATA{'maintenance'} eq "" ) {
$CFG_DATA{'maintenance'} = $maintenance;
}
}