#! /usr/local/bin/perl # # ゆいちゃっとMagic 1.0+パスワード数限定版 # Japanese version--sjis表示専用 # Copyright(c) 1997 yui@cup.com # # Maintained by Yui Suzuki # http://www.cup.com/yui/ # #enter.cgiは、入室時の処理などを行います。 #pref.cgiのsub sankaの次の行を、 # if( $times-60 > $timerec){$line = ''; next;} #から、 # if( $times-120 > $timerec){$line = ''; next;} #ぐらいにしたほうがいいかもしれません。 require './jcodeLE.pl'; require './pref.cgi'; $| = 1; $passlimit=5;#同時に利用できるパスワードの総数 &init; &getcookie;&passcount;#使われているパスワードをカウント。 &htmlenter if($ENV{'QUERY_STRING'} eq 'enter'); &decode; &jikan; $autoclear = $FORM{'autoclear'}; if( ($PASS{$pass} ne '1') && ($passcounts > $passlimit) ){ &htmlenter;#パスワードが使われてなく、リミットを越えている場合。 #入室を拒否して入室画面に。 } &setcookie; &hide; &html; &readlog; $brauza = $ENV{'HTTP_USER_AGENT'}; $brauza =~s/管理人 > $nameさん、おいでやすぅ。 $brauza$histry($date $host)[$pass]
\n"; &writelog; &sanka; &ended(); exit; sub getcookie{ #くっきーを頂きます。 $cooks = $ENV{'HTTP_COOKIE'}; $cooks = '' unless($cooks =~s/.*yuidata=(.*)yuiend.*/$1/); ($name,$reload,$email,$mode,$color,$window,$lastdate,$count,$autoclear) = split(/\t/, $cooks); $histry = "$count回目:LAST LOGIN:$lastdate" if($lastdate); if(!$count){ #くっきー情報の無い場合のデフォルト値 $reload = 30; $mode = 'checked';$color = 'red'; $window = 10; $count = 1;$autoclear = 'checked'; } }#getcookie END sub setcookie{ #くっきーをブラウザにプレゼントします。 local($dmy,$mdc,$monc,$yrc,$wdayc,$mc,$yc); ($dmy,$dmy,$dmy,$mdc,$monc,$yrc,$wdayc,$dmy,$dmy) = localtime($times + 7776000); $yc = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') [$wdayc]; $mc = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') [$monc]; $yrc = $yrc+1900; $mdc = "0$mdc" if ($mdc < 10); $count++; $data = "$name\t$reload\t$email\t$mode\t$color\t$window\t$date\t$count\t$autoclear\tyuiend"; $data = 'deleted' if($FORM{'cook'} ne 'ok'); print "Set-Cookie: yuidata=$data; expires=$yc, $mdc-$mc-$yrc 00:00:00 GMT\n"; }#このクッキーはだいたい3ヶ月間有効です。 sub html{ print "Content-type: text/html\n\n"; print <<"_HTML_"; $title$metacode $body _HTML_ if($mode eq 'checked'){ print <<"_HTML_"; $hidden $hidden
[DLサイト](パスワード:[$pass])
おなまえ:$name$reload秒更新
発言:
$kao
ログ行数:
$logw
$hidden
_HTML_ }else{ print <<"_HTML_";
$title
おなまえ:$name  $hidden
_HTML_ } }#html END sub htmlenter{#入室前の画面 print "Content-type: text/html\n\n"; print <<"_HTML_"; $title$metacode$body $msg
[ゆいのホームページ][DLサイト]$histry
$title
おなまえ:記入してね!
パスワード:
メールアドレス:
名前の色:
画面モード(フレーム):利用する。
ログ行数:
リロード時間:0秒なら、手動です。
発言時自動消去(JavaScript使用)
入力データをブラウザに記憶させる
(この機能\はNetscape1.1以降やInternetExplore3.0以降などのいくつかのブラウザに有効です。) _HTML_ &ended(); }#htmlenter END sub passcount{#ここで、パスワードをカウント/更新する。 local($timerec $handle, $host2,$id,@sanka); open(LOG,"$sanka_file") || &ended('$sanka_file open error'); seek(LOG,0,0); @sanka=; close(LOG); $times=time; foreach $line (@sanka) { ($timerec, $handle, $host2,$id) = split(/\t/, $line); if( $times > $timerec+60){$line = ''; next;} $PASS{$id}=1; }#foreach open(LOG,">$sanka_file") || &ended('$sanka_file write error'); eval 'flock(LOG,2);'; seek(LOG,0,0); print LOG @sanka; eval 'flock(LOG,8);'; close(LOG); $passcounts = scalar( keys %PASS); if($passcounts > $passlimit){ $msg = '現在新規のパスワードは受け付けていません。
'; } }#passcount END __END__