>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