From c248c3f07fdea8a042f25f6bb0bdc8c18892a70c Mon Sep 17 00:00:00 2001 From: Paul Greidanus Date: Tue, 5 Jul 2016 19:43:37 -0600 Subject: [PATCH] MDL-55084 admin: CLI driven password reset This patch allows for changing a user's password via the command line. This allows for scripted password changes easily. --- admin/cli/reset_password.php | 47 +++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/admin/cli/reset_password.php b/admin/cli/reset_password.php index 27f4ca9af41..82f13a18bc4 100644 --- a/admin/cli/reset_password.php +++ b/admin/cli/reset_password.php @@ -29,10 +29,22 @@ define('CLI_SCRIPT', true); require(__DIR__.'/../../config.php'); require_once($CFG->libdir.'/clilib.php'); // cli only functions +// Define the input options. +$longparams = array( + 'help' => false, + 'username' => '', + 'password' => '', + 'ignore-password-policy' => false +); + +$shortparams = array( + 'h' => 'help', + 'u' => 'username', + 'p' => 'password' +); // now get cli options -list($options, $unrecognized) = cli_get_params(array('help'=>false), - array('h'=>'help')); +list($options, $unrecognized) = cli_get_params($longparams, $shortparams); if ($unrecognized) { $unrecognized = implode("\n ", $unrecognized); @@ -47,7 +59,10 @@ There are no security checks here because anybody who is able to execute this file may execute any PHP too. Options: --h, --help Print out this help +-h, --help Print out this help +-u, --username=username Specify username to change +-p, --password=newpassword Specify new password +--ignore-password-policy Ignore password policy when setting password Example: \$sudo -u www-data /usr/bin/php admin/cli/reset_password.php @@ -56,20 +71,30 @@ Example: echo $help; die; } -cli_heading('Password reset'); // TODO: localize -$prompt = "enter username (manual authentication only)"; // TODO: localize -$username = cli_input($prompt); +if ($options['username'] == '' ) { + cli_heading('Password reset'); // TODO: localize. + $prompt = "enter username (manual authentication only)"; // TODO: localize. + $username = cli_input($prompt); +} else { + $username = $options['username']; +} if (!$user = $DB->get_record('user', array('auth'=>'manual', 'username'=>$username, 'mnethostid'=>$CFG->mnet_localhost_id))) { cli_error("Can not find user '$username'"); } -$prompt = "Enter new password"; // TODO: localize -$password = cli_input($prompt); +if ($options['password'] == '' ) { + $prompt = "Enter new password"; // TODO: localize. + $password = cli_input($prompt); +} else { + $password = $options['password']; +} $errmsg = '';//prevent eclipse warning -if (!check_password_policy($password, $errmsg)) { - cli_error($errmsg); +if (!$options['ignore-password-policy'] ) { + if (!check_password_policy($password, $errmsg)) { + cli_error($errmsg); + } } $hashedpassword = hash_internal_user_password($password); @@ -78,4 +103,4 @@ $DB->set_field('user', 'password', $hashedpassword, array('id'=>$user->id)); echo "Password changed\n"; -exit(0); // 0 means success \ No newline at end of file +exit(0); // 0 means success.