#!/usr/bin/perl -w
require './jcode.pl'; # for URLデコード #
require './idroll.pl'; # for ID文字列振出し #
# #
# URL Decode **************************************************## URLデコード #
if( $ENV{'REQUEST_METHOD'} eq "POST" ) # POST使用かどうか #
{ # POST使用の場合 #
read( STDIN, $tmp0, $ENV{'CONTENT_LENGTH'} ); # フォームに入力された内容を変数に格納する #
} # #
else # #
{ # POST使用以外の場合 #
$tmp0 = $ENV{'QUERY_STRING'}; # クエリの内容を変数に格納する #
} # #
# #
@decopairs = split( /&/, $tmp0 ); # フォーム入力内容を'&'区切りで配列に格納する #
# #
foreach $tmp1 (@decopairs) # 配列の各要素について #
{ # #
($name, $value) = split( /=/, $tmp1 ); # '='区切りでキーと値に切分ける #
# To Set Cookie ***********************************************## クッキーを設定 #
$cform{$name} = $value; # フォームの内容をハッシュ(クッキー用)にセット #
#/To Set Cookie ***********************************************## #
$value =~ tr/+/ /; # URLデコード #
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack ("C", hex($1))/eg; # URLデコード #
# jcode::convert(*value, 'sjis'); # URLデコード #
jcode::h2z_sjis( *value ); # URLデコード #
$form{$name} = $value; # フォームの内容をハッシュ(ログ用)にセット #
} # #
#/URL Decode **************************************************## #
# Write Log File then Move ************************************## ログ書込みとページ移動 #
if( # 入力値が異常かどうか(*性能改善余地) #
length( $form{'message'} ) > 1600 || # メッセージが長すぎる #
$form{'mssid'} > 1024 || # ID値が上限以上 #
$form{'mssid'} < 1 && # ID値が下限以下 #
$form{'mssid'} ne '****' ) # ID値が特殊文字列でない #
{ # 入力値が異常の場合 #
print "Location: http://bj006.com/cgi/error1.htm"."\n\n"; # エラーページ1へジャンプ #
} # #
else # #
{ # 入力値が異常でない場合 #
# Get Time ****************************************************## 入力時刻の取得 #
($sec,$min,$hour,$day,$mon,$year,$weeko,$yday,$isdat) = localtime(); # 入力時刻の取得 #
$mon++; # 月表示のため #
$year += 1900; # 年表示のため #
@weeka = ( 'Sun','Mon','Tue','Wed','Thu','Fri','Sat' ); # 曜日を文字列で表すため #
# #
$time = sprintf( "%04d-%02d-%02d (%s) %02d:%02d:%02d", # 入力時刻のフォーマット整形 #
$year,$mon,$day,$weeka[$weeko],$hour,$min,$sec ); # #
#/Get Time ****************************************************## #
# Get ID ******************************************************## ID文字列の取得 #
if( $form{'mssid'} ne '****' ) # 入力されたIDが特殊文字列でないかどうか #
{ # 入力されたIDが特殊文字列でない場合 #
$mssid = idroll::roll( $form{'mssid'} - 1 ); # ID文字列の振出し #
} # #
else # #
{ # 入力されたIDが特殊文字列の場合 #
$mssid = 'Hermit Webmaster' # 管理人用文字列 #
} # #
#/Get ID ******************************************************## #
# GET IP and Host *********************************************## 入力者のIPアドレスとホストを取得 #
$ipaddr = $ENV{'REMOTE_ADDR'}; # 環境変数からデータを変数に格納する #
$host = gethostbyaddr( pack("C4", $ipaddr), 2 ) || $ipaddr; # IPアドレスからホストを取得、失敗したらそのものを #
#/GET IP and Host *********************************************## #
$name = $form{'name'}; # 作業用 #
$subject = $form{'subject'}; # 作業用 #
$message = $form{'message'}; # 作業用 #
$message =~ s/\n/
/g; # 本文の改行をタグに変換 #
# #
if( index( $form{'url'}, 'http://' ) < 0 ) # 入力URLが"http://"以外で始まるかどうか #
{ # 入力URLが"http://"以外で始まる場合 #
$url = 'http://'; # デフォルト値設定とする(無視対象文字列となります) #
} # #
else # 入力URLが"http://"で始まる場合 #
{ # #
$url = $form{'url'}; # 作業用 #
} # #
# #
if( $url eq 'http://' ) # 入力URLがデフォルト値かどうか #
{ # 入力URLがデフォルト値の場合 #
$url = 'URL'; # ただの文字列 #
} # #
else # 入力URLがある場合 #
{ # #
$url = "URL"; # ハイパーリンクを設定 #
} # #
# #
open LOGW, ">>./guestlog.txt" # ログファイルオープン #
or print "Location: http://bj006.com/cgi/error0.htm"."\n\n"; # 失敗したらエラーページ0へジャンプ #
flock( LOGW, 2 ) # 占有ロック #
or print "Location: http://bj006.com/cgi/error0.htm"."\n\n"; # 失敗したらエラーページ0へジャンプ #
print LOGW "$name,$subject,$message,$url,$mssid,$time,$ipaddr,$host\n"; # ログファイルへ追加書込み #
close( LOGW ); # ファイルクローズ #
# Set Cookie **************************************************## #
$target = time() + (60 * 60 * 24 * 90); # クッキーの生存期間を設定(この場合は90日間となる) #
($gsec,$gmin,$ghour,$gday,$gmon,$gyear,$gweeko,$gyday,$gisdat) = gmtime($target); # 期限切れ時のGMTを取得 #
$gyear += 1900; # 西暦の正規化 #
@gmona = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', # 月文字列配列 #
'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); # #
# #
$expire = sprintf( "%s, %02d-%s-%04d %02d:%02d:%02d GMT", # クッキー設定用フォーマット整形 #
$weeka[$gweeko], $gday, $gmona[$gmon], # #
$gyear, $ghour, $gmin, $gsec ); # #
# #
$cs = "$cform{'name'}&$cform{'url'}&$cform{'mssid'}"; # クッキーが持つのは名前、URL、ID(区切り文字自由) #
# $cs = "$form{'name'}<>$form{'url'}<>$form{'mssid'}"; # デコードされていない方が望ましい #
# #
print "Set-cookie:$cs; expires=$expire\n"; # クッキーの設定 #
#/Set Cookie **************************************************## #
print "Location: http://bj006.com/cgi/guestbook.cgi"."\n\n"; # すべてが正常なら、掲示板に戻る #
} # #
#/Write Log File then Move ************************************## #
exit; # 処理終了 #