hns-tb.cgiに追加機能を書いた後で検索したら気が付いたけど、
yarさん_
がすでに作っていたよ……
しょうがないからTrackBack spam対策と、$emailなどをconfig.phから引っ張るように改造したもののdiffを置いておこう。
--- hns-tb_cgi.txt Thu Feb 10 17:12:57 2005
+++ hns-tb.cgi Tue Apr 19 06:15:11 2005
@@ -1,4 +1,4 @@
-#! /usr/bin/perl
+#! /usr/local/bin/perl
# $Id: d20050419.hnf,v 1.16 2005/04/21 13:35:09 moo9500 Exp $
use strict;
use lib qw(lib);
@@ -7,11 +7,32 @@
use Jcode;
use SimpleDB::Scalar;
use vars qw($DataDir);
+use HNS::System;
require './config.ph';
$DataDir ||= "$HNS::System::DiaryDir/trackback/";
+sub sendmail($)
+{
+ my $msg = shift;
+ my $email = $HNS::System::UserMail;
+ my $tomail = $HNS::System::MesMail;
+ my $sendmail = '/usr/local/bin/sendmail -t -f';
+
+ my $mail = "";
+ $mail .= "To: $tomail\n";
+ $mail .= "From: $email\n";
+ $mail .= "Content-Type: text/plain; charset=iso-2022-jp\n";
+ $mail .= $msg;
+
+ Jcode::convert( \$mail, "jis");
+ open(OUT, "| $sendmail $tomail");
+ print OUT $mail;
+ close(OUT);
+ exit;
+}
+
sub html_convert
{
my ($str, $body_mode) = @_;
@@ -82,7 +103,7 @@
my ($id) = ($ENV{REQUEST_URI} =~ m!cgi/(\d{9}\d*)!);
-#error 'invalid id' unless($id =~ /\d+/);
+error 'invalid id' unless($id =~ /\d+/);
my $cgi = new CGI;
@@ -92,17 +113,6 @@
exit;
}
-$id = $cgi->param('tb_id') unless($id =~ /\d+/);
-error 'invalid id' unless($id =~ /\d+/);
-
-#my $id = "";
-#
-#my @params = $cgi->param();
-#foreach my $param (@params) {
-# $id = sprintf("%s%s\t%s\n", $id,$param,$cgi->param($param));
-#}
-
-
my $title = jcode($cgi->param('title'))->euc;
my $excerpt = jcode($cgi->param('excerpt'))->euc;
my $url = jcode($cgi->param('url'))->euc;
@@ -117,6 +127,11 @@
# URL が空だったら error;
error "URL is empty" unless($url);
+#block trackback spam
+if ($url =~ /casino/){
+error 'You are not allowed to send TrackBack pings';
+}
+
# 要約は 255 文字程度で折る
$excerpt = truncate_body($excerpt, 255);
@@ -130,8 +145,6 @@
print F "\n";
close F;
-system("chmod 666 $DataDir/$id");
-
print "Content-Type: text/xml\r\n\r\n";
print <<EOF;
<?xml version="1.0" encoding="iso-8859-1"?>
@@ -146,24 +159,14 @@
$last_modified = time;
untie $last_modified;
-my $mailto = 'ore@yar-3.net';
-my $sendmail = '/usr/lib/sendmail';
+ my $mail = "";
+ $mail .= "Subject: [hns] trackback $orig_blog_name $id\n";
+ $mail .= "\n";
+ $mail .= "title: $orig_title\n$orig_blog_name\n";
+ $mail .= "$orig_excerpt\n $orig_url\n";
+ $mail .= "-- \n";
+ $mail .= "trackback sender by $HNS::System::Author\n\n";
+ $mail .= "from $ENV{'REMOTE_HOST'} $ENV{'REMOTE_ADDR'}\n";
+ $mail .= "UA $ENV{'HTTP_USER_AGENT'} \n";
- my $msg = "";
- $msg .= "To: $mailto\n";
- $msg .= "From: $mailto\n";
- $msg .= "Content-Type: text/plain; charset=iso-2022-jp\n";
- $msg .= "Subject: trackback $orig_blog_name $id\n";
- $msg .= "\n";
- $msg .= "title: $orig_title\n$orig_blog_name\n";
- $msg .= "$orig_excerpt\n $orig_url\n";
- $msg .= "-- \n";
- $msg .= "trackback sender by yar-3\n\n";
- $msg .= "from $ENV{'REMOTE_HOST'} $ENV{'REMOTE_ADDR'}\n";
- $msg .= "UA $ENV{'HTTP_USER_AGENT'} \n";
-
-
- Jcode::convert( \$msg, "jis");
- open(OUT, "| $sendmail $mailto");
- print OUT $msg;
- close(OUT);
+sendmail($mail);
yarさんの汎用TrackBack送信フォームをhns専用にしてしまう:
tb-send.cgi_
をどうせならHNSからblog名とかを引っ張ってくる感じに。
--- tb-send.txt Wed Oct 27 08:01:11 2004
+++ tb.cgi Tue Apr 19 05:23:42 2005
@@ -1,10 +1,13 @@
-#!/usr/bin/perl
+#!/usr/local/bin/perl
# tb_send - Send Trackback Ping
use strict;
+use lib qw(lib);
use CGI;
use HTTP::Request::Common;
use LWP::UserAgent;
+use HNS::System;
+require './config.ph';
my $query = CGI->new();
$query->charset('utf-8');
@@ -35,7 +38,7 @@
<form>
Ping URL: <input type="text" name="ping_url" size="30" /><br />
Title: <input type="text" name="title" size="30" /><br />
-Blogname: <input type="text" name="blog_name" size="30" value="dobu nikki"/><br />
+Blogname: <input type="text" name="blog_name" size="30" value="$HNS::System::Title"/><br />
Blog URL: <input type="text" name="url" size="30" /><br />
Excerpt: <input type="text" name="excerpt" size="50" /><br />
<input type="submit" value="Send" />
.htaccessとかに
<Files "tb.cgi">
AuthType Basic
AuthName "Trackback Form"
AuthUserFile /home/ほげ/.htpasswd-tb
AuthGroupFile /dev/null
require valid-user
</Files>
などと書いておいてhtpasswdでBASIC認証しておくのが良いかもしれない。
まぁ手動TrackBackなので素人にはオススメできないのは確かだな……:
cgiを呼んだら$HNS::System::DiaryDirの今日の日付の*.hnfを見て、LNEWとかLINKのurl先にNet::TrackbackとかでアクセスしてTrackback Auto Discoveryをして。discover($url)で配列にぶちこんだら本文を$excerptに入れたFormを表示するって感じか。
[ コメントする ]