#!/usr/bin/perl

#
# Proxy ֌WS폜 by gH
# ep̕Ɨ

###########################################################################################
#
#  Force 264 BBS o[WR.PA@łBiB ͐ANZXr̋to[Wj
#
# tFCU[΍ς݁Bi΃tFCU[̓IAIt\I@ݒu̓ItɂȂĂ܂j
# GabriDuke΍i`FbNR[hj͏펞IłB
# `FbNR[hłftHg̃tFCU[ɂ͗LłII
# `FbNR[hjꂽꍇɂ͑΃tFCU[Iɂ邱Ƃŉ摜`FbNR[h
# ؂ւ܂B𓊍e҂͗ɏʂȂƓełȂ悤ɂȂ܂B
# iIAIt؂ւ͊Ǘ҃[h[hݒʂɃWvł܂j
#
#  ̃XNvgɂ
#
# ̈Y΍XNvgɂ͉L̕XɂQA邢͂͂Ă܂B
# TTSAAXAdimdimAЂ݂ADPAH꒷AmmA/../AYuumiAiC`
# wzXgrTu[`Yui(http://www.cup.com/yui/)ɉB
# Ǘ҃pX[hݒTu[`̓XL[(http://www.rescue.ne.jp/)ɉB
#
#  Script written by Carl@[ http://carl.blackout.org/ ]@Last Modified on: 20/August/99
# zC`LȂ̂ŃoOƂ܂낵łB@[߂(^^)/~  by Carl
#
# <pK>
#  1.̃XNvgɉAzzĂSRIbP`B
#  2.[zzꍇ͔zz@Force 264(http://carl.blackout.org/)𖾋LĉB
#  3.̃XNvgLŔzẑ̓_IB
#  4.̃XNvgLŐݒu肷ꍇi^j͘AB
#
###########################################################################################
#
#  public_htmliz[y[WfBNgj
#     |
#     |-- cgi-biniCӂ̃fBNgjij̓p[~bViT[o[ݒɏ]Ɓj
#            |
#            |-- che.cgi (705)
#            |-- jcode.pl (604)@@{ϊCu
#            |-- himicode.cgi(705) ΃tFCU[pbitmap摜R[hCGIiv@ݒj
#            |-- logcut.cgi (705)@ߋOopCGI
#            |-- che.dat (606)@  ĩt@Cj\pOۑ
#            |-- kako.dat (606)@ ĩt@CjߋOpobNAbvpOʕۑ
#            |-- log.txt (606)@@ĩt@CjANZXOp
#            |-- counter.dat (606)ĩt@CjJE^[p
#            |-- pass.txt (606)@ ĩt@CjpX[hp
#            |-- a-men.dat (606)@ĩt@Cj΃tFCU[ؑւ  rzXgo^p
#            |-- himiko.txt (606) ĩt@Cj΃tFCU[psς݃`FbNR[hۑ
#            |-- phaser.txt (606) ĩt@Cj΃tFCU[pgpς݃`FbNR[hۑ
#
#   Ehimicode.cgii_摜R[hCGIj̓GfB^[ŊJďݒ肷邱
#   Eche.datAkako.datAlog.txtAcounter.datApass.txtAa-men.datAhimiko.txtAphaser.txtA
#   @͒g̃t@C
#   Ejcode.pl͒gS炸ɂ̂܂܃AXL[]
#   EPQ̃t@C̓AXL[[hŎ舵(])邱
#
###########################################################################################

#----------------#
#    ݒ    #
#----------------#

$server     = 'http://erdbeeren.virtualave.net/';
$scriptroot = $server . 'cgi-bin/';
$dataroot   = '/home/zheinz/site-data/';

##################################################
# ̃XNvgtqkŐݒ
$reload = $scriptroot . 'post.cgi';

#
# fXNvg URL Őݒ
#
$bbsscript = $scriptroot . 'che.cgi';

##################################################
# ʂ́uIvNtqkŐݒ
$modoru = $server;

# -----------------------------------------------------------------
# L^t@C̐ݒ 
# -----------------------------------------------------------------

# pX[h̋L^t@C̐ݒ
$pass = $dataroot . 'Ap8Rtml-encrypt-key.txt';

# f̓e܂L^t@C̐ݒƍőL^iy[W\pj
$file = $dataroot  . 'Ap8Rtml-logdata-main.txt';

# Py[Wɕ\ftHgi[hۂ̕\͉ρj
$kensuu = 30; 

# őL^
$max = '300'; 

# e܂L^t@C̐ݒ
# iߋOpɕʃt@Cɑʕۑj
# ͏ݒ͗L܂̂ŕĂƋɂȂ܂(^^;;
# KɃNA[ĉB
# iʕ\ɂ͎gȂ̂ŌĂf̂ɂׂ͕͂܂j
$kakofile = $dataroot . 'Ap8Rtml-bbs-past.txt';

# wzXgr@\̋L^t@C̐ݒirzXg܂܂j
# tFCU[΍IIto^A肷t@C˂Ă܂
# Xgւ̓o^͌f̍ŉǗ҃[h[hݒʂɂ܂
$hostlist = $dataroot . 'a-men.dat';

# tFCU[΍p̉摜eR[hp CGI t@C̎wiby Ђ݂j
$himicode = $scriptroot . 'himicode.cgi';

# sς݃`FbNR[hۑt@C
$himicode_log = $dataroot  . 'Ap8Rtml-submit-code.txt';

# gpς݃`FbNR[hۑt@C
$code_log = $dataroot . 'Ap8Rtml-phaser-code.txt';
$maxline = '100';   # őۑiݒ萔ȏ͌Â̂珇ɍ폜j

# {R[hϊCu
require './jcode.pl';

# -----------------------------------------------------------------
# ǗҐݒ 
# -----------------------------------------------------------------
# xh~̂ߓe҂̔Fhc𓊍ěɕ\iby /../@mm@J[j
# ihćA폜pX[hƃnh̑gݍ킹ňÍŒ肳܂j
# Fhc\Ȃ : 0@\: 1
# ftHgłBby gH

# Ǘ҂𖾎ꍇihc[Master]ƕ\j̃nhݒiby Yuumi@J[j
# Lnh𓊍eҖɓA폜pX[hǗpXƂgݍ킹[Master]\
# Sṕ[nhip[A[铙j͌쓮̂Ŏg܂B߂(^^;
$master = "gH";

#--------------------------------
# Ǘ҂̖OgꂽȂOgpۂiUېݒ by TTSj
# Uېݒ肵Ȃ : 0@: 1  ftHgōsB

# Uېݒ肷ꍇ̋ۃnhÂ̐ݒBipJĕwj
# Ǘ҂͍폜pX[hɊǗpX[h΂ǂȖOł܂Biby J[j
$admin = "gH Î Ǘ Ǘl";  # Sṕ[͎̂gps

# -----------------------------------------------------------------
# Y΍
# -----------------------------------------------------------------
#--------------------------------
# _u|XgieAe[hj΍B
# O܂Ń`FbN邩iby AXj
$check = 5;

# eëꕔςĂ̘Ae΍iF...PځA...Q..j
# ee̐擪w肵͈͓̔œefiPʁoCgj
$checklength = 100;

#--------------------------------
# eeɊւ炸Aewb͋ۂݒiby J[j
# zXg̏ꍇ̂ݎԐ : 0@zXgɊւ炸Ԑ: 1
# ftHgŐݒ
# biPʁFbj
$rtimer0 = 40;
$rtimer1 = 10;
$rtimer2 = 20;

# LpiL$rtimer60b̏ꍇ͉L̂܂܁A120bȏ+80AƂ60bƂ+40Zj
$timer = $rtimer0 + 40;

#--------------------------------
# GabriDukẽ_Aec[΍`FbNR[hpiby H꒷j
$num1 = 87113; # i1`99999܂ł̔Cӂ̂T̐ŕKύX邱Ɓj
$num2 = 79; # i10`99܂ł̔Cӂ̂Q̐ŕKύX邱Ɓj

# `FbNR[hɃL[ňÍi`FbNR[h@̐\hjiby J[j
$key = "GKmPLnUv"; # iCӂ̕ÍL[ɂ@KύX邱Ɓj

#--------------------------------
# ݗeʐ@ 0 ɂƖiSp͖QoCgłjiby J[j
# i[AhX͗ maxlength=30ŃtH[ݒj
$max_s = 50;         #^Cg
$max_n = 30;         #O
$max_v = 3000;       #ee
$max_line = 50;      #eesi̕Ƃ̌ˍlāj

#--------------------------------
# ^Og悤ɂ邩ǂ̐ݒ 
# gȂ:0 @g:1 @C[W^Ôݎg:2 
# ftHgŎgȂƂɂB

#
# ŏ phaser ΍{ by gH
#
$pict = 1;

# -----------------------------------------------------------------
# A GET A^bN΍
# -----------------------------------------------------------------
$counter2 = $dataroot . 'Ap8Rtml-cnt2.txt';
$tstmp    = $dataroot . 'Ap8Rtml-tstmp.txt';
#
# Ђ݂[ǂgꍇɂ͎ۂ̒l 2 {ɂ邱
#
$access_limit = 200;
@script_list = (
                '/home/zheinz/public_html/cgi-bin',
                );

# -----------------------------------------------------------------
# ̑ݒ 
# -----------------------------------------------------------------
# ̎擾ꍇ̏C
# COԂɁ{XԂꍇ@= localtime(time + 9*60*60);
($sec,$min,$hour,$mday,$mon,$year,$wday,$d,$d) = localtime(time + 17*60*60);

#
#--- KȂ̊ɍ킹ďւ鍀ځ@܂ ---
#
$youbi = ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")[$wday];
$date_now = sprintf( " %02d/%02d $youbi %02d:%02d:%02d", $mon + 1, $mday, $hour, $min, $sec );
$date_num = sprintf("%02d%02d%02d%02d%02d",$mon +1,$mday,$hour,$min,$sec); # <-ύX֎~
@key = split(//, $key);
$addr = $ENV{'REMOTE_ADDR'};
$host = $ENV{'REMOTE_HOST'};
if (($host eq $addr) || ($host eq '')) { 
  $host = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $addr;
}

&filter;

#
# ȉtH[̎擾Ȃтɉ
#

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;

  &jcode'convert(*value,'sjis');

  # ňCɃtH[f[^̃^O`FbNs

  $value =~ s/</&lt;/g;
  $value =~ s/>/&gt;/g;

  $value =~ s/\015\012/\015/g;
  $value =~ s/\012/\015/g;

  # sAł̂iRsȏ㉽ɉŝ݂͉̕sjiby J[j
  # Xy[X{s̘AłiL邽߂ɃXy[Xĉs鈫Y̏ꍇj

  $value =~ s/ +\015 +\015//g;
  $value =~ s/\@+\015\@+\015//g;
  $value =~ s/ +\015/\015/g;
  $value =~ s/\@+\015/\015/g;
  $value =~ s/\015\015\015\015//g;

  # $value =~ s/\015/<br>\015/g;

  if ( $name eq 'value' ) {
    $value =~ s/\,/\0/g;
  }
  elsif ($name eq 'value') {
    $value =~ s/&/&amp\;/g;
    $value =~ s/\,/\0/g;
  }
  elsif ($name ne 'subject') {
    $value =~ s/\,//g;
    $value =~ s/\=//g;
  }
  else {
    $value =~ s/\,//g;
  }

  $FORM{$name} = $value;

  $rname = $FORM{'name'};

  if ($FORM{'page'} eq '') {
    $page = 0;
  }
  else {
    $page = $FORM{'page'};
  }
}

$FORM{'value'} =~ s/\015/<br>\015/g if( $FORM{'how'} != 1 );

if ($FORM{'def'} ne '') {
  $changedef = $FORM{'def'};
}else{
  $changedef = $kensuu;
}

open(DB,"$pass") || &error('0');
@lines = <DB>;
close(DB);
$password = shift(@lines);
chop($password) if ($password =~ /\n$/);
($header, $password) = split(/:/, $password);
if ($password =~ /^\$1\$/) {
  $salt = 3;
} else {
  $salt = 0;
}

#--- C--------------------------------#
&regist;
&jump_bbs;

exit;
#--- 牺̓Tu[` --------------------------------#

#--- ee̎󂯎聕L^ --------------------------------#
sub regist {

  # eꍇ̓[h

  &jump_bbs if ( $FORM{'value'} =~ /^(@|\s)*$/ );

  # ϐ̎擾@ANZXɃOĂȂꍇ

  $via    = $ENV{'HTTP_VIA'};
  $xfor   = $ENV{'HTTP_X_FORWARDED_FOR'};
  $for    = $ENV{'HTTP_FORWARDED'};
  $agent  = $ENV{'HTTP_USER_AGENT'};
  $trueip = &getip;

  $ref = $ENV{'HTTP_REFERER'};
#  $ref_url = $bbsscript; $ref_url =~ s/\~/.*/g;
#  if (!($ref =~ /$ref_url/i)) {
#    &errorz('OeH',"$bbsscript ȊO̓e͏o܂.");
#  }

  # ÍR[h߂
  $i = 0;
  $dukecheck = $FORM{'facheck1'};
  $dukecheck=~ s/[\da-f]{2}/sprintf("%c",hex($&)^ord($key[$i++ % @key]))/ige;
  $dukecheck = ( $dukecheck / $num2 ) - $num1;
  if ( $dukecheck < 101000000) {
    &error('x');
  }
  if ( $dukecheck >= $date_num) {
    &errorz(
            '`FbNR[hG[',
            'ēxfǂݍ݂ȂĂBNׂł̂(^^;'
            );
  }
  if (($date_num > $dukecheck) && (($date_num - $dukecheck) < $rtimer2 )) {
    &errorz(
            '`FbNR[hG[',
            'fɃANZXĂۂɓe܂ł̊Ԋu͐\bĉB'
            );
  }
  if ( ($date_num - $dukecheck) > 30000) {
    &errorz(
            '`FbNR[hG[',
            '`FbNR[hÂ܂B<BR>ēxfǂݍ݂ȂĂB'
            );
  }
  $dukecheck = sprintf("%010d", $dukecheck);
  $str1 = substr("$dukecheck" , -6, 2);
  $str2 = substr("$dukecheck" , -8, 2);
  if ($str1 > 23) {
    &error('x');
  }
  if ($str2 > 31) {
    &error('x');
  }
  if ($pict) {

    # ΃tFCU[Ȉꍇ͎ۂɔsꂽR[hǂƍ

    if ($FORM{'facheck2'} eq '') {
      &errorz(
              '`FbNR[hG[',
              "eR[h͂Ă܂B"
              );
    }  
    $dukecheck = $FORM{'facheck2'} . $FORM{'facheck3'}; 
    open(DB,"$himicode_log") || &error('0');
    @lines = <DB>;
    close(DB);
    $himikocheck=0;
    foreach $line (@lines) {
      chop($line);
      $himikocheck=1 if ($dukecheck eq $line);
    }      
    &error('x') if ($himikocheck != 1);
  }

  # ȉŎgpς݃R[hƂ̃_uƍ
  
  open(DB,"$code_log") || &error('0');
  @lines = <DB>;
  close(DB);
  
  foreach $line (@lines) {
    chop($line);
    if ($dukecheck eq $line) {
      &errorz(
              '`FbNR[hG[',
              "̃R[h͂łɎgĂ܂B<BR>xANZXĉB"
              );
    }
  }
  if ($FORM{'spwd'} =~ /\W/ || length($FORM{'spwd'}) > 9) {
    &errorz(
            '̓~X',
            '폜pX[h8ȓ̔ppŋLĉB'
            );
  }
  # L폜pX[h̏
  if ( ( crypt($FORM{'spwd'}, substr($password,$salt,2)) eq $password )
      && ( $FORM{'name'} =~ /$master/i ) ) {
    # 폜pXǗ҃pXȂnhݒnhȂuMastervƂĊi[
    $spwd = "Master"; 
  }
  elsif ( $FORM{'spwd'} ) {
    $spwd = crypt($FORM{'spwd'}, &mkSalt($FORM{'name'}.$FORM{'spwd'}) );
  }
  else {
    $spwd = '';
  }
  
  # Uۂ̏
  if (crypt($FORM{'spwd'}, substr($password,$salt,2)) ne $password) {
    @adminword = split(/\s+/ , $admin);
    foreach $admin (@adminword) {
      if ($FORM{'name'} =~ /$admin/i) {
        $FORM{'name'} .= '(ʐl)';
      }
    }
  }

  if ($FORM{'name'} eq "") {
    &errorz(
            'eҖ܂',
            "OĉB"
            );
  }

  $FORM{'subject'} = 'Untitled' if ($FORM{'subject'} eq "");

  # ݓe̗eʃ`FbN
  if ($max_s) {
    $value_size = length($FORM{'subject'});
    if ($value_size > $max_s) {
      &errorz(
              '^Cg܂',
              "^Cg $max_s oCgȉɁB");
    }
  }
  if ($max_n) {
    $value_size = length($FORM{'name'});
    if ($value_size > $max_n) {
      &errorz(
              'eҖ܂',
              "eҖ $max_n oCgȉɁB");
    }
  }
  if ($max_v) {
    $value_size = length($FORM{'value'});
    if ($value_size > $max_v) {
      &errorz(
              'e܂B',
              "ݓe $max_v oCgȉɁB");
    }
  }
  if ($max_line) {
    $value_size = ($FORM{'value'} =~ tr/\r/\r/) + 1; # \r ̐𐔂
    if ($value_size > $max_line) {
      &errorz(
              's܂B',
              "ݓe̍s $max_line sȉɁB");
    }
  }
  $for =~ s/,/./g;
  $via =~ s/,/./g;
  $agent =~ s/,/./g;

  $FORM{'email'}   =~ s/<//g;
  $FORM{'email'}   =~ s/>//g;

  open(DB,"$file") ||  &error('0');
  @lines = <DB>;
  close(DB);

  # _u|Xg֎~@\
  $i = 0;
  foreach $line (@lines) {
    $i++;
    if ($i == $max) {
      last;
    }
    push(@new, $line);
  }
  $i = 0;
  while ($i < $check) {
    ($number0,$d,$d,$d,$d,$value0,$d,$d,$host0,$d,$d,$d,$d,$d,$d,$checkcode0)
      = split(/\,/,$lines[$i]);
    if ( substr($FORM{'value'},0,$checklength) eq substr($value0,0,$checklength) ) {
      &errorz(
              'deł',
              "̓e͂łɓeς݂łB"
              );
    }
    if ($host eq $host0 && ($date_num > $number0) && ($date_num - $number0 < $rtimer0 ) ) {
      &errorz(
              '҂',
              "zXg $rtimer0 bȓ̘Ae͂ł܂B"
              );
    }
    if ($date_num > $number0 && ($date_num - $number0 < $rtimer1 ) ) {
      &errorz(
              '҂',
              "O̓e $rtimer1 bȓ̘Ae͂ł܂B");
      }
    $i++;
  }
  $value = "$date_num\,$spwd\,$date_now\,$FORM{'name'}\,$FORM{'email'}\,$FORM{'value'}\,$FORM{'subject'}\,$FORM{'link'}\,$host\,$addr\,$via\,$for\,$trueip\,$agent\,$FORM{'how'}\,$dukecheck\n";

  unshift(@new, $value);
  open(DB,">$file")      || &error('0');
  print DB @new;
  close(DB);

  open(DB,">>$kakofile") || &error('0');
  print DB $value;
  close(DB);

#eꂽ`FbNR[hL^

  open(LOG,"$code_log")  || &error('0');
  @lines = <LOG>;
  close(LOG);

  $phase = @lines;
  $maxline2 = ($maxline - 2);
  if ($phase >= $maxline) {
    open(LOG,">$code_log") || &error('0');
    print LOG "$dukecheck\n";
    foreach $phase (0 .. $maxline2) {
      print LOG $lines[$phase];
    }
  } else {
    open(LOG,">$code_log") || &error('0');
    print LOG "$dukecheck\n";
    foreach $log (@lines) {
      print LOG $log;
    }
  }
  close(LOG);

  # L^Aēǂݍ݂
  &jump_bbs;
  exit;
}

#--- ^G[ --------------------------------#
sub error {
  $error = $_[0];
  if ($error eq "0") {
    $error_msg = 'L^t@C̓o͂ɃG[܂B<BR><BR>';
    $error_msg .= 'ݒut@Ć̖Ap[~bVĊmFĉB';
  }
  elsif ($error eq "x") {
    $error_msg = '`FbNR[h̓͊ԈႢHA܂͕spłB';
  }
  print <<"_HTML_";
Content-type: text/html

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=x-sjis">
<TITLE>BBS Error</TITLE>
</HEAD>
<body bgcolor="#ffffff" text="#000000" link="blue">
<!--VirtualAvenueBanner-->
<p>
<table border=0 width=100% cellpadding=2 cellspacing=3>
<tr><td bgcolor=#e54500><font color=#ffffff size=+3>
BBS Error
</font></td></tr></table>
<p>
<H3>$error_msg</H3>
uEU[߂]{^đỎʂɈړĉB<P>
_HTML_
  if($FORM{'value'} ne ''){
    $FORM{'value'} =~ s/<br>//g; 
    print "[L͓eẽobNAbv]<FORM><TEXTAREA NAME=\"repost\" ROWS=20 COLS=80>\n";
    print "$FORM{'value'}\n";
    print "</TEXTAREA></FORM>\n";
  }
  print <<"_HTML_";
</BODY>
</HTML>
_HTML_
  exit;
}

#--- ʃG[ --------------------------------#
sub errorz {
  print <<"_HTML_";
Content-type: text/html

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=x-sjis">
<TITLE>BBS POST Error</TITLE>
</HEAD>
<body bgcolor="#ffffff" text="#000000" link="blue">
<!--VirtualAvenueBanner-->
<p>
<table border=0 width=100% cellpadding=2 cellspacing=3>
<tr><td bgcolor=#e54500><font color=#ffffff size=+3>
BBS POST Error
</font></td></tr></table>
<p>
<H1>$_[0]</H1>
<H3>$_[1]</H3>
uEU[߂]{^đỎʂɈړĉB<P>
_HTML_
  if($FORM{'value'} ne ''){
    $FORM{'value'} =~ s/<br>//g; 
    print "[L͓eẽobNAbv]<FORM><TEXTAREA NAME=\"repost\" ROWS=20 COLS=80>\n";
    print "$FORM{'value'}\n";
    print "</TEXTAREA></FORM>\n";
  }
  print <<"_HTML_";
</BODY>
</HTML>
_HTML_
  exit;
}

#--- FhcpÍi폜pXÍj --------------------------------#
sub mkSalt {
  local($t, $sum, @salt ) = @_;
  @salt = split(//, './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
  if ($t) {
    $sum = unpack("%12C*", $t);
  } else { # nh̏ꍇ
    return 'No';
  }
  $salt[$sum % 64] . $salt[int($sum/64) % 64];
}

#--- RhoAhX擾 --------------------------------#
sub getip {
  $sp_host   = $ENV{'HTTP_SP_HOST'};
  $client_ip = $ENV{'HTTP_CLIENT_IP'};
  $http_from = $ENV{'HTTP_FROM'};

  $trueip = $sp_host   if ($sp_host ne "");
  $trueip = $via       if ($via =~ s/.*\s(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.$4/);
  if( $client_ip=~ s/^(\d+)\.(\d+)\.(\d+)\.(\d+)(\D*).*/$1.$2.$3.$4/ ){
    $trueip = $client_ip;
  }elsif( $client_ip=~ s/^([\dA-F]{2})([\dA-F]{2})([\dA-F]{2})([\dA-F]{2})/$1$2$3$4/i){
    $client_ip = join('.', hex($1), hex($2), hex($3), hex($4)); 
    $trueip = $client_ip;
  }
  $trueip = $for       if ($for =~ s/.*\s(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.$4/);
  $trueip = $xfor      if ($xfor =~ s/^(\d+)\.(\d+)\.(\d+)\.(\d+)(\D*).*/$1.$2.$3.$4/);
  $trueip = $http_from if ($http_from ne "");
  return $trueip;
}

#
# pX[hݒʂɃWv
#
sub jump_bbs {
  print "Content-type: text/html\n";
  print "Location: $bbsscript?def=$changedef&page=$page\n\n";
  exit;
}

# A GET A^bN΍
# 30 ȓɂx̃ANZX𒴂
# XNvgNłȂ悤ɂBby gH
sub filter {
  open(DB, "$tstmp" ) || &error('0');
  @last_tstmp = <DB>;
  close(DB);

  $tmp_stmp = time;
  $onebyte = '1';  

  if( ( $tmp_stmp - $last_tstmp[0] ) > ( 30*60 ) ){

    # 30 o߁BJE^Zbg

    open(DB,">$counter2")|| &error('0');
    print DB $onebyte;
    close(DB);

    # L^

    open(DB,">$tstmp")|| &error('0');
    print DB $tmp_stmp;
    close(DB);
  }
  else{
    if( -e $counter2 ){ @cfstat2 = stat $counter2; }
    $number2 = ++$cfstat2[7];

    # ANZXߑ̏ꍇ
    # chmod ăXNvgNłȂ悤ɂ
    #
    if( $number2 > $access_limit ){
      chmod 0000, @script_list;
      &error('0');
    }
    open(DB,">>$counter2")|| &error('0');
    print DB $onebyte;
    close(DB);
  }
}
__END__
