When a password is set for the bootloader ("installboot -o password=..."),

it currently complains about an unknown command and prints a usage if the
password is entered wrong:

        ...
        Choose an option; RETURN for default; SPACE to stop countdown.
        Option 1 will be chosen in 0 seconds.
        Password: *
        Password: *
        Password: *
        unknown command
        commands are:
        boot [xdNx:][filename] [-12acdqsvxz]
             (ex. "hd0a:netbsd.old -s"
        ls [path]
        dev xd[N[x]]:
        consdev {pc|com[0123]|com[0123]kbd|auto}
        modules {enabled|disabled}
        load {path_to_module}
        multiboot [xdNx:][filename] [<args>]
        help|?
        quit

        Choose an option; RETURN for default; SPACE to stop countdown.
        Option 1 will be chosen in 0 seconds.
        ...

This is confusing, plus someone may use it to determine bits of
information about the system. What should happen instead is that the user
is informed that the password is wrong:

        ...
        Choose an option; RETURN for default; SPACE to stop countdown.
        Option 1 will be chosen in 0 seconds.
        Password: ****
        Password: ****
        Password: ****
        Wrong password.

        Choose an option; RETURN for default; SPACE to stop countdown.
        ...

Implement the latter behaviour.
This commit is contained in:
hubertf 2010-02-08 21:25:32 +00:00
parent b2cd31c11a
commit fed6262c88

View File

@ -1,4 +1,4 @@
/* $NetBSD: boot2.c,v 1.47 2010/01/17 14:54:44 drochner Exp $ */
/* $NetBSD: boot2.c,v 1.48 2010/02/08 21:25:32 hubertf Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@ -344,11 +344,23 @@ boot2(int biosdev, u_int biossector)
#else
c = awaitkey((bootconf.timeout < 0) ? 0 : bootconf.timeout, 1);
#endif
if ((c != '\r') && (c != '\n') && (c != '\0') &&
((boot_params.bp_flags & X86_BP_FLAGS_PASSWORD) == 0
|| check_password(boot_params.bp_password))) {
printf("type \"?\" or \"help\" for help.\n");
if ((c != '\r') && (c != '\n') && (c != '\0')) {
if ((boot_params.bp_flags & X86_BP_FLAGS_PASSWORD) == 0) {
/* do NOT ask for password */
bootmenu(); /* does not return */
} else {
/* DO ask for password */
if (check_password(boot_params.bp_password)) {
/* password ok */
printf("type \"?\" or \"help\" for help.\n");
bootmenu(); /* does not return */
} else {
/* bad password */
printf("Wrong password.\n");
currname = 0;
continue;
}
}
}
/*