2007年4月30日(月)

perl ウンコー(・∀・)

lifeblog から MT へ投稿できるようにしていたが、どうにもエラーになる

幸い、 login できる環境なので login して mt-atom.cgi を shell から叩いてみると

エラーが発生しました: Can't locate MIME/Base64.pm in @INC 後略

になってる罠。システムの perl がウンコなのであれこれ home 以下に突っこんであるんだが、それを

unshift @INC, 'path_literal'

で押し込んであるのが無視されてるげ。
perl ウンコー。てか他の cgi はこれで動いてるんじゃないのか?! perl ウンコー。何は悪くて何なら動くのかサッパリ理解デキネー。 perl ウンコー
結局 use lib ('path1', 'path2);な突っ込み方ならちゃんと通ることを発見。 perl ウンコー。なんでこっちじゃないと駄目なんだよ。perl ウンコー

ついでに、 SHA1.pm がなかったので、拾ってきて site_perl 以下に放り込んでやったらこれも無視しやがんの。わざわざ tar 玉拾ってきて make で install させられる始末。 perl ウンコー。なんのための script 言語だよと

で、 shell からは実行はできるようになったようなんだが、PC 上の lifeblog クライアントから blog へ投稿させてみるとエラーになって入力内容確かめてもう一度やれとクソふざけたこと云われる罠。どんなエラーになったのかちゃんと見せろゴルァ!。アクセスログ見てみると 403 で拒否されてるという……。手で打つと 200 な HTML 出力してるんだがなぁ………。

参考:[a::blog] 702NKでLifeblogからMovable Typeへ投稿 その後Ocasta: MT3.2 & Lifeblog

wiresharkで無理矢理やりとりを覗いてやると

HTTP/1.1 403 X-WSSE PAsswordDigest is incorrect

とか出てるとこまで確認。
AtomServer.pm の方で当該行を探すと 190 行っぽいな…。うーむ、直前に

#        print STDERR "expected $expected and got " . $auth->{PasswordDigest} . "\n";

とか debug が仕込んであるのが笑える。という訳で printf debug 開始。
クライアントが指定したユーザ名に対応した Atom API password は拾えてるな。ってことは、違ったものと結合しちゃったか、 SHA1 の digest が腐ってるか、か…。

ふむー。どうでもいいがユーザ名に多バイト使うと( MT 的には通る)クライアントがちゃんと送らないっぽくて atom API password を取れないことも判った。
それ以外では、送ってきた Nonce, Created はちゃんと一致してる。パスワードはちゃんと拾えてる。ってことは、やっぱり結合のし方か Digest しかないのか…。

パケットフィルタしながら、送った nonce と created とパスワードを元に、 perl で Digest してみる。やっぱり送ってくる Digest とは一致せんなー。

つーことは lifeblog の側が Digest のやりかた変えたな?
と思って探してみれば、やっぱりあったよ:Robert Price - Nokia Lifeblog Posting Protocol Update

そして、ちゃんと AtomServer.pm の当該行のちょっと上のあたりには、

MIME::Base64::decode_base64($auth->{Nonce})

な行がしっかりと、コメントアウトされて残っているという…

あ、認証は通るようになって 200 が帰ってるのにクライアントの方がまだエラーだ云いはってるな。
というところで今日はもう寝る。

ちなみにクライアントのバージョンは Nokia Lifeblog 2.5

[referer: [an error occurred while processing this directive]]

あわせて読みたい