#! /usr/local/bin/perl
;# Simple MEMO v1.4(フリーソフト)
;#
;# (c)rescue.ne.jp
;# Scripts Found at: http://www.rescue.ne.jp/
# History
# -------
# 1997年 8月16日 v1.0初版公開
# 1998年 2月 5日 v1.1公開 $1$暗号仕様対応
# 1998年 3月15日 v1.2 暗号処理のバグ修正(管理者削除できないバグを修復)
# 1999年 2月20日 v1.3 タグ系のセキュリティ強化
# 1999年 11月26日 v1.4 クッキー処理の2000年対応
#-------------------------------------------------------------------#
# 画面中に表示するタイトル名(タグが書けます)
$title = '
;
close(DB);
$password = shift(@lines);
chop($password) if $password =~ /\n$/;
($header,$password) = split(/:/,$password);
if ($FORM{'action'} eq 'password') { &encode; }
if ($FORM{'admin'} eq 'change') { &password; }
if ($header ne 'crypt_password') { $first = 1; &password; }
}
∈
if ($password =~ /^\$1\$/) { $salt = 3; } else { $salt = 0; }
if ($FORM{'action'} eq 'remove' && crypt($FORM{'pwd'}, substr($password,$salt,2)) eq $password) { &remove2; ∈ &html; }
elsif (crypt($FORM{'pwd'}, substr($password,$salt,2)) eq $password) { &remove1; }
elsif ($FORM{'action'} eq 'regist') { ®ist; }
else { &html; }
sub html {
print "Content-type: text/html\n\n";
print "$title2\n\n";
print "$body\n";
print "$title\n";
print "$text1\n";
print "$text2\n";
print "$text3
\n";
if ($FORM{'action'} ne 'regist') { &input1; }
&input2;
print "
\n";
if ($FORM{'action'} ne 'regist') {
if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; }
}
$accesses = @lines;
if ($accesses == 0) { print "メモはありません. | \n"; }
$accesses--;
$page_end = $page + $def - 1;
if ($page_end > $accesses) { $page_end = $accesses; }
foreach ($page .. $page_end) {
($number,$date,$name,$email,$value,$url) = split(/\,/,$lines[$_]);
chop($url);
$value =~ s/\0/\,/g;
print "[$date] ";
if ($name =~ /(.*)/) { $name = $1; $dns = $2; }
if ($email ne '') { print "$name > "; }
else { print "$name > "; }
print "$value";
if ($url ne '') { print " ●\n"; }
print "\n";
print "
\n";
}
$page_next = $page_end + 1;
$i = $page + 1; $j = $page_end + 1;
print "\n";
if ($accesses >= 0) {
if ($page_end ne $accesses) {
print "新着順 $i \- $j | \n";
print "\n";
}
else { print "新着順 $i \-> 最後 | \n"; }
}
print "最大記録件数 $max | \n";
print "\n";
print "
\n\n";
print "
\n\n\n\n\n
\n";
print "\n";
print "管理者用コマンドエリア |
\n";
print "
\n\n";
# このスクリプトの著作権表示(かならず表示してください)
print "
\n";
print '' . "\n";
exit;
}
sub regist {
$FORM{'name'} =~ s/\;//g; $FORM{'name'} =~ s/\://g; $FORM{'name'} =~ s/\=//g;
$FORM{'email'} =~ s/\;//g; $FORM{'email'} =~ s/\://g; $FORM{'email'} =~ s/\=//g;
$FORM{'value'} =~ s/\,/\0/g;
$FORM{'name'} =~ s/\,//g;
$FORM{'email'} =~ s/\,//g;
$FORM{'url'} =~ s/\,//g;
$FORM{'name'} =~ s//g; $FORM{'name'} =~ s/>//g;
$FORM{'email'} =~ s//g; $FORM{'email'} =~ s/>//g;
$FORM{'url'} =~ s//g; $FORM{'url'} =~ s/>//g;
$len = length($FORM{'name'}); $m = '20'; $n = '名前';
if ($len > $m) { &error(len); }
$len = $len_value = length($FORM{'value'}); $m = $v_max; $n = 'メモ';
if ($len > $m) { &error(len); }
if ($FORM{'name'} eq "") { &error(1); }
if ($FORM{'value'} eq "") { &error(2); }
if ($FORM{'email'} ne "") { if (!($FORM{'email'} =~ /(.*)\@(.*)\.(.*)/)) { &error(3); }}
if ($FORM{'url'} eq "" || $FORM{'url'} eq "http://") { $FORM{'url'} = ''; }
($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60);# 期限を30日後に設定(GMT)
$y0="Sunday"; $y1="Monday"; $y2="Tuesday"; $y3="Wednesday"; $y4="Thursday"; $y5="Friday"; $y6="Saturday";
$m0="Jan"; $m1="Feb"; $m2="Mar"; $m3="Apr"; $m4="May"; $m5="Jun"; $m6="Jul"; $m7="Aug"; $m8="Sep"; $m9="Oct"; $m10="Nov"; $m11="Dec";
@youbi = ($y0,$y1,$y2,$y3,$y4,$y5,$y6);
@monthg = ($m0,$m1,$m2,$m3,$m4,$m5,$m6,$m7,$m8,$m9,$m10,$m11);
$date_gmt = sprintf("%s\, %02d\-%s\-%04d %02d:%02d:%02d GMT",$youbi[$wdayg],$mdayg,$monthg[$mong],$yearg +1900,$hourg,$ming,$secg);
$cook="name\:$FORM{'name'}\,email\:$FORM{'email'}";
print "Set-Cookie: $cookie_name=$cook; expires=$date_gmt\n";
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }
if (!open(DB,"$file")) { &error(0); }
@lines = ; $password = shift(@lines);
close(DB);
$i = 0;
foreach $line (@lines) {
$i++;
if ($i == $max) { last; }
push(@new,$line);
}
$value = "$num\,$date_now\,$FORM{'name'}\\,$FORM{'email'}\,$FORM{'value'}\,$FORM{'url'}\n";
unshift(@new,$value);
if (!open(DB,">$file")) { &error(0); }
print DB $password;
print DB @new;
close(DB);
$COOKIE{'name'} = $FORM{'name'};
$COOKIE{'email'} = $FORM{'email'};
∈ &html;
}
sub error {
$error = $_[0];
if ($error eq "0") { $error_msg = '記録ファイルの入出力にエラーが発生しました.'; }
elsif ($error eq "1") { $error_msg = '投稿者名が記入されていません.'; }
elsif ($error eq "2") { $error_msg = '内容が書かれていません.'; }
elsif ($error eq "3") { $error_msg = 'メールアドレスが正しく入力されていません.'; }
elsif ($error eq "len") { $error_msg = "$nの文字数制限は半角$m文字以内(全角はその半分)です.
半角で計測(特殊文字を含む)すると$len文字使用しています."; }
else { $error_msg = '意味不明なエラー.'; }
print "Content-type: text/html\n\n";
print "$title2\n";
print "$body\n";
print "$error_msg
\n";
print "ブラウザの[戻る]ボタンを押して前の画面に移動してください.\n";
print '' . "\n";
exit;
}
sub remove1 {
if (!open(DB,"$file")) { &error(0); }
@lines = ; $password = shift(@lines);
close(DB);
print "Content-type: text/html\n\n";
print "$title2\n";
print "$body\n";
print "削除モード
\n";
print "
' . "\n";
print "[メモ一覧へ]
\n";
print '