当方の環境ではユーザ認証にPOP3も利用しています.
POP3での認証ですが,どうもログイン時にユーザがパスワードの入力に失敗すると,MoodleからPOP3サーバに対して3回の確認が行なわれているらしいのです.当方のPOP3の設定では,2分間に5回のパスワード入力ミスがあったら3分間,アカウントをロックしているそうです.つまり2分間の間に学生がパスワードの入力に2回失敗すると,その後,3分間はログインできません.(3回の確認×2回の失敗=6回の失敗)
1度確認してダメでもあと2回チャレンジするとユーザ名+パスワードの認証がOKになる場合もあるのかも知れませんね(本当?).でも,通信路のノイズなどなどによって正しいユーザ名+パスワードでありながら認証に失敗する可能性よりも,学生がパスワードを入力ミスする可能性の方が圧倒的に高い.特に4月は.
よし,POP3の認証を行なっているのはauth/pop3/auth.phpだろうと思って調べてみたのですが,どこにも”3回のリトライ”を行なっている箇所がありません.foreach文があるので,もしかしたらここのあたりで予想外のことが...とも思ったのですが,POP3での認証を行なうために用いているimap_open()関数の説明を読んでいて勝手に仮説を立てました.
error_reporting(0);
$connection = imap_open($host, stripslashes($username), stripslashes($password));
error_reporting($CFG->debug);
if ($connection) {
imap_close($connection);
return true;
}
以下がimap_open()の説明です.
http://jp.php.net/jp/imap-open
resource imap_open ( string $mailbox , string $username , string $password [, int $options [, int $n_retries ]] )
いま現在は上に抜き出したソースのように,$mailboxと$usernameと$passwordしか引数として指定していません.これ以外に$optionsと$n_retriesの2つの引数がオプションで存在します.特に$n_retriesはPHP5.2.0から追加されたオプションのようですが,「接続試行の最大数」としか書いてありません.
そこで伺いたいのは,この$n_retriesをセットしなかった場合やPHP5.2.0以前のPHPでimap_open()関数はメールサーバに対して何回の接続試行を行なうのでしょうか.いまこれを書きながら上記PHPマニュアルのページを読んでいた所,
http://jp.php.net/manual/ja/function.imap-open.php#78097
このように書いてありますね.1以外? 気持ちとしては1をセットしてみたいのですけれども.
もちろん,実際に実験をしてみることも可能ですが,POP3サーバに何度のアクセスがあったのかを確認する権限がありませんので,情報処理センターに協力を要請しなくてはなりません.もしどこか正式な情報として,「デフォルトではn回の接続試行を行なうが,$n_retriesを1にセットすれば1回しか接続を試みない」と書いてあると安心です.どなかた情報をお持ちではないでしょうか.Googleで探した範囲ではズバリと言い切っている文書を見付けられていませんでした.