いよいよ今朝の最低気温は26.1℃。昨日とは僅か1℃の差だが、格段に寝苦しく汗だくで目が覚めた。最高気温も34℃で特に風の無かった午前中は厳しかったが、なんとかエアコン運休継続中。
さて昨日から奮闘していたrNoteのメール投稿スクリプトがひと段落。遅ればせながら、これでケイタイメールによる更新が可能になる。
結局、メールから展開する部分はPerlで組み(~/bin/rnote_mail_entry.pl)、肝心要のrNoteの更新はrnote.phpのFORMによる管理者認証をバイパスする入口を作成し、phpのコマンドライン版から呼ぶ形で実装。管理者認証の代替としては~/bin/rnote_mail_entry.plからワンタイムパスワードに似たマジックナンバーを引数で渡すようにして、リモートからの歓迎しないアクセスをガードする。
この手のツールで一番厄介なのがプロセスに依存するアクセス権限。普段rNoteの更新はapacheの権限でphpが実行されるので、phpコマンドライン版もphpcliという別名でコピーし、setuid/setgidビットをセットして必ずapacheの権限で動くようにする。
~/bin/rnote_mail_entry.plのポイントとしては、これまでJcode.pmに頼っていたマルチバイト文字列変換モジュールを、Perl 5.8から標準として採用されたEncode.pmに乗換え。毎度ながらPerlは欲しい関数がどのパッケージに入っているのか探すのが大変だ。画像のリサイズはImageMagickのconvertで対応。
久々のPerlだった事もあり丸二日を費やしたが、結果的には200 step程と思ったよりコンパクトで済んだ。
【参照】
●情報処理推進機構セキュリティセンター http://www.ipa.go.jp/security/
◆IPA ISEC セキュア・プログラミング講座
┗7-3. setuid は慎重に
●hiko.pkg http://www.hikoboshi.org/
┗Perl 5.8.x における日本語コード変換のメモ
●Tsuchiya Masatoshi's WEB Site http://www.namazu.org/~tsuchiya/
┗Perl-5.8 覚え書き