MDL-66123 core: check_password_policy takes $user argument
author[Peter Burnett] <[peterburnett@catalyst-au.net]>
Thu, 18 Jul 2019 00:23:24 +0000 (10:23 +1000)
committer[Peter Burnett] <[peterburnett@catalyst-au.net]>
Mon, 29 Jul 2019 04:37:50 +0000 (14:37 +1000)
admin/cli/reset_password.php
admin/tool/uploaduser/index.php
lib/authlib.php
lib/moodlelib.php
login/change_password_form.php
login/set_password_form.php
user/editadvanced_form.php
user/lib.php

index 9d4dc14..8bd03eb 100644 (file)
@@ -94,7 +94,7 @@ if ($options['password'] == '' ) {
 
 $errmsg = '';//prevent eclipse warning
 if (!$options['ignore-password-policy'] ) {
-    if (!check_password_policy($password, $errmsg)) {
+    if (!check_password_policy($password, $errmsg, $user)) {
         cli_error(html_to_text($errmsg, 0));
     }
 }
index 019da51..ec37326 100644 (file)
@@ -668,7 +668,7 @@ if ($formdata = $mform2->is_cancelled()) {
                     // Check for passwords that we want to force users to reset next
                     // time they log in.
                     $errmsg = null;
-                    $weak = !check_password_policy($user->password, $errmsg);
+                    $weak = !check_password_policy($user->password, $errmsg, $user);
                     if ($resetpasswords == UU_PWRESET_ALL or ($resetpasswords == UU_PWRESET_WEAK and $weak)) {
                         if ($weak) {
                             $weakpasswords++;
@@ -809,7 +809,7 @@ if ($formdata = $mform2->is_cancelled()) {
                     }
                 } else {
                     $errmsg = null;
-                    $weak = !check_password_policy($user->password, $errmsg);
+                    $weak = !check_password_policy($user->password, $errmsg, $user);
                     if ($resetpasswords == UU_PWRESET_ALL or ($resetpasswords == UU_PWRESET_WEAK and $weak)) {
                         if ($weak) {
                             $weakpasswords++;
index 4308a43..336bf87 100644 (file)
@@ -1044,8 +1044,16 @@ function signup_validate_data($data, $files) {
         }
     }
 
+    // Construct fake user object to check password policy against required information.
+    $tempuser = new stdClass();
+    $tempuser->id = 1;
+    $tempuser->username = $data['username'];
+    $tempuser->firstname = $data['firstname'];
+    $tempuser->lastname = $data['lastname'];
+    $tempuser->email = $data['email'];
+
     $errmsg = '';
-    if (!check_password_policy($data['password'], $errmsg)) {
+    if (!check_password_policy($data['password'], $errmsg, $tempuser)) {
         $errors['password'] = $errmsg;
     }
 
index 3fb8ac2..46496c5 100644 (file)
@@ -4939,9 +4939,10 @@ function get_complete_user_data($field, $value, $mnethostid = null, $throwexcept
  *
  * @param string $password the password to be checked against the password policy
  * @param string $errmsg the error message to display when the password doesn't comply with the policy.
+ * @param stdClass $user the user object to perform password validation against. Defaults to null if not provided
  * @return bool true if the password is valid according to the policy. false otherwise.
  */
-function check_password_policy($password, &$errmsg) {
+function check_password_policy($password, &$errmsg, $user = null) {
     global $CFG;
 
     if (!empty($CFG->passwordpolicy)) {
@@ -4971,7 +4972,7 @@ function check_password_policy($password, &$errmsg) {
     $pluginsfunction = get_plugins_with_function('check_password_policy');
     foreach ($pluginsfunction as $plugintype => $plugins) {
         foreach ($plugins as $pluginfunction) {
-            $pluginerr = $pluginfunction($password);
+            $pluginerr = $pluginfunction($password, $user);
             if ($pluginerr) {
                 $errmsg .= '<div>'. $pluginerr .'</div>';
             }
index 4a25979..9f2b77d 100644 (file)
@@ -113,7 +113,7 @@ class login_change_password_form extends moodleform {
         }
 
         $errmsg = '';//prevents eclipse warnings
-        if (!check_password_policy($data['newpassword1'], $errmsg)) {
+        if (!check_password_policy($data['newpassword1'], $errmsg, $USER)) {
             $errors['newpassword1'] = $errmsg;
             $errors['newpassword2'] = $errmsg;
             return $errors;
index ccc725b..6cee4e9 100644 (file)
@@ -100,7 +100,7 @@ class login_set_password_form extends moodleform {
         }
 
         $errmsg = ''; // Prevents eclipse warnings.
-        if (!check_password_policy($data['password'], $errmsg)) {
+        if (!check_password_policy($data['password'], $errmsg, $user)) {
             $errors['password'] = $errmsg;
             $errors['password2'] = $errmsg;
             return $errors;
index 59f64cd..9259416 100644 (file)
@@ -266,7 +266,7 @@ class user_editadvanced_form extends moodleform {
         } else {
             if (!empty($usernew->newpassword)) {
                 $errmsg = ''; // Prevent eclipse warning.
-                if (!check_password_policy($usernew->newpassword, $errmsg)) {
+                if (!check_password_policy($usernew->newpassword, $errmsg, $usernew)) {
                     $err['newpassword'] = $errmsg;
                 }
             } else if (!$user) {
index be2e21b..477e614 100644 (file)
@@ -64,7 +64,7 @@ function user_create_user($user, $updatepassword = true, $triggerevent = true) {
     if ($updatepassword && isset($user->password)) {
 
         // Check password toward the password policy.
-        if (!check_password_policy($user->password, $errmsg)) {
+        if (!check_password_policy($user->password, $errmsg, $user)) {
             throw new moodle_exception($errmsg);
         }
 
@@ -165,7 +165,7 @@ function user_update_user($user, $updatepassword = true, $triggerevent = true) {
     if ($updatepassword && isset($user->password)) {
 
         // Check password toward the password policy.
-        if (!check_password_policy($user->password, $errmsg)) {
+        if (!check_password_policy($user->password, $errmsg, $user)) {
             throw new moodle_exception($errmsg);
         }