�V���ɐ���p��̧��(NGnozomi.dat:�߰Я��݂�600�ł����Ǝv���܂�)��p�ӂ��Ă��������B
�ȉ���bbs.cgi�ɒlj����镔���ł��B

#  �ݒ� �̈�ԍŌ�ɒlj�

# NG���[�h�ݒ�
#   0 : ����
#   1 : �L��
$ngwordon = 1;
# NG���[�h
@ngword = (
'Very good site!',
'good site!',
'site!',
'I like it!',
'A href',
'�폜�˗�',
'���傗',
'����',
'����',
'�b��',
'���b',
'��',
'http://www.douteikaimasu.com/',

);

# NG���t�@��
@ngreferer = (
'2ch',
);
# NGURL
@ngurl = (
'2ch',
'http://www.douteikaimasu.com/',
);
# NG���[�h�g�p���̏���(1�Ŏw��A����1�ɂ��Ă��ォ��D��I�ɓK��)
$shori1 = 1;	#�g�p���̓��e���s�‚ƂȂ邾��
$shori2 = 0;	#�{���̂݁A���e�s�‚̃A�N�Z�X����
$shori3 = 0;	#�{�����e���ɕs�‚̃A�N�Z�X����(�e��)

# h�����Ȃ���ݺېݒ�
#   0 : ����
#   1 : �L��(�����I��h��t����)
#   2 : �L��(NG���[�h�ɂ���BNG���[�h�̐ݒ��L���ɂ��Ȃ��Ɩ���)
$hnukuna = 2;

# �A�N�Z�X����p�t�@�C����
$access_l = './NGnozomi.dat';

# �e�����URL(�A�N�Z�X����p)
$hajikiurl = 'http://www.google.co.jp/webhp';

#  ���b�Z�[�W�`�F�b�N��
#		&chkerror ( '�t�H�[���f�[�^�̈ꕔ�Ɍ���������܂��B������x��蒼���ĉ������B', 33 );
#	}�@�̂��Ƃɒlj�

	# NG���[�h�`�F�b�N
	if ($ngwordon) {
		if ( $hnukuna == 2 ) { push ( @ngword, '(?<!h)ttps?://' ); }
		$i = 0;
		$j = 0;
		foreach (@ngword) {
			chomp($_);
			$i++ if ($FORM{'v'} =~ /$_/i);
			$i++ if ($FORM{'l'} =~ /$_/i);
		}
		&ng('ngword') if ($i);
		foreach (@ngurl) {
			$j++ if ($FORM{'l'} =~ /$_/i);
		}
		&ng('ngurl') if ($j);
	}

	
	# h�����Ȃ���ݺ�
	if ( $hnukuna == 1 ) {
		$FORM{'v'} =~ s#((?<!h)ttps?://)#(h�����Ȃ���ݺ�)h$1#ig;
		if ( $FORM{'l'} ) { $FORM{'l'} =~ s#((?<!h)ttps?://)#(h�����Ȃ���ݺ�)h$1#ig; }
	}

#  ��ʕ\����#  �l�p�ݒ蔽�f�̊Ԃɒlj�

###############################################################################
#  �A�N�Z�X������s
###############################################################################

sub accesschk {
	
	my ( @acldata, $acldel, $aflag, $tphost, $tagent, $way, $cu, $period, $adate, $aclimit );
	
	if($access_l){
		open ( ACCS, $access_l ) || &prterror ( '�t�@�C���̓ǂݍ��݂Ɏ��s���܂����B' );
		eval 'flock ( ACCS, 1 )';
		seek ( UCNT, 0, 0 );
		@acldata = <ACCS>;
		eval 'flock ( ACCS, 8 )';
		close ( ACCS );
		
		$acldel = 0;
		for ( $i = 0 ; $i < @acldata ; $i++ ) {
			$aflag = 0;
			( $tphost, $tagent, $way, $cu, $period, $adate )
			  = split ( /\,/, $acldata[$i] );
			$tphost =~ s/\0/\,/g;
			$tagent =~ s/\0/\,/g;
			$cu =~ s/\0/\,/g;
			$adate =~ s/\n$//;
			if($period == 1){$aclimit = 86400;}
			if($period == 7){$aclimit = 604800;}
			# �����؂�̏��O
			if ( ( $adate + $aclimit ) < $nowtime && $period ne 'forever' ) {
				$acldata[$i] = '';
				$acldel = 1;
			# �t���O�`�F�b�N
			} elsif ( $host =~ /$tphost/i || $tphost eq 'all' ) {
				if ( $agent =~ /$tagent/i || $tagent eq 'all' ) {
					$aflag = 1;
				}
			}		
			# �t���O���s
			if($aflag == 1){
				if($way == 0 && $FORM{'v'} && $FORM{'v'} ne ''){
					$FORM{'v'} = '';
				}elsif($way == 1){
					print "Location: $hajikiurl\n\n";
					exit;
				}
			}
		}
		
		if($acldel==1){
			open ( ACCS, ">>$access_l" ) || &prterror ( '�t�@�C���̏������݂Ɏ��s���܂����B' );
			eval 'flock ( ACCS, 2 )';
			truncate ( ACCS, 0 );
			seek ( ACCS, 0, 0 );
			print ACCS @cntdata;
			close ( ACCS );
		}
	}
}


###############################################################################
#  NG����
###############################################################################

sub ng {
	
	my ( $ngtype ) = $_[0];
	if($ngtype eq 'ngreferer'){
		$ngmessage = '�ǂ����痈�܂������R(�L��`)�m';
	}elsif($ngtype eq 'ngword'){	
		$ngmessage = '���e���e��NG���[�h������R(�L��`)�m';
	}elsif($ngtype eq 'ngurl'){
		$ngmessage = '�ς�URL�͒j����ł���R(�L��`)�m';
	}
	if($shori1){
		$ngmessage2 = '�ȉ��̊‹��ϐ��͕ۑ����ĂȂ���(�M�[�L)hehehe';
	}elsif($shori2){
		$ngmessage2 = '�ȉ��̊‹��ϐ��̓�REMOTE_HOST���ۑ����ꂽ(�M�[�L)�������e�͂ł��Ȃ���hehehe';
	}elsif($shori3){
		$ngmessage2 = '�ȉ��̊‹��ϐ��̓�REMOTE_HOST���ۑ����ꂽ(�M�[�L)�����{������ł��Ȃ���hehehe';
	}
	$addr = $ENV{'REMOTE_ADDR'};
	$host = $ENV{'REMOTE_HOST'};
	if ( $addr eq $host || !$host ) {
		$host = gethostbyaddr ( pack ( 'C4', split ( /\./, $addr ) ), 2 ) || $addr;
	}
	$ENV{'REMOTE_HOST'} = $host;
	if($shori2){
		$tphost = quotemeta($ENV{'REMOTE_HOST'});
		open ( ACADD, ">>$access_l" ) || &prterror ( '�t�@�C���ǂݍ��݂Ɏ��s���܂���' );
		eval 'flock ( ACADD, 2 )';
		$| = 1;
		seek ( ACADD, 0, 2 );
		print ACADD "$tphost\,all\,0\,\,7\,$nowtime\n";
		eval 'flock ( ACADD, 8 )';
		close ( ACADD );
	}elsif($shori3){
		$tphost = quotemeta($ENV{'REMOTE_HOST'});
		open ( ACADD, ">>$access_l" ) || &prterror ( '�t�@�C���ǂݍ��݂Ɏ��s���܂���' );
		eval 'flock ( ACADD, 2 )';
		$| = 1;
		seek ( ACADD, 0, 2 );
		print ACADD "$tphost\,all\,1\,\,7\,$nowtime\n";
		eval 'flock ( ACADD, 8 )';
		close ( ACADD );
	}
	$proxyflg = 0;
	$anonymous = 0;
	
	if ( $ENV{'HTTP_CACHE_CONTROL'} )			{ $proxyflg = 1; }
	if ( $ENV{'HTTP_CACHE_INFO'} )				{ $proxyflg += 2; }
	if ( $ENV{'HTTP_CLIENT_IP'} )				{ $proxyflg += 4; }
	if ( $ENV{'HTTP_FORWARDED'} )				{ $proxyflg += 8; }
	if ( $ENV{'HTTP_FROM'} )					{ $proxyflg += 16; }
	if ( $ENV{'HTTP_PROXY_AUTHORIZATION'} )		{ $proxyflg += 32; }
	if ( $ENV{'HTTP_PROXY_CONNECTION'} )		{ $proxyflg += 64; }
	if ( $ENV{'HTTP_SP_HOST'} )					{ $proxyflg += 128; }
	if ( $ENV{'HTTP_VIA'} )						{ $proxyflg += 256; }
	if ( $ENV{'HTTP_X_FORWARDED_FOR'} )			{ $proxyflg += 512; }
	if ( $ENV{'HTTP_X_LOCKING'} )				{ $proxyflg += 1024; }
	if ( $agent =~ /cache|delegate|gateway|httpd|proxy|squid|www|via/i ) {
		$proxyflg += 2048;
	}
	if ( $host =~ /cache|^dns|dummy|^ns|firewall|gate|keep|mail|^news|pop|proxy|smtp|w3|^web|www/i ) {
		$proxyflg += 4096;
	}
	if ( $host eq $addr ) {
		$proxyflg += 8192;
	}
	$realaddr = '';
	$realhost = '';
	if ( $proxyflg > 0 ) {
		if ( $ENV{'HTTP_X_FORWARDED_FOR'} =~
		  s/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/$1.$2.$3.$4/ ) {
			$realaddr = "$1.$2.$3.$4";
		} elsif ( $ENV{'HTTP_FORWARDED'} =~ 
		  s/.*\s(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.$4/ ) {
			$realaddr = "$1.$2.$3.$4";
		} elsif ( $ENV{'HTTP_VIA'} =~
		  s/.*\s(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.$4/ ) {
			$realaddr = "$1.$2.$3.$4";
		} elsif ( $ENV{'HTTP_CLIENT_IP'} =~
		  s/(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.$4/ ) {
			$realaddr = "$1.$2.$3.$4";
		} elsif ( $ENV{'HTTP_SP_HOST'} =~
		  s/(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.$4/ ) {
			$realaddr = "$1.$2.$3.$4";
		} elsif ( $ENV{'HTTP_FORWARDED'} =~ s/.*\sfor\s(.+)/$1/ ) {
			$realhost = "$1";
		} elsif ( $ENV{'HTTP_FROM'} =~ s/\-\@(.+)/$1/ ) {
			$realhost = "$1";
		}
		
		if ( !$realaddr && $realhost ) {
			$realpackaddr = gethostbyname ( $realhost );
			( $a, $b, $c, $d ) = unpack ( 'C4', $realpackaddr );
			$realaddr = "$a.$b.$c.$d";
		}
		if ( $realaddr && $realhost && $realaddr eq $realhost ) {
			$realhost = gethostbyaddr ( pack ( 'C4', split ( /\./, $realaddr ) ), 2 );
		}
		if ( $realaddr && $realhost eq '' ) {
			$realhost = gethostbyaddr ( pack ( 'C4', split ( /\./, $realaddr ) ), 2 );
		}
	}
	if($realaddr ne ''){
		$ENV{'REMOTE_ADDR'} = "$ENV{'REMOTE_ADDR'}\n<font color=\"red\"><b>realaddr = $realaddr</b></font>";
	}
	if($realhost ne ''){
		$ENV{'REMOTE_HOST'} = "$ENV{'REMOTE_HOST'}\n<font color=\"red\"><b>realhost = $realhost</b></font>";
	}
	$i=0;
	foreach ( keys %ENV ) {
		$line[$i] = $_ . ' = ' . $ENV{$_} . "\n";
		$i++;
	}
	@temp = sort @line;
	print <<EOF;
Content-type: text/html; charset=Shift_JIS

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Pragma" content="no-cache">
<LINK rel="INDEX" href="$infopage">
<TITLE>$bbstitle NG�Ɉ������������������I</TITLE>
</HEAD>
$body
<H3>$ngmessage</H3>
<pre>
$ngmessage2

@temp
</pre>
</BODY>
</HTML>
EOF
	exit;
}