summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkanat%bugzilla.org <>2007-11-28 23:35:52 +0100
committermkanat%bugzilla.org <>2007-11-28 23:35:52 +0100
commit2e37faa78bb9963f38caefa6d59336e1bd4447ef (patch)
tree0034f5ee195d88f910d15b8f80f57ac2fb5be79f
parentc031e0bf0b505e711e48dbe71dd248326e9e77f3 (diff)
downloadbugzilla-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.pm67
-rwxr-xr-xchecksetup.pl12
-rw-r--r--template/en/default/global/messages.html.tmpl12
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