#! /usr/local/bin/perl
#
#
#1997.9.14製作
#すくりぷと ばい ゆいちゃっと
# Since 1996
#
$|=1;
&init;&jikan;
&readlog;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
($id, $dmy) = split(/\t/, @lines[0]);
$id=sprintf("%03d",++$id);
&decode;
&write if($subject && $comment);
}
&getdecode;
&html;
&ended();
exit;
sub init{ #初期設定など
$url = 'http://www.big.or.jp/~vampire/Junk/upload.cgi';#正しく設定しないと投稿できません。
$log_file = 'upload.dat';#パーミッション666 or 606
$title = 'ゆいのーと';
$body='
';
$max = 50;#ログの最大行数
$host = $ENV{'REMOTE_HOST'};if($host=~/bmc/){$host="ppp753.master.ad.jp";}
$metacode = '';#SJIS認識させる
####アクセス制限を使用するなら、#を消す。
#$kill_file = './kill.dat';#アクセス制限用
#open(DB,"$kill_file") || die "Cannot Open Log File $kill_file: $!";
# @lines2 = ; close(DB);
#foreach $line (@lines2) {
# next if(length($line)<4); chop $line;
# if( $host=~/$line/ ){ print "Status: 204\n\n"; exit; }
#}
####アクセス制限ここまで
#ロックファイルを使用するなら、#を消す。
#$lockfile = './lock/lock-file.lock';
#$retry = 5;
#while (!symlink(".", $lockfile)) {
#if (--$retry <= 0) { print "Status: 204\n\n"; unlink($lockfile); exit; }
#sleep(1);
#}
#ロックファイルここまで
}#init END
sub ended{ #unlinkとexitを行うためだけのもの。
# unlink($lockfile);#ロックファイルを使用するなら、#を消す。
print "Content-type: text/plain\n\n $_[0] \n" if($_[0]);#この行は削除可です。
exit;
}#ended END
sub write{
$subject=~s/</;$comment=~s/</;#タグ禁止
$subject=~s/\t/ /;$comment=~s/\t/ /;
$subject='???' unless($subject);$comment='?????' unless($comment);
$value="$id\t$type\t$subject\t$comment\t$host\t$ENV{'HTTP_USER_AGENT'}\t$date\t\n";
&writelog;
}
sub writelog{ #$valueを@linesに加えたのち、書き込む
if(@lines > $max-1){#最大を超えたら削除します。
$del= pop(@lines);
($id, $type) = split(/\t/, $del);
unlink("./image/$id.$type");
}
unshift( @lines,$value);
open(DB,">$log_file") || &ended('$log_file write error');
eval 'flock(DB,2);';
seek(DB,0,0); print DB @lines;
eval 'flock(DB,8);';
close(DB);
}#writelog END
sub readlog{ #配列@linesにログを読み込む
open(DB,"$log_file") || &ended('$log_file open error');
seek(DB,0,0); @lines = ; close(DB);
}#readlog END
sub decode{
return if($ENV{'CONTENT_LENGTH'} > 1050000);#送れるファイルのサイズの制限をします。100kくらいまで。
return unless($ENV{'HTTP_REFERER'} =~/$url/);
while(){
last if($_=~/^\r\n/);
$bound = $_ if($_=~/^--/);
$type = 'gif' if($_=~/^Content-Type:.*gif/);
$type = 'jpg' if($_=~/^Content-Type:.*jpeg/);
$type = 'txt' if($_=~/^Content-Type:.*text/);
}
$bound=~s/\r\n//;
$type = 'dat' if($type eq '');
open(DB,">./image/$id.$type") || &ended('image dir open error');#imageディレクトリを777で設置します。
while(){
last if($_=~/^$bound/);
print DB $_;
}
close (DB);
while(){#手抜きデコード1
last if($_=~/^$bound/);
next if($_=~/^\r\n/);
next if($_=~/^Content/);
$subject .=$_; $subject=~s/\r\n//;
}
while(){#手抜きデコード2
last if($_=~/^$bound/);
next if($_=~/^\r\n/);
next if($_=~/^Content/);
$comment .=$_; $comment=~s/\r\n//;
}
}#decode END
sub html{
print "Content-type: text/html\n\n";
print <<"_HTML_";
$title$metacode
$body
Netscapeであなたのパ\ソ\コ\ンにある適当なGIF/JPEGファイルを送ってみて下さいね。
テキストファイルも送れるかもしれません。(98/1/5)
Netscapeでは、Browseボタンでファイルを送るファイルを選択できます。
転送した画像は下記のサイトで観ることができます。
注意:あまりに大きな画像ファイルは転送できません。
(Netscape2.02や、IEでの作動を確認できていません。)
機\能\評価のために、ブラウザ名ホスト名日付も表\示させています。
Page:
_HTML_
$total = @lines;
$count = int(($total-1)/$lmax);
for($i=0;$i<=$count;$i++){
if($i eq $page){ print "[$i] \n"; }else{
print "[$i] \n";
}
}#for
print "
\n";
(@lines < $lmax) || (@lines = @lines[$page2 .. $page2+$lmax-1]);
foreach(@lines){
($id, $type,$subject,$comment,$host,$brauza,$date) = split(/\t/, $_);
next unless($id);
print qq![$subject]:$comment
($host $date $brauza)
\n!;
}
print "
\n";
}#html END
sub jikan{#$dateに時刻を代入します。
$ENV{'TZ'} = 'JST-9';$times = time;
($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime($times);
$min = "0$min" if ($min < 10); $month++;
$youbi = ('日','月','火','水','木','金','土') [$wday];
$date = "$month/$mday($youbi)$hour:$min";
}#jikan END
sub getdecode{ #一般的なデコード&変数への代入
$buffer = $ENV{'QUERY_STRING'};
@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;
$FORM{$name} = $value;
}
$page = $FORM{'page'};
$page=0 unless($page);
$lmax = $FORM{'lm'};
$lmax=10 unless($lmax);#一ページにどれだけ表示するか?
$page2 = $page*$lmax;
}#getdecode END
__END__