[PHP-users 26615] Re: PEAR のPOP3でlogin部分でエラー

倉谷蓮(有限会社コットンシステム開発) ren @ ctnml.net
2005年 8月 26日 (金) 03:18:17 JST


倉谷です。

PEARのPOP3でのlogin部分の問題について自分なりに解決したのでまとめます。
このようなライブラリのソースなんて自分には無理だと思いきや結構よめるものでじっくり読んでみると簡単に問題がわかりました。
問題となっているPOP3.phpのエラー個所の298行目を
if(isset($matches[3]))$this->_capability['sasl'] = preg_split('/\s+/', $matches[3]);
と、書き換えることで問題なくいきます。

結論的に言えばPEARのソースが悪いです。
CAPAコマンドを送りSASLという単語があれば必ずやそこに認証方式が記されているだろうという考えでかかれているのでそこはもう少しこまめに判定をいれて欲しいところでした。

またユーザー名とパスワードが一致しなくてもログイン成功判定になってしまう問題については、戻り値はマニュアルではログイン失敗時はFALSEと書いてありますがFALSEは返しませんのでPEAR::isError($res)などして判定するようにすれば問題はありません。

このようにオープンソースのライブラリに手を加えるということ自体全然考えもしなかったんですが今回のように些細なことが原因で色々な問題が起こりうることも実感でき大変いい経験となりました。
僕のようにFedoraからLinuxを使い始めこうしてPHPプログラムをはじめたという人はdovecotを使用してPOP3サーバーを立てている人も多いかと思いますしこの問題に直面する人も少なからずいるんじゃないかと思います。
もしもそういう人の参考になっていければいいなと思います。
色々コメントを下さった皆様、本当にありがとうございました。




PHP-users メーリングリストの案内