#! /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の掲示板作成専用のスクリプトです # ■admin.cgiを使った作成とちがって、管理者パスワードの入力の必要がありません # ■sendmailを用いて、作成時にメールが届くようにできます # **** # ■このスクリプトは config.cgi を参照しています #========================================================================================== # CERN HTTPDなどのサーバーの場合で、ファイル関係のエラーが # 出る場合、設置するディレクトリのフルパスを指定してみて下 # さい。なお、最後は / で終わること。 # 例) $path = "/home/users/s-suzuki/public_html/bbs/"; #---------------------------------------------------------- $path = ""; #---------------------------------------------------------- # 共通設定ファイルの指定 #---------------------------------------------------------- require "$path"."config.cgi"; #---------------------------------------------------------- # 日本語コード変換ライブラリの指定 #---------------------------------------------------------- require "$path"."jcode.pl"; #---------------------------------------------------------- # ここからは動作設定 #---------------------------------------------------------- $indexname = '戻る'; # regist.cgiからの戻り先 $index = './'; # regist.cgiからの戻り先(URL) #---------------------------------------------------------- # sendmailを使った通知機能 # ※設置するプロバイダのsendmailが使える場合のみ #---------------------------------------------------------- $send_mail = '0'; # sendmailを利用したメール通知(0:しない,1:する) $sendmail = '/usr/lib/sendmail'; # sendmailのパス(例) $mailto = 'aaaa@aaaa.ne.jp'; # 通知先のメールアドレス $subject = 'MultiBBS:新規作成の通知'; # メールタイトル #===================================================================== # これより、処理の開始 #===================================================================== &form; # フォーム入力されたデータの解析と格納 #----------------------------------------------------- # フォームから渡されてきた引数の解析 #----------------------------------------------------- if ( $FORM{'task'} eq 'check_bord' ) { &check_bord; } else { &make_bord; } exit; #===================================================================== # 処理はここまで(以下は、サブルーチン) #===================================================================== #----------------------------------------------------- # 掲示板の新規作成画面 #----------------------------------------------------- sub make_bord { #----------------------------------- # 開設されているボード数のチェック #----------------------------------- if ( $max_bord ne "0" ) { if ( $path ne "" ) { opendir(DIR,"$path"."log/"); } else { opendir(DIR,"./log/"); } @readlist = grep(/.cfg/, readdir(DIR)); closedir(DIR); $i = 0; foreach $bord (@readlist) { $i++; } if ( $i >= $max_bord ) { &error('これ以上ボードを作成できません。'); } } print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "MultiBBS:新規作成\n"; print "\n\n"; print "\n\n"; print "MultiBBS:ボードの新規作成
\n"; print "
\n\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"; if ( $title_mode eq "1" ) { 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"; if( $bg_mode eq "1" ) { 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\n"; print " \n"; print " \n"; print " \n"; print " \n\n"; print "
ボード名 ※半角英数字のみ(例 bbs001など)
掲示板のタイトル
タイトル画像
主催者名
主催者EMAIL
主催者パスワード ※半角英数字4〜8文字
パスワード再入力
ログの保存数 ※$log_min〜$log_max
1ページの表\示数 ※0〜$page_max(0でページ制御なし)
掲示板の説明文
書き込み時の説明文
タイトルの色
題名の色
投稿者名の色
背景色
背景画像
テキストの色
リンクの色
既リンクの色
リンク中の色
 リンク名URL
リンク1 ※省略可
リンク2 ※省略可
リンク3 ※省略可

 
\n"; print "
\n"; print "\n"; print "\n"; } #----------------------------------------------------- # ボードデータの新規作成 #----------------------------------------------------- sub check_bord { if ( $path ne "" ) { $cfg_file = "$path"."log/"."$FORM{'bordname'}".".cfg"; $log_file = "$path"."log/"."$FORM{'bordname'}".".log"; } else { $cfg_file = "./log/$FORM{'bordname'}".".cfg"; $log_file = "./log/$FORM{'bordname'}".".log"; } # 入力されたデータのチェック $pwd_len=length("$FORM{'pass1'}"); if ( $FORM{'pass1'} ne $FORM{'pass2'} ) { &error("入力されたパスワードが一致しません。"); } elsif ( $FORM{'pass1'} =~ /\s/ || $FORM{'pass1'} =~ /\W/ ) { &error("パスワードは半角英数字のみ利用できます。"); } elsif ( $pwd_len > 8 || $pwd_len < 4 ) { &error("パスワードの長さは4〜8文字です。"); } elsif ( $FORM{'bordname'} =~ /\s/ || $FORM{'bordname'} =~ /\W/ ) { &error("ボード名は半角英数字のみ利用できます。"); } if ( $FORM{'page'} > $page_max || $FORM{'page'} < 0 ) { &error("1ページの表示数は0〜$page_maxです。"); } $now = time; ($p1, $p2) = unpack("C2", "admin"); $wk = $now / (60*60*24*7) + $p1 + $p2 - 8; @saltset = ('a'..'z','A'..'Z','0'..'9','.','/'); $nsalt = $saltset[$wk % 64] . $saltset[$now % 64]; $pwd = crypt( $FORM{'pass1'}, $nsalt); if ($FORM{'bordname'} eq "") { &error("ボード名が記入されていません。"); } if ($FORM{'title'} eq "" ) { &error("タイトルが記入されていません。"); } if ($FORM{'user_name'} eq "" ) { &error("主催者名が記入されていません。"); } if ($FORM{'user_email'} eq "" ) { &error("主催者のE-Mailが記入されていません。"); } #----------------------------------------------------------- if ( !cheack_jp($FORM{'user_email'}) ) { &error("JPドメインのMAILアドレスが必要です。"); } if ( !cheack_email($FORM{'user_email'}) ) { &error("無料・転送系のアドレスは無効です。"); } #----------------------------------------------------------- if ( open(CFG,"$cfg_file") ) { close(CFG); &error("このボード名はすでに利用されています。他のボード名で利用してください。"); } if ( $FORM{'max'} > $log_max || $FORM{'max'} < $log_min ) { &error("保存するログ数が正しくありません。($log_min〜$log_max)"); } if (!open(CFG,">$cfg_file")) { &error("ボード定義ファイルを作成できません。"); } if (!open(LOG,">$log_file")) { close(CFG); &error("ログファイルを作成できません。"); } close(LOG); print CFG "title,$FORM{'title'},\n"; print CFG "user_pass,$pwd,\n"; print CFG "user_name,$FORM{'user_name'},\n"; print CFG "user_email,$FORM{'user_email'},\n"; print CFG "security,$security,\n"; print CFG "max,$FORM{'max'},\n"; print CFG "page,$FORM{'page'},\n"; if ( $bg_mode eq "1" ) { print CFG "bg_image,$FORM{'bg_image'},\n"; } if ( $title_mode eq "1" ) { 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"; close(CFG); chmod 0666, $cfg_file; chmod 0666, $log_file; #-------------------------------------------------- # sendmailを使って通知 #-------------------------------------------------- if( $send_mail eq "1" ) { &sendmail; } print "Content-type: text/html\n\n"; print "\n\nMultiBBS:ボードの作成\n\n\n"; print "\n\n"; print "MultiBBS:ボードの作成\n
\n\n"; print "
\n"; print "新しいボードの作成が完了しました。

"; print "主催者パスワードはボード管理に必要となりますので、忘れないようにしてください。"; print "(このパスワードでボードデザインの変更や、メッセージの編集・削除ができます)\n"; print "
\n\n"; print "
\n
\n"; print "\n"; print "\n"; print "
\n
\n\n\n"; exit; } #----------------------------------------------------------------- # フォーム投稿されたデータを解析し、配列にリストする #----------------------------------------------------------------- sub form { #-------------------------------------------------- # フォーム入力されたデータを$bufferに格納 #-------------------------------------------------- if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } #-------------------------------------------------- # $bufferに格納されたFORM形式のデータを取り出す #-------------------------------------------------- @formtemp = split(/&/,$buffer); foreach $pair (@formtemp) { ($name, $value) = split(/=/, $pair); } @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; #-------------------------------------------------- # 書き込まれたくないタグが含まれる内容を消去する #-------------------------------------------------- $value =~ s/