diff --git a/ChangeLog b/ChangeLog index 6d4e29514..002461c64 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-09-21 Vladimir Serbinenko + + * grub-core/normal/main.c: Don't drop to rescue console in + case of password-protected prompt and no menu entries. + 2014-09-21 Vladimir Serbinenko * grub-core/commands/keylayouts.c: Ignore unknown keys. diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c index 3a926fc5f..c41f175bd 100644 --- a/grub-core/normal/main.c +++ b/grub-core/normal/main.c @@ -302,7 +302,7 @@ grub_enter_normal_mode (const char *config) nested_level++; grub_normal_execute (config, 0, 0); grub_boot_time ("Entering shell"); - grub_cmdline_run (0); + grub_cmdline_run (0, 1); nested_level--; if (grub_normal_exit_level) grub_normal_exit_level--; @@ -424,11 +424,15 @@ grub_normal_read_line (char **line, int cont, } void -grub_cmdline_run (int nested) +grub_cmdline_run (int nested, int force_auth) { grub_err_t err = GRUB_ERR_NONE; - err = grub_auth_check_authentication (NULL); + do + { + err = grub_auth_check_authentication (NULL); + } + while (err && force_auth); if (err) { diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c index b47991aba..719e2fb1c 100644 --- a/grub-core/normal/menu.c +++ b/grub-core/normal/menu.c @@ -773,7 +773,7 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot) case 'c': menu_fini (); - grub_cmdline_run (1); + grub_cmdline_run (1, 0); goto refresh; case 'e': diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c index b485df821..62c7e1627 100644 --- a/grub-core/normal/menu_entry.c +++ b/grub-core/normal/menu_entry.c @@ -1396,7 +1396,7 @@ grub_menu_entry_run (grub_menu_entry_t entry) case GRUB_TERM_CTRL | 'c': case GRUB_TERM_KEY_F2: - grub_cmdline_run (1); + grub_cmdline_run (1, 0); goto refresh; case GRUB_TERM_CTRL | 'x': diff --git a/grub-core/tests/cmdline_cat_test.c b/grub-core/tests/cmdline_cat_test.c index c3de5c464..f1e21439e 100644 --- a/grub-core/tests/cmdline_cat_test.c +++ b/grub-core/tests/cmdline_cat_test.c @@ -109,7 +109,7 @@ cmdline_cat_test (void) grub_video_checksum ("cmdline_cat"); if (!grub_test_use_gfxterm ()) - grub_cmdline_run (1); + grub_cmdline_run (1, 0); grub_test_use_gfxterm_end (); diff --git a/include/grub/normal.h b/include/grub/normal.h index c4ab193b3..218cbabcc 100644 --- a/include/grub/normal.h +++ b/include/grub/normal.h @@ -66,7 +66,7 @@ void grub_menu_init_page (int nested, int edit, struct grub_term_output *term); void grub_normal_init_page (struct grub_term_output *term, int y); char *grub_file_getline (grub_file_t file); -void grub_cmdline_run (int nested); +void grub_cmdline_run (int nested, int force_auth); /* Defined in `cmdline.c'. */ char *grub_cmdline_get (const char *prompt);