Ktai Entryタグの投稿

2008-04-29
晴れ

Ktai Location は Ktai Entry と相性が悪い

ゆりこ による 18:52:54 の投稿
カテゴリー: WordPressハック
タグ: , , ,

投稿内容から位置情報を読み取る拙作プラグイン「Ktai Location」ですが、添付写真の EXIF から GPS 位置情報を読み取る機能が Ktai Entry と相性が悪いことが分かりました。

wp-mta や wp-shot では、挿入した画像の href 属性や src 属性の引用符はダブルクォート (“)だったのですが、Ktai Entry では WordPress の Attachment API を使うため、WordPress のバージョンによっては、シングルクォート (‘) を使います。しかし、Ktai Location はダブルクォートしか想定してなくて、画像を認識しないのです。

Ktai Entry で位置情報が挿入されなかったのは、Ktai Entry の作りが悪いのかと思っていたのですが、それを直しても改善しませんでした。Ktai Location の方が悪いとは……。こりゃ久々にアップデートが必要ですね。Ktai Entry と同時リリースかな。

[追記] 問題を修正した Ktai Location 0.99 のリリースおよびKtai Entry 0.71 のリリースを行いました。

2008-04-27
晴れ

Ktai Entry を実戦投入

ゆりこ による 22:35:56 の投稿
カテゴリー: WordPressハック
タグ: ,

本日、第43回 J2 関東が開かれたのですが、そのリアルタイムレポートKtai Entry 0.7.1 (リリース前バージョン) での投稿を行なってみました。まさに実戦投入です。

0.7.1 は、0.7.0 で見つかった問題点の修正の他に、ログ機能を追加しています。今回、詳細のログを取ってみたところ、ごくまれに「定期的な外部メールボックスの確認が、同時に2プロセス走る」場合があることが判明しました。

わたしは基本的には、wp-mta スタイルの「メール着信で投稿スクリプトを起動」方式ですが、うっかり(!) メールボックス確認間隔を 15 分のままにしていました。このため、定期的な確認動作が走っていました。当然、POP3 の設定は何もしていないので “Bad Gateway: The POP3 config is not valid.” となるのですが、同じ時刻にこのエラーが2行入っていたことがあったのです。

これは由々しき問題です。通常、POP3 サーバー側でロック機構が走るため、1つの POP プロセスだけ有効になって残りはエラーとなるので、そのままで安全とはいえ安全ですが、Ktai Entry 側でもロックをかけた方がいいのかもしれません。

そもそも、ログ機能のファイルロックをしていないのも少しやばいです。fopen() の “a” モードを使っているので、ロックしなくても大丈夫かと思っているのですが、やっぱりまずいでしょうか……。

[追記 2008-04-28] 今は記事を直しましたが、写真にのみ位置情報を埋め込んで投稿しても、カスタムフィールドに Lat_Long フィールドが入らず地図が出ませんでした (久地駅前〜〜二子神社前で下車)。これは、Ktai Entry が、「写真なしの本文」で新規投稿を作成し、その後、写真ありの内容で投稿本文を修正するからです。で、Ktai Location は、新規投稿を作成した時点 (publish_post フック) で位置情報を取り込んでしまうため、写真の位置情報が読めなかったようです。

解決策は、Ktia Entry が、「写真なしの本文」で wp_insert_post() を実行するときは「下書き (draft)」状態にしておき、写真つき本文に更新するとき「公開」にすることですね。これは WordPress の投稿動作としても望ましいと思います。

2008-04-25
晴れ

Ktai Entry は wp-mail.php 起動を対策ずみ

ゆりこ による 19:32:30 の投稿
カテゴリー: WordPressハック
タグ: ,

MobG 作者の norida さんが「wp-mail 問題」を提起されています。wp-mail.php は悪意ある他人にとって絶好の攻撃対象であるという内容です。しかし、拙作のメール投稿プラグイン Ktai Entry はすでに対策盛り込みずみで安全です。wp-mail.php を起動しようとしても、403 Forbidden エラーとなる仕掛けが盛り込んであります。別に wp-mail.php を削除する必要はありません。

とはいえ、WordPress 標準の wp-mail.php は作りがいまいちなのは同感ですね。デフォルトでマルチバイトおよびマルチパートなメールに対応してもいいのに。って trac にパッチ投げればいい??

[追記] Ktai Entry の開発時からこの問題には気付いていました。そのため、「wp-mail.php の起動を阻止する」仕掛けを盛り込んだわけです。実のところ、メールサーバーの設定を、WordPress の既存フィールドを使うか (wp-mail.php を起動されると危険)、独自設定フィールドを使うか (wp-mail.php 攻撃に対して安全) 悩みました。セキュリティー的には後者なのですが、「独自設定フィールドを使うと冗長になる」「wp-shot は WordPress の既存フィールドを使っていたので、その後継プラグインを目指すなら、同じ設定フィールドを使った方がよい」と考えたのです。wp-mail.php へのアクセスをエラーにする仕掛けが比較的うまく動いたので、それなりに安全だと考えています。この「仕掛け」が動かないのは、環境変数 REQUEST_URI が設定されないウェブサーバーの場合ですが、WordPress コア自体が REQUEST_URI の存在を仮定しているので、問題ないと判断しています。

2008-04-24

POP3 だと回転効かない?

ゆりこ による 13:10:20 の投稿
カテゴリー: WordPressハック
タグ: ,

きのうリリースした Ktai Entry ですが、POP3 アクセス方式 (wp-shot スタイル) だと、カテゴリー指定や画像回転がうまくいかない可能性があります。ローカルのテストでも再現してしまいました。「ROT:L」のコマンド部分の除去はできているんですが、肝心の画像が回転されていません……。

カテゴリー指定や画像回転機能は、wp-mta のコードを流用していて、メールサーバーから Ktai Entry をキックする方式 (wp-mta スタイル) だと問題なく動作しています。

POP3 で取り込んだメッセージと、STDIN から読み込んだメッセージとで、何か違いがあるのかもしれません。どちらも改行コードは CRLF で同じはずなんですが……。

[追記 2008-04-25] POP3 の場合、改行コードが CRLF なのですが、qmail から STDIN 経由で受け取ると LF のみに変換されているようです。Ktai Entry 側で CRLF → LF 変換させた方がいいかもしれません。コードを精査すると、回転コマンドの末尾に空白が入っている場合もうまく認識されないことが判明したため、CR コード駆除と同時に対策してみます。

2008-04-23
晴れ

WordPress メール投稿プラグイン Ktai Entry 0.7.0 リリース

ゆりこ による 21:17:18 の投稿
カテゴリー: WordPressハック
タグ: , , , , ,

かねてから制作していた WordPress 用メール投稿プラグインですが、ある程度形になりましたので、公開いたします。名称は「Ktai Entry」としました。「Ktai Location」「Ktai Style」に続く「Ktai プラグイン」の3作目です。(いつの間にかシリーズ化 ;-)

主な特徴は以下の通りです。

  • 投稿の反映にはウェブブラウザが不要なので、メール送信ができればキャリアおよび機種を問いません。
  • 投稿時にカテゴリー指定が可能です (複数カテゴリーに対応)。
  • 投稿時にキーワードタグの付与が可能です。
  • 画像を添付したメールに対応しています。画像を回転したり、大きい画像をサムネール化することが可能です。
  • 画像は WordPress のファイルアップロード/メディアライブラリに格納されます。
  • 環境に応じて、以下のいずれかの投稿スタイルが選べます。
    • 外部メールボックスに随時アクセス:
      投稿専用メールボックスに定期的にアクセスして新着メールがあれば取り込み、投稿処理を行う (wp-shotと同じ仕組み)。
    • メール着信時に投稿スクリプトを起動:
      メールサーバー上に投稿専用アドレスを作り、そこにメールが到着したら投稿スクリプトを起動させる (wp-mta と同じ仕組み)。
ダウンロード: ktai_entry070.tar.bz2 (42.2 KB)
バージョン 0.7.1 をリリースしました。

本プラグインは、wp-mta の後継プラグインとなります。そして、開発が止まっている wp-shot の機能も取り込んでおり、事実上 wp-shot の後継でもあります (実は、wp-shot には、わたしが貢献したコードも少し入っています ;-)。

バージョン的にはベータ版であり、まだまだ不具合が潜んでいる可能性があります。とはいえ、wp-shot もアルファ版レベルでしたから、移行してもさほど問題ないと思います。ぜひともお試しください。