From 66d982fd16b5ca7a2452ae8c6ed2df7a4852215a Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Thu, 16 Feb 2017 08:47:08 +0100 Subject: [PATCH] system: allow random password reset; closes #1351 --- src/etc/inc/auth.inc | 8 +++++++- src/www/system_usermanager.php | 18 +++++++++++++----- src/www/system_usermanager_import_ldap.php | 11 ++++------- src/www/system_usermanager_passwordmg.php | 6 +++--- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/etc/inc/auth.inc b/src/etc/inc/auth.inc index f102ce508..1159830f0 100644 --- a/src/etc/inc/auth.inc +++ b/src/etc/inc/auth.inc @@ -497,10 +497,16 @@ function local_user_del($user) local_group_del_user($user); } -function local_user_set_password(&$user, $password) +function local_user_set_password(&$user, $password = null) { $cost = 10; + if ($password == null) { + /* generate a random password */ + $bytes = openssl_random_pseudo_bytes(50); + $password = pack('H*',bin2hex($bytes)); + } + $hash = password_hash($password, PASSWORD_BCRYPT, [ 'cost' => $cost ]); if ($hash !== false) { /* diff --git a/src/www/system_usermanager.php b/src/www/system_usermanager.php index 10a249746..5433c8834 100644 --- a/src/www/system_usermanager.php +++ b/src/www/system_usermanager.php @@ -232,8 +232,13 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { $input_errors[] = gettext("The username is longer than 16 characters."); } - if (($pconfig['passwordfld1']) && ($pconfig['passwordfld1'] != $pconfig['passwordfld2'])) { - $input_errors[] = gettext("The passwords do not match."); + if (!empty($pconfig['passwordfld1'])) { + if ($pconfig['passwordfld1'] != $pconfig['passwordfld2']) { + $input_errors[] = gettext('The passwords do not match.'); + } + if (!empty($pconfig['gen_new_password'])) { + $input_errors[] = gettext('Cannot set random password due to explicit input.'); + } } if (!empty($pconfig['disabled']) && $_SESSION['Username'] === $a_user[$id]['name']) { @@ -305,6 +310,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { /* the user password was modified */ if (!empty($pconfig['passwordfld1'])) { local_user_set_password($userent, $pconfig['passwordfld1']); + } elseif (!empty($pconfig['gen_new_password'])) { + local_user_set_password($userent); } isset($pconfig['scope']) ? $userent['scope'] = $pconfig['scope'] : $userent['scope'] = "system"; @@ -572,8 +579,9 @@ $( document ).ready(function() {
-   - + +

+   @@ -822,7 +830,7 @@ $( document ).ready(function() { -   +