#! /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"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print "
掲示板のタイトル
タイトル画像 ※省略可
主催者名
主催者EMAIL
セキュリティレベル"; print "
ログの保存数 ※0で無制限に保存
ログファイルのサイズ制限 ※0で制限しない
コメントの最大数 ※1〜99
1ページの表\示数 ※0でページ制御なし
投稿記事のサイズ制限 ※0の場合制限なし
名前のサイズ制限
題名のサイズ制限
e-mailのサイズ制限
Homeのサイズ制限
掲示板の説明文 ※省略可
書き込み時の説明文 ※省略可
タイトルの色
題名の色
投稿者名の色
背景色
背景画像(URL) ※省略可
テキストの色
リンクの色
既リンクの色
リンク中の色
 リンク名URL
リンク1 ※省略可
リンク2 ※省略可
リンク3 ※省略可
動作設定"; print "

管理用パスワード
\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"; 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; } }