#!/usr/local/bin/perl
#===============================================
# wwwchat.cgi Version 2.61
# Copyright (C) 1997, 2000 とほほ
# http://wakusei.cplaza.ne.jp/twn/wwwchat.htm
# フリーソフト・改造/流用/再配布可能・確認メール不要
#===============================================
#
# 1997.05.18 First Version
# 1997.06.08 Max lines -> Max messages.
# 1997.06.08 Add E-Mail Address field.
# 1997.06.15 Change E-Mail field to URL field.
# 1997.07.06 Remove old lock directory
# 1997.11.09 HTMLタグを禁止できるようにした
# 1998.04.12 x-sjisを指定しないようにした
# 1998.05.24 & や " の文字化けを改善
# 1998.12.20 Ver2.51 SIGPIPE対応
# 1999.01.24 Ver2.52 リンクを_topで開くように修正
# 1999.02.07 Ver2.53 2000年対応(年を4桁で表示)
# 1999.05.23 Ver2.54 クライアントがJISを送るときの文字化けに対処
# 1999.06.06 Ver2.55 ロックファイルのパーミッションを755から0755に修正
# 1999.10.03 Ver2.56 誤ってロックファイルを消してしまうことがあるバグを修正
# 2000.03.19 Ver2.60 HTMLタグの使用を禁止
# 2000.03.20 Ver2.61 シンタックスチェックのワーニングを除去
#
#
# Set timezone
#
$ENV{'TZ'} = "JST-9";
#
# Maximum number of messages
#
$max_msgs = 100;
#
# Allow HTML tags
#
$allow_tags = 0;
#
# Weekday
#
@wdays = ( "日", "月", "火", "水", "木", "金", "土" );
#
# Japanese KANJI code
#
if (-f "jcode.pl") {
$jflag = 1;
$kcode = "sjis";
require "jcode.pl";
}
#
# Read variables
#
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
@a = split(/&/, $query_string);
foreach $x (@a) {
($name, $value) = split(/=/, $x);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
if ($jflag) {
&jcode'convert(*value, "euc");
}
if ($allow_tags) {
$value =~ s//-->/g;
} else {
$value =~ s/&/&/g;
$value =~ s/"/"/g;
$value =~ s/</g;
$value =~ s/>/>/g;
}
if ($jflag) {
&jcode'convert(*value, $kcode);
}
$FORM{$name} = $value;
}
}
#
# File lock
#
foreach $i ( 1, 2, 3, 4, 5, 6 ) {
if (mkdir("lock/wwwchat.loc", 0755)) {
last;
} elsif ($i == 1) {
($mtime) = (stat("lock/wwwchat.loc"))[9];
if ($mtime < time() - 600) {
rmdir("lock/wwwchat.loc");
}
} elsif ($i < 6) {
sleep(2);
} else {
exit(1);
}
}
#
# Remove lockfile when terminated by signal
#
sub sigexit { rmdir("lock/wwwchat.loc"); exit(0); }
$SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "sigexit";
#
# Write to date file
#
if ($FORM{'MESSAGE'} ne "") {
#
# Get date and time
#
($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime(time);
$date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",
$year + 1900, $mon + 1, $mday, $wdays[$wday],
$hour, $min, $sec);
#
# Write current message.
#
$FORM{'MESSAGE'} =~ s/\r*$//g;
$FORM{'MESSAGE'} =~ s/\r/
/g;
open(OUT, "> wwwchat.tmp");
if ($FORM{'URL'} eq "") {
print OUT "__XXX__ $date $FORM{'FROM'}\n";
} elsif ($FORM{'URL'} =~ /^http:/) {
print OUT "__XXX__ $date $FORM{'FROM'}\n";
} else {
print OUT "__XXX__ $date $FORM{'FROM'}\n";
}
print OUT "$FORM{'MESSAGE'}\n";
# print OUT "
\n";
# print OUT "$FORM{'FROM'} $date\n";
# print OUT " $FORM{'MESSAGE'}\n"; # print OUT " |
$y $x[1] $x[2] \n"; } else { print; } } close(IN); print " |