#!/usr/local/bin/perl #-------- 基本データ所得 --------------- require 'jcode.pl'; # jcode.plのパス 644 $usrdir = 'userdata/'; # ユーザデータを格納するフォルダ $dat = 'dat'; # ユーザーデータの拡張子(通常dat) $admpas = 'bbs0000'; # 管理者パスワード $recordcgi = 'record.cgi'; # このファイルのファイル名(755|705) $bbsdat = 'bbs.cgi'; # 掲示板ログファイル名 (666|606) $bbsbak = 'bbsbak.cgi'; # 掲示板過去ログファイル名 $htitle = 'BBS / myrecord : SoS II'; # ヘッダタイトル $tblwth = '100%'; # テーブルの横幅 $fntsze = '12'; # フォントサイズ $bgcolor = '#33CC66'; # テーブル背景色 #-------- コメントデコレーション ------- @deckey = (':S:',':I:'); # ←を入力すると↓に変換する @decwrd = ('SALE!','告知!'); #-------- LOCK FILE -------------------- $lockkey = 1; # ファイルのロック(Mkdir = 1,Symlink=2,No = 0) $lockfile = './sos.lock'; # ロックファイル名&パス $method = 'POST'; # アクションメソッド (POST Only) #-------- メイン動作実行 --------------- &decode; &header; &lock; if ($Fm{'mode'} eq 'my_record') { &my_record; } elsif ($Fm{'mode'} eq 'BBS') { &bbs; } elsif ($Fm{'mode'} eq 'write') { &write; } else { &bbslogin; } &unlock; &footer; exit; #=======《 Sub My Record 》===============================================# sub my_record { @rcdlines = &get_user("$Fm{'id'}"); if ($ps ne $Fm{'ps'}) { &error("パスワードが違います"); } if (!@rcdlines) { print qq|あなたの記録は白紙です
\n|; } else { print qq|$nmの記録
\n|; } foreach $line (@rcdlines) { print qq|$line

\n|; } $ct = 0; &userout; } #=======《 Sub BBS login 》===============================================# sub bbslogin { &cookie_get; print qq|
$htitle へようこそ

利用規約:この掲示板をご利用になる際は、下記の点を厳守願います。
  • 誹謗中傷、名誉毀損、プライバシーの侵害は禁止致します。
  • この掲示板で知りえた情報を第三者に漏洩する事は禁止致します。
  • 管理者・投稿者の両者の許可無く投稿内容を転載する事を禁止致します。
  • 営利目的の書き込みを禁止致します。
  • 荒らし行為は禁止致します。
  • 営利・非営利に関わらず、18禁・販売・マルチビジネスなどに関する書き込みを禁止致します。
  • 管理者の許可がある場合においては、許可された目的範囲に限り、限定的に上記の規約を逸脱する事を認める場合があります。

  • 何れかの規則の一つにでも違反された場合には、会員登録の抹消・過去に遡っての使用IP情報の公開等を行います。
  • 日本国の法律に違反する内容の書き込みが行われた場合、および公的な司法・行政機関からの要請があり、かつ必要であり合法であると認められる場合には、当方の保有する会員情報・IP情報の提供をする場合があります。

  • 予\告無く掲示板サービスを停止する事があります。また、掲示板のログを消去する事があります。
  • 予\告無く掲示板規約を改正する事があります。

  • 掲示板のご利用には、当方で運営しているブラウザゲーム Script of SAGA II への登録が必要です。
  • 表\示されなくなったログは一定期間保管してありますが、削除しない事を約束する物ではありません。また、ログを公開する事を約束する物ではありません。
  • 連続書き込みは出来ません。凡そ10分に1回程度が上限です。
  • 100件を越えると、古いものから順に表\示されなくなります。
  • タグは使えません。 :#000000: という形式で、色だけは指定可能\です。

user-ID: password:
|; } #=======《 Sub BBS 》=====================================================# sub bbs { if (!$Fm{'page'}) { $Fm{'page'} = 1 } if ($Fm{'mode'} ne 'write') { if ($Fm{'id'} ne 'ADMIN' || $Fm{'ps'} ne $admpas) { @rcdlines = &get_user("$Fm{'id'}"); } else { $nm = '管理者'; $id = $Fm{'id'}; $ps = $Fm{'ps'}; } open(IN,"$bbsdat") || &error("$bbsdat  読みこみエラー"); @bbslines = ; close(IN); } ($no_lt) = $bbslines[0] =~ /No.(\d+):/; ($no_st) = $bbslines[$Fm{'page'}-1] =~ /No.(\d+):/; $no_ed = $no_st - 14; if ($no_ed < 1) { $no_ed = 1; } print qq|
$htitle
No. $no_ed 〜 $no_st 表\示中|; if ($#bbslines > 14) { print qq| : |; } print qq|
|; if (!@bbslines) { print qq|
掲示板の記録は白紙です

| } foreach $count ($Fm{'page'} - 1 .. $Fm{'page'} + 12) { if (!$bbslines[$count + 1]) { $temp = $count; last; } $temp = $count + 1; $bbs = $bbslines[$count]; foreach (0 .. $#deckey) { $bbs =~ s/$deckey[$_]/$decwrd[$_]/g } ($date,$log) = split(/<>/,$bbs,2); $date = "$date"; print qq|$date$log
| } $bbs = $bbslines[$temp]; ($date,$log) = split(/<>/,$bbs,2); $date = "$date"; print qq|$date$log
|; } #=======《 Sub BBS Write 》===============================================# sub write { # if ($l) { require $logcgi; &log('BBS'); } if ($Fm{'id'} ne 'ADMIN' || $Fm{'ps'} ne $admpas) { @rcdlines = &get_user("$Fm{'id'}"); } else { $nm = '管理者'; $id = $Fm{'id'}; $ps = $Fm{'ps'}; } open(IN,"$bbsdat") || &error("$bbsdat  読みこみエラー"); @bbslines = ; close(IN); if ($Fm{'write'} =~ /:#(\w\w\w\w\w\w):/i) { $set = $Fm{'write'} =~ s/:(#\w\w\w\w\w\w)://g; foreach (1 .. $set) { $Fm{'write'} .= ''; } } ($no) = $bbslines[0] =~ /No.(\d+):/; $no++; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time); @week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $mon++; $year -= 100; $date = sprintf("%02d/%02d/%02d(%s) %02d:%02d:%02d",$year,$mon,$mday,$week[$wday],$hour,$min,$sec); $temp = substr($date,0,17); if ($Fm{'id'} ne 'ADMIN' || $Fm{'ps'} ne $admpas) { if ($bbslines[0] =~ /$temp/ && $bbslines[0] =~ /\[$id:$nm\]/) { print qq|連続投稿は出来ません。10分程度間隔を空けて下さい
|; return } $temp = unshift(@bbslines,"No.$no:$date \[$id:$nm\]<>: $Fm{'write'}\n"); } else { $temp = unshift(@bbslines,"No.$no:$date \[$id:$nm\]<>: $Fm{'write'}\n"); } if ($temp > 100) { $temp = pop @bbslines; open(OUT,">>$bbsbak") || &error("$bbsbak  書き込みエラー"); print OUT $temp; close(OUT); } open(OUT,">$bbsdat") || &error("$bbsdat  書き込みエラー"); print OUT @bbslines; close(OUT); &bbs; } #=======《 Sub Get User 》================================================# sub get_user { open(IN,"$usrdir$_[0]\.$dat") || &error("ID $_[0]は存在しません"); @_ = ; close(IN); if (!@_) { &error("読みこみエラー") } ($id,$nm,$ps,$jb,$ig,$sp,$bp,$bn,$ak,$dd,$hp,$xp,$ab,$db,$av,$wn,$lz,$dt ,$mn,$bg,$xi,$tm,$lf,$fe,$cm,$is,$ht,$fg,$rw,$kl,$dr,$rt,$cr,$ft,$lv,$ex ,$sl,$jf,$js,$re,$ct,$co,$tw,$hm,$pt,$cd,$ci) = split(/<>/,$_[0]); &error("パスワードが違います") if $Fm{'ps'} ne $ps && $Fm{'ps'} !~ /$admpas/; $userline = shift(@_); return @_; } #=======《 Sub User Out 》================================================# sub userout { $line = join('<>',$id,$nm,$ps,$jb,$ig,$sp,$bp,$bn,$ak,$dd,$hp,$xp,$ab ,$db,$av,$wn,$lz,$dt,$mn,$bg,$xi,$tm,$lf,$fe,$cm,$is,$ht,$fg,$rw,$kl ,$dr,$rt,$cr,$ft,$lv,$ex,$sl,$jf,$js,$re,$ct,$co,$tw,$hm,$pt,$cd,$ci,"\n"); unshift (@rcdlines,$line); open(OUT,">$usrdir$id\.$dat") || &error("Write Error : $id\.cgi"); print OUT @rcdlines; close(OUT); } #=======《 Sub Lock 》====================================================# sub lock { return if !$lockkey; local($flag) = 3; if ($lockkey == 1) { rmdir($lockfile) if (time - (stat($lockfile))[9] > 60); while (!mkdir($lockfile,0755)) { --$flag or &error('現在、サーバが混み合っています',1); sleep(3); } } elsif ($lockkey == 2) { unlink($lockfile) if (time - (stat($lockfile))[9] > 60); while (!symlink(".",$lockfile)) { --$flag or &error('現在、サーバが混み合っています',1); sleep(3); } } } #=======《 Sub Unlock 》==================================================# sub unlock { if ($lockkey == 1) { rmdir($lockfile) } elsif ($lockkey == 2) { unlink($lockfile) } } #=======《 Sub Decode 》==================================================# sub decode { if ($ENV{'REQUEST_METHOD'} eq "POST") { $post = 1; read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); } else { @pairs = split(/&/, $ENV{'QUERY_STRING'}); } foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s//>/g; $value =~ s/"/"/g; $value =~ s/\,/,/g; $value =~ s/△/▲/g; $value =~ s/\r\n/
/g; $value =~ s/\r/
/g; $value =~ s/\n/
/g; $Fm{$name} = $value; } } #=======《 Sub Header 》==================================================# sub header { print << "END_of_HD"; Content-type: text/html $htitle $body
END_of_HD } #=======《 Sub Footer 》==================================================# sub footer { print << "END_of_CP";
SoS II © MISSINGLINK & Fayreal
BBS & myrecord for Script of SAGA II
SION / SION jam
END_of_CP foreach (@editor) { print qq|
$_|; } print qq|
\n\n\n|; } #=======《 Sub Error 》===================================================# sub error { print << "END_of_ERR";

$_[0]
END_of_ERR &footer; exit; } #=======《 Sub Get Cookie 》==============================================# sub cookie_get { @pairs = split(/;/,$ENV{'HTTP_COOKIE'}); foreach $pair (@pairs) { local($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{'SOS2'}); foreach $pair (@pairs) { local($name, $value) = split(/:/, $pair); $COOKIE{$name} = $value; } $c_name = $COOKIE{'name'}; $c_pass = $COOKIE{'pass'}; $c_id = $COOKIE{'id'}; }