Trac でチケットへのスパムコメントを削除する
自分のプロジェクト管理用 trac に SpamFilterを導入してどうにかスパムチケットとお別れしたとおもったのもつかの間、 やつらは別のところから侵入してきた。
スパムチケット
たまに侵入してくるスパムチケットはまだいい。 こんな感じで Timeline をチェックすればスパムっぽいチケットが切られているのがすぐにわかるので、
Trac [/Users/Shared/Services/rana]> ticket remove 38
Ticket 38 and all associated data removed.
Trac [/Users/Shared/Services/rana]> ticket remove 39
Ticket 39 and all associated data removed.
trac-admin から該当のチケットを削除してやれば良い。
チケットへのスパムコメント
つーか、このエントリ書いてる間にも投稿されてた。腹立たしい!
あまりにも腹立たしくてスクリーンショット撮るのも忘れてしまったが、 最近はすでに切られているチケットへのコメントとしてスパムがポストされる。
これの何が腹立たしいって、実際に該当するチケットを見ないとスパムコメントが投稿されてるかわからないってところだ。
trac-admin からはチケットへのコメントを削除する手段が用意されていないので(0.10.x)、 データベースから直接、該当のスパムコメントを削除する。
[yuanying@Kohrin] ~
$ sudo sqlite3 /path/to/trac/db/trac.db
使ってるデータベースはデフォルトなので、sqliteを起動し、
sqlite> .tables
attachment node_change session_attribute ticket_change
auth_cookie permission spamfilter_bayes ticket_custom
component report spamfilter_log version
enum revision system wiki
milestone session ticket
sqlite>
テーブルを確認。
チケットへのコメントは ticket_change で管理してるっぽい。
sqlite> .schema ticket_change
CREATE TABLE ticket_change (
ticket integer,
time integer,
author text,
field text,
oldvalue text,
newvalue text,
UNIQUE (ticket,time,field)
);
CREATE INDEX ticket_change_ticket_idx ON ticket_change (ticket);
CREATE INDEX ticket_change_time_idx ON ticket_change (time);
sqlite>
スキーマ確認。
sqlite> delete from ticket_change where ticket=6 and time=1207615482;
該当のコメントを削除してやる。