>From 823a482178577c8c89618e1e537bc5401fbb8e30 Mon Sep 17 00:00:00 2001 From: Klaus Frank Date: Sun, 20 Jan 2019 01:13:34 +0100 Subject: [PATCH 2/4] Suppress newline in quiet mode --- grub-core/lib/crypto.c | 12 ++++++++++-- grub-core/osdep/unix/password.c | 12 ++++++++++-- grub-core/osdep/windows/password.c | 11 ++++++++++- include/grub/crypto.h | 8 ++++++++ util/grub-mkpasswd-pbkdf2.c | 4 ++-- 5 files changed, 40 insertions(+), 7 deletions(-) diff --git a/grub-core/lib/crypto.c b/grub-core/lib/crypto.c index ca334d5a4..50c800af5 100644 --- a/grub-core/lib/crypto.c +++ b/grub-core/lib/crypto.c @@ -451,7 +451,7 @@ grub_crypto_memcmp (const void *a, const void *b, grub_size_t n) #ifndef GRUB_UTIL int -grub_password_get (char buf[], unsigned buf_size) +_grub_password_get (char buf[], unsigned buf_size, bool newline) { unsigned cur_len = 0; int key; @@ -484,10 +484,18 @@ grub_password_get (char buf[], unsigned buf_size) grub_memset (buf + cur_len, 0, buf_size - cur_len); - grub_xputs ("\n"); + if (newline) { + grub_xputs ("\n"); + } grub_refresh (); return (key != GRUB_TERM_ESC); } + +int +grub_password_get (char buf[], unsigned buf_size) +{ + return _grub_password_get(buf, buf_size, true); +} #endif diff --git a/grub-core/osdep/unix/password.c b/grub-core/osdep/unix/password.c index 9996b244b..5c3a2b021 100644 --- a/grub-core/osdep/unix/password.c +++ b/grub-core/osdep/unix/password.c @@ -27,7 +27,7 @@ #include int -grub_password_get (char buf[], unsigned buf_size) +_grub_password_get (char buf[], unsigned buf_size, bool newline) { FILE *in; struct termios s, t; @@ -65,7 +65,9 @@ grub_password_get (char buf[], unsigned buf_size) if (tty_changed) (void) tcsetattr (fileno (in), TCSAFLUSH, &s); - grub_xputs ("\n"); + if (newline) { + grub_xputs ("\n"); + } grub_refresh (); if (in != stdin) @@ -73,3 +75,9 @@ grub_password_get (char buf[], unsigned buf_size) return 1; } + +int +grub_password_get (char buf[], unsigned buf_size) +{ + return _grub_password_get(buf, buf_size, true); +} diff --git a/grub-core/osdep/windows/password.c b/grub-core/osdep/windows/password.c index 1d3af0c2c..79eafb4fa 100644 --- a/grub-core/osdep/windows/password.c +++ b/grub-core/osdep/windows/password.c @@ -27,7 +27,7 @@ #include int -grub_password_get (char buf[], unsigned buf_size) +_grub_password_get (char buf[], unsigned buf_size, bool newline) { HANDLE hStdin = GetStdHandle (STD_INPUT_HANDLE); DWORD mode = 0; @@ -45,7 +45,16 @@ grub_password_get (char buf[], unsigned buf_size) SetConsoleMode (hStdin, mode); + if (newline) { + grub_xputs ("\n"); + } grub_refresh (); return 1; } + +int +grub_password_get (char buf[], unsigned buf_size) +{ + return _grub_password_get(buf, buf_size, false); +} diff --git a/include/grub/crypto.h b/include/grub/crypto.h index a24e89dd9..9cdf0693f 100644 --- a/include/grub/crypto.h +++ b/include/grub/crypto.h @@ -28,6 +28,11 @@ #include #include +#ifndef GRUB_POSIX_BOOL_DEFINED +#define GRUB_POSIX_BOOL_DEFINED 1 +#include +#endif + typedef enum { GPG_ERR_NO_ERROR, @@ -396,6 +401,9 @@ grub_crypto_pbkdf2 (const struct gcry_md_spec *md, int grub_crypto_memcmp (const void *a, const void *b, grub_size_t n); +int +_grub_password_get (char buf[], unsigned buf_size, bool newline); + int grub_password_get (char buf[], unsigned buf_size); diff --git a/util/grub-mkpasswd-pbkdf2.c b/util/grub-mkpasswd-pbkdf2.c index ceb8570bb..66f3ab2ba 100644 --- a/util/grub-mkpasswd-pbkdf2.c +++ b/util/grub-mkpasswd-pbkdf2.c @@ -147,14 +147,14 @@ main (int argc, char *argv[]) if (!arguments.quiet) { printf ("%s", _("Enter password: ")); } - if (!grub_password_get (pass1, GRUB_AUTH_MAX_PASSLEN)) + if (!_grub_password_get (pass1, GRUB_AUTH_MAX_PASSLEN, false)) { free (buf); free (salt); grub_util_error ("%s", _("failure to read password")); } if (!arguments.quiet) { - printf ("%s", _("Reenter password: ")); + printf ("%s", _("\nReenter password: ")); if (!grub_password_get (pass2, GRUB_AUTH_MAX_PASSLEN)) { free (buf); -- 2.20.1