diff options
author | mkanat%bugzilla.org <> | 2007-11-28 23:35:52 +0100 |
---|---|---|
committer | mkanat%bugzilla.org <> | 2007-11-28 23:35:52 +0100 |
commit | 2e37faa78bb9963f38caefa6d59336e1bd4447ef (patch) | |
tree | 0034f5ee195d88f910d15b8f80f57ac2fb5be79f | |
parent | c031e0bf0b505e711e48dbe71dd248326e9e77f3 (diff) | |
download | bugzilla-2e37faa78bb9963f38caefa6d59336e1bd4447ef.tar.gz bugzilla-2e37faa78bb9963f38caefa6d59336e1bd4447ef.tar.xz |
Bug 353995: Make checksetup able to reset a user's password
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> (module owner) a=mkanat
-rw-r--r-- | Bugzilla/Install.pm | 67 | ||||
-rwxr-xr-x | checksetup.pl | 12 | ||||
-rw-r--r-- | template/en/default/global/messages.html.tmpl | 12 |
3 files changed, 64 insertions, 27 deletions
diff --git a/Bugzilla/Install.pm b/Bugzilla/Install.pm index f251e4d1c..c70f8a8bc 100644 --- a/Bugzilla/Install.pm +++ b/Bugzilla/Install.pm @@ -307,27 +307,9 @@ sub create_admin { chomp($full_name); } - while (!$password) { - # trap a few interrupts so we can fix the echo if we get aborted. - local $SIG{HUP} = \&_create_admin_exit; - local $SIG{INT} = \&_create_admin_exit; - local $SIG{QUIT} = \&_create_admin_exit; - local $SIG{TERM} = \&_create_admin_exit; - - system("stty","-echo") unless ON_WINDOWS; # disable input echoing - - print get_text('install_admin_get_password') . ' '; - $password = <STDIN>; - chomp $password; - print "\n", get_text('install_admin_get_password2') . ' '; - my $pass2 = <STDIN>; - chomp $pass2; - eval { validate_password($password, $pass2); }; - if ($@) { - print "\n$@\n"; - undef $password; - } - system("stty","echo") unless ON_WINDOWS; + if (!$password) { + $password = _prompt_for_password( + get_text('install_admin_get_password')); } my $admin = Bugzilla::User->create({ login_name => $login, @@ -370,13 +352,52 @@ sub make_admin { print "\n", get_text('install_admin_created', { user => $user }), "\n"; } -# This is just in case we get interrupted while getting the admin's password. -sub _create_admin_exit { +sub _prompt_for_password { + my $prompt = shift; + + my $password; + while (!$password) { + # trap a few interrupts so we can fix the echo if we get aborted. + local $SIG{HUP} = \&_password_prompt_exit; + local $SIG{INT} = \&_password_prompt_exit; + local $SIG{QUIT} = \&_password_prompt_exit; + local $SIG{TERM} = \&_password_prompt_exit; + + system("stty","-echo") unless ON_WINDOWS; # disable input echoing + + print $prompt, ' '; + $password = <STDIN>; + chomp $password; + print "\n", get_text('install_confirm_password'), ' '; + my $pass2 = <STDIN>; + chomp $pass2; + eval { validate_password($password, $pass2); }; + if ($@) { + print "\n$@\n"; + undef $password; + } + system("stty","echo") unless ON_WINDOWS; + } + return $password; +} + +# This is just in case we get interrupted while getting a password. +sub _password_prompt_exit { # re-enable input echoing system("stty","echo") unless ON_WINDOWS; exit 1; } +sub reset_password { + my $login = shift; + my $user = Bugzilla::User->check($login); + my $prompt = "\n" . get_text('install_reset_password', { user => $user }); + my $password = _prompt_for_password($prompt); + $user->set_password($password); + $user->update(); + print "\n", get_text('install_reset_password_done'), "\n"; +} + 1; __END__ diff --git a/checksetup.pl b/checksetup.pl index f1cf9e224..b8f9e325b 100755 --- a/checksetup.pl +++ b/checksetup.pl @@ -66,7 +66,8 @@ $ENV{'HTTP_ACCEPT_LANGUAGE'} ||= setlocale(LC_CTYPE); my %switch; GetOptions(\%switch, 'help|h|?', 'check-modules', 'no-templates|t', - 'verbose|v|no-silent', 'make-admin=s'); + 'verbose|v|no-silent', 'make-admin=s', + 'reset-password=s'); # Print the help message if that switch was selected. pod2usage({-verbose => 1, -exitval => 1}) if $switch{'help'}; @@ -212,6 +213,9 @@ Bugzilla::Install::update_settings(); Bugzilla::Install::make_admin($switch{'make-admin'}) if $switch{'make-admin'}; Bugzilla::Install::create_admin(); +Bugzilla::Install::reset_password($switch{'reset-password'}) + if $switch{'reset-password'}; + ########################################################################### # Create default Product and Classification ########################################################################### @@ -240,6 +244,7 @@ checksetup.pl - A do-it-all upgrade and installation script for Bugzilla. ./checksetup.pl [--help|--check-modules] ./checksetup.pl [SCRIPT [--verbose]] [--no-templates|-t] [--make-admin=user@domain.com] + [--reset-password=user@domain.com] =head1 OPTIONS @@ -267,6 +272,11 @@ Makes the specified user into a Bugzilla administrator. This is in case you accidentally lock yourself out of the Bugzilla administrative interface. +=item B<--reset-password>=user@domain.com + +Resets the specified user's password. checksetup.pl will prompt you to +enter a new password for the user. + =item B<--no-templates> (B<-t>) Don't compile the templates at all. Existing compiled templates will diff --git a/template/en/default/global/messages.html.tmpl b/template/en/default/global/messages.html.tmpl index aa7068add..28557bfcb 100644 --- a/template/en/default/global/messages.html.tmpl +++ b/template/en/default/global/messages.html.tmpl @@ -356,9 +356,6 @@ [% ELSIF message_tag == "install_admin_get_password" %] Enter a password for the administrator account: - [% ELSIF message_tag == "install_admin_get_password2" %] - Please retype the password to verify: - [% ELSIF message_tag == "install_admin_created" %] [% user.login FILTER html %] is now set up as an administrator. @@ -376,6 +373,9 @@ [% ELSIF message_tag == "install_column_rename" %] Renaming column '[% old FILTER html %]' to '[% new FILTER html %]'... + [% ELSIF message_tag == "install_confirm_password" %] + Please retype the password to verify: + [% ELSIF message_tag == "install_default_classification" %] Creating default classification '[% name FILTER html %]'... @@ -406,6 +406,12 @@ account) to ensure it is set up as you wish - this includes setting the 'urlbase' option to the correct URL. + [% ELSIF message_tag == "install_reset_password" %] + Enter a new password for [% user.login FILTER html %]: + + [% ELSIF message_tag == "install_reset_password_done" %] + New password set. + [% ELSIF message_tag == "install_webservergroup_empty" %] **************************************************************************** WARNING! You have not entered a value for the "webservergroup" parameter |