今回の案件では、外部のデータベースと連携して Moodle 以外のプログラムを使って Moodle へユーザーを追加するので、LDAP 認証通過時に勝手に新規ユーザーが追加されるのを抑制する必要がありました。
調べてみると、
lib/moodlelib.php 内の authenticate_user_login() 内で呼ばれている create_user_record() でごにょごにょすれば良い感じ。(ちなみに authenticate_use_login() は login/index.php で呼ばれます。)
本体へ手を加えるのはなるべく避けたかったのですが、そうも言っていられないので、以下のように修正しました。
function create_user_record($username, $password, $auth='manual') { global $CFG; // LDAP 認証の場合、ユーザー作成を許可しない if (!strcmp('ldap', $auth)) { return false; } //just in case check text case $username = trim(moodle_strtolower($username));
これで勝手にユーザーが追加されることはなくなりました。ついでに設定画面のメッセージ表示も変更しておきます。
lang/ja_utf8/auth.php
$string['auth_ldapdescription'] = 'この方法では外部のLDAPサーバに対して認証を提供します。Moodleは新しいユーザをデータベースに作成しません。このモジュールはユーザ属性をLDAPから取得して、Moodleのフィールドに入力します。認証後のログインではユーザ名およびパスワードのみ確認されます。';
lang/ja_utf8/auth_ldap.php にも同様の記述があるのですが、どこで使われているのやら…。