Files
webmin/grub2/edit_security.cgi

77 lines
2.4 KiB
Perl
Executable File

#!/usr/local/bin/perl
# Show a form for editing GRUB 2 password protection.
use strict;
use warnings;
require './grub2-lib.pl'; ## no critic
our (%text);
&ReadParse();
&error_setup($text{'security_err'});
my %access = &get_module_acl();
&error("$text{'eacl_np'} $text{'eacl_psecurity'}") if (!$access{'security'});
my $state = &grub2_read_security_config();
&ui_print_header(undef, $text{'security_title'}, "", "security_current");
# Refuse to edit administrator-owned password scripts we cannot safely merge.
if ($state->{'exists'} && !$state->{'managed'}) {
print &ui_alert($text{'security_unmanaged'}, 'warning');
&ui_print_footer("index.cgi", $text{'index_return'});
exit;
}
print &ui_form_start("save_security.cgi", "post");
print &ui_table_start($text{'security_header'}, "width=100%", 2);
print &ui_table_row(
$text{'security_current_state'},
$state->{'enabled'} ?
&text('security_current_enabled',
&html_escape($state->{'user'} || 'root')) :
$text{'security_current_disabled'}
);
print &ui_table_row(
$text{'security_current_hash'},
$state->{'hash'} ? $text{'security_current_hash_set'} :
$text{'security_current_hash_missing'}
);
print &ui_table_hr();
print &ui_table_row(
&hlink($text{'security_enable'}, "security_enable"),
&ui_yesno_radio("enabled", $state->{'enabled'} ? 1 : 0)
);
print &ui_table_row(
&hlink($text{'security_user'}, "security_user"),
&ui_textbox("user", $state->{'user'} || "root", 30)
);
print &ui_table_hr();
print &ui_table_row(
$text{'security_password_status'},
$state->{'enabled'} && $state->{'hash'} ?
$text{'security_password_keep'} :
$text{'security_password_required'}
);
# Password fields are optional when keeping the existing PBKDF2 hash.
print &ui_table_row(
&hlink($text{'security_newpass'}, "security_password"),
&ui_password("password", "", 30)
);
print &ui_table_row(
&hlink($text{'security_newpass2'}, "security_password"),
&ui_password("password2", "", 30)
);
print &ui_table_hr();
# Existing hashes are shown because GRUB stores hashes, not clear text.
print &ui_table_row(
&hlink($text{'security_hash'}, "security_hash"),
&ui_textbox("hash", $state->{'hash'} || "", 30, undef, undef, undef,
"w-100").
&ui_tag('div', &ui_note($text{'security_hash_note'}, 0)),
2, undef, undef, 1);
print &ui_table_end();
print &ui_form_end([ [ undef, $text{'save'} ] ]);
&ui_print_footer("index.cgi", $text{'index_return'});