>From d49d6aaaa59fe0f9853171b5cd9963dbedb37fa7 Mon Sep 17 00:00:00 2001 From: Klaus Frank Date: Sat, 19 Jan 2019 19:03:40 +0100 Subject: [PATCH 1/4] Add quiet mode --- util/grub-mkpasswd-pbkdf2.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/util/grub-mkpasswd-pbkdf2.c b/util/grub-mkpasswd-pbkdf2.c index 5805f3c10..ceb8570bb 100644 --- a/util/grub-mkpasswd-pbkdf2.c +++ b/util/grub-mkpasswd-pbkdf2.c @@ -46,6 +46,7 @@ static struct argp_option options[] = { {"iteration-count", 'c', N_("NUM"), 0, N_("Number of PBKDF2 iterations"), 0}, {"buflen", 'l', N_("NUM"), 0, N_("Length of generated hash"), 0}, {"salt", 's', N_("NUM"), 0, N_("Length of salt"), 0}, + {"quiet", 'q', 0, 0, N_("Only output hash, suppress other output, indended for pipes"), 0}, { 0, 0, 0, 0, 0, 0 } }; @@ -54,6 +55,7 @@ struct arguments unsigned int count; unsigned int buflen; unsigned int saltlen; + unsigned char quiet; }; static error_t @@ -76,6 +78,11 @@ argp_parser (int key, char *arg, struct argp_state *state) case 's': arguments->saltlen = strtoul (arg, NULL, 0); break; + + case 'q': + arguments->quiet = 1; + break; + default: return ARGP_ERR_UNKNOWN; } @@ -116,7 +123,8 @@ main (int argc, char *argv[]) struct arguments arguments = { .count = 10000, .buflen = 64, - .saltlen = 64 + .saltlen = 64, + .quiet = 0 }; char *result, *ptr; gcry_err_code_t gcry_err; @@ -135,23 +143,26 @@ main (int argc, char *argv[]) buf = xmalloc (arguments.buflen); salt = xmalloc (arguments.saltlen); - - printf ("%s", _("Enter password: ")); + + if (!arguments.quiet) { + printf ("%s", _("Enter password: ")); + } if (!grub_password_get (pass1, GRUB_AUTH_MAX_PASSLEN)) { free (buf); free (salt); grub_util_error ("%s", _("failure to read password")); } - printf ("%s", _("Reenter password: ")); - if (!grub_password_get (pass2, GRUB_AUTH_MAX_PASSLEN)) + if (!arguments.quiet) { + printf ("%s", _("Reenter password: ")); + if (!grub_password_get (pass2, GRUB_AUTH_MAX_PASSLEN)) { free (buf); free (salt); grub_util_error ("%s", _("failure to read password")); } - if (strcmp (pass1, pass2) != 0) + if (strcmp (pass1, pass2) != 0) { memset (pass1, 0, sizeof (pass1)); memset (pass2, 0, sizeof (pass2)); @@ -159,7 +170,8 @@ main (int argc, char *argv[]) free (salt); grub_util_error ("%s", _("passwords don't match")); } - memset (pass2, 0, sizeof (pass2)); + memset (pass2, 0, sizeof (pass2)); + } if (grub_get_random (salt, arguments.saltlen)) { @@ -200,7 +212,11 @@ main (int argc, char *argv[]) ptr += arguments.buflen * 2; *ptr = '\0'; - printf (_("PBKDF2 hash of your password is %s\n"), result); + if (arguments.quiet) { + printf ("%s\n", result); + } else { + printf (_("PBKDF2 hash of your password is %s\n"), result); + } memset (buf, 0, arguments.buflen); free (buf); memset (salt, 0, arguments.saltlen); -- 2.20.1