#!/usr/bin/perl ################## 設定項目 ###################### use DBI; $dbuser = 'beyond'; $dbpass = 'taka202'; require '../jcode.pl'; $script = "./urledit.cgi"; $domfile = "../dat/alldomain.dat"; $subject = '転送URLの設定変更 [BEYOND NETWORK]'; # ロックファイル $lockfile = './lock/url.lock'; # リファラー用 $base_url = "http://www.beyondnetwork.com/"; # 戻り先 $home = '../index.html'; # ヘッダーファイル $headerfile = '../header.html'; # sendmailのパス $sendmail = '/usr/sbin/sendmail'; # 送信先メールアドレス $mailto = 'luca@beyondnetwork.com'; ################## メイン処理 ###################### &decode; if ($in{'mode'} eq "check") { ✓ } if ($in{'mode'} eq "send") { &send; } &html; ################## ヘッダー表示 #################### sub header { print "Content-type: text/html\n\n"; open (OUT, "$headerfile") || &error("ヘッダーファイルが開けませんでした"); while () { print $_; } close(OUT); EOM } ################## フッター表示 #################### sub footer { print "\n"; print "\n"; print "\n\n"; } ################## HTML表示 #################### sub html { &header; print <<"EOM";

  転送URLの設定変更

転送URLの転送先・転送方式をご変更されたい場合は、ご利用の転送URLと
パスワードを入力してログインしてください。


ご利用の転送URL   http:///
パスワード


EOM &footer; exit; } ################## 検索処理 #################### sub check { if ($in{'acount'} eq "") { &error("ご利用のURLを入力してください。"); } if ($in{'pass'} eq "") { &error("パスワードを入力してください。"); } # アクセスチェック # $ref_url = $ENV{'HTTP_REFERER'}; # $ref_url =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # if ($ref_url !~ /$base_url/i) { &error("不正なアクセスです"); } $addr = $ENV{'REMOTE_ADDR'}; $domain = "$in{'domain'}\/$in{'acount'}"; $db = DBI->connect('DBI:mysql:BEYOND:localhost', $dbuser, $dbpass); $sth = $db->prepare("select gourl,type,name,pass,mail,title from URL where domain=\'$domain\'"); $sth->execute; @data = $sth->fetchrow_array; $sth->finish; $db->disconnect; $gourl=$data[0]; $type=$data[1]; $name=$data[2]; $pass=$data[3]; $mail=$data[4]; $title=$data[5]; if ($gourl eq "") { &error("ご入力されたURLは登録されていません。"); } if ($pass ne $in{'pass'}) { &error("パスワードが認証されませんでした。"); } &header; print <<"EOM";

EOM print "\n"; print "\n"; print <<"EOM";
ご利用URLhttp://$domain
転送方式
転送先のURL
HPのタイトル
※フレーム転送のみ


EOM &footer; exit; } ################## 変更処理 #################### sub send { # アクセスチェック # $ref_url = $ENV{'HTTP_REFERER'}; # $ref_url =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # if ($ref_url !~ /$base_url/i) { &error("不正なアクセスです"); } if ($in{'newurl'} eq "") { &error("転送先のURLを入力してください"); } $domain = "$in{'domain'}\/$in{'acount'}"; open(IN,"$domfile") || &error("Open Error : Domains file"); @dom = ; close(IN); foreach (@dom) { chomp($_); if ($in{'newurl'} =~ /$_/) { &error("転送先アドレスに当サービスのアドレスは指定できません"); } } if ($in{'type'} eq "D") { $html = ""; }elsif ($in{'type'} eq "F") { $html = "\n"; $html .= "\n"; $html .= "$in{'title'}\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; } $indexdir = "/home/sites/$in{'domain'}/public_html/$in{'acount'}"; open(OUT,">$indexdir/index.html") || &error("Open Error : Index file"); print OUT $html; close(OUT); # 個別ファイルの更新 if ($in{'type'} eq "フレーム転送") { $tp = "F"; } else { $tp = "D"; } # 時間とホストを取得 &get_time; &get_host; $db = DBI->connect('DBI:mysql:BEYOND:localhost', $dbuser, $dbpass); $sth = $db->prepare("update URL set gourl=\'$in{'newurl'}\',type=\'$in{'type'}\',title=\'$in{'title'}\' where domain=\'$domain\'"); $sth->execute; $sth->finish; $db->disconnect; $subject2 = $subject; &jcode'convert(*subject2,'jis'); # メール送信 &mail_to; if ($in{'title'} ne "") { $title = "HPのタイトル:$in{'title'}
"; } if ($in{'type'} eq "F") { $typejp = "フレーム転送"; } else { $typejp = "ダイレクト転送"; } # 完了メッセージ &header; print <<"EOM";


転送URLの設定を、以下のように変更いたしました。

ご利用のURL: http://$in{'domain'}/$in{'acount'}
転送先のURL: $in{'newurl'}
転送方法 : $typejp
$title
実際に http://$in{'domain'}/$in{'acount'} にアクセスして、
$in{'newurl'} に転送されるかご確認ください。
もし転送先のサイトが表\示されない場合は、お手数ですが
メールにてご連絡お願いいたします。


[もどる]
EOM &footer; exit; } ################## メール送信 #################### sub mail_to { # 自分宛メッセージ $mail_body = <<"EOM"; 送信日時:$date ブラウザ:$ENV{'HTTP_USER_AGENT'} ホスト名:$host ご登録URL: http://$in{'domain'}/$in{'acount'} 転送先URL: $in{'newurl'} EOM # お客様宛メッセージ $mail_body2 = <<"EOM"; $in{'name'} 様 「BEYOND NETWORK」の無料転送URLをご利用いただき 誠にありがとうございます。このメールは自動返信しています。 転送URLの設定を下記のように変更いたしましたので ご確認お願いいたします。 ご利用のURL:http://$in{'domain'}/$in{'acount'} 転送先のURL:$in{'newurl'} 今後とも、よろしくお願いいたします。 ------------------------------------------- BEYOND NETWORK 管理人:LUCA URL http://www.beyondnetwork.com/ E-MAIL $mailto ------------------------------------------- EOM # JISコード変換 &jcode'convert(*mail_body2, 'jis' ,'sjis'); # 自分宛 open(MAIL,"| $sendmail -t -i -f $mailto") || &error("メール送信に失敗しました"); print MAIL "To: $mailto\n"; print MAIL "From: $in{'mail'}\n"; print MAIL "Subject: $subject2\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "X-Mailer: $ver\n\n"; print MAIL "$mail_body\n"; close(MAIL); # お客様宛 open(MAIL,"| $sendmail -t -i -f $mailto") || &error("メール送信に失敗しました"); print MAIL "To: $in{'mail'}\n"; print MAIL "From: $mailto\n"; print MAIL "Subject: $subject2\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "X-Mailer: $ver\n\n"; print MAIL "$mail_body2\n"; close(MAIL); } ################## デコード処理 #################### sub decode { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @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; # 文字コード変換 (Shift-JISコード) &jcode'convert(*value,'sjis'); $in{$name} = $value; } } ################## エラー処理 #################### sub error { &unlock; &header; print "



\n"; print "ERROR$_[0]

\n"; print "[もどる]\n"; print "
\n"; &footer; exit; } ################## 時間の取得 #################### sub get_time { $ENV{'TZ'} = "JST-9"; local($min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[1..6]; local(@week) = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); # 日時のフォーマット $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d", $year+1900,$mon+1,$mday,$week[$wday],$hour,$min); } ################## ホスト情報の取得 #################### sub get_host { $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq "" || $host eq $addr) { $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2) || $addr; } } ################## ロック処理 ######################## sub lock { # 1分以上古いロックは削除する if (-e $lockfile) { local($mtime) = (stat($lockfile))[9]; if ($mtime < time - 60) { &unlock; } } local($retry) = 5; while (!mkdir($lockfile, 0755)) { if (--$retry <= 0) { &error("ただいま混み合っております。しばらく時間をおいてからお申\し込みください"); } sleep(1); } $lockflag=1; } ################## ロック解除 ######################## sub unlock { rmdir($lockfile); $lockflag=0; }