diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 38ea5a4c6de..5a381bca9ef 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -3795,10 +3795,28 @@ function reset_password_and_mail($user) { $site = get_site(); $from = get_admin(); + $external = false; + if (!is_internal_auth($user->auth)) { + include_once($CFG->dirroot . '/auth/' . $user->auth . '/lib.php'); + if (empty($CFG->{'auth_'.$user->auth.'_stdchangepassword'}) + || !function_exists('auth_user_update_password')) { + trigger_error("Attempt to reset user password for user $user->username with Auth $user->auth."); + return false; + } else { + $external = true; + } + } + $newpassword = generate_password(); - if (! set_field('user', 'password', md5($newpassword), 'id', $user->id) ) { - error('Could not set user password!'); + if ($external) { + if (!auth_user_update_password($user->username, $newpassword)) { + error("Could not set user password!"); + } + } else { + if (! set_field("user", "password", md5($newpassword), "id", $user->id) ) { + error("Could not set user password!"); + } } $a->firstname = $user->firstname; diff --git a/login/index_form.html b/login/index_form.html index abc15027745..00ae13f4e76 100644 --- a/login/index_form.html +++ b/login/index_form.html @@ -55,8 +55,10 @@ -changepassword or is_internal_auth() ) { - if (is_internal_auth()) { +{'auth_'.$CFG->auth.'_stdchangepassword'}) + || $CFG->changepassword + || is_internal_auth() ) { + if (is_internal_auth() || !empty($CFG->{'auth_'.$CFG->auth.'_stdchangepassword'})) { $changepassword = "forgot_password.php"; $changebuttonname = get_string("senddetails"); } else {