diff --git a/lib/mu-util.c b/lib/mu-util.c index f5e398e0..8d60ac35 100644 --- a/lib/mu-util.c +++ b/lib/mu-util.c @@ -494,3 +494,27 @@ mu_util_printerr_encoded (const char *frm, ...) return rv; } + + +char* +mu_util_read_password (const char *prompt) +{ + char *pass, *tmp; + + g_return_val_if_fail (prompt, NULL); + + /* note: getpass is obsolete; replace with something better */ + + tmp = getpass (prompt); + if (!tmp) { + if (errno) + g_warning ("error: %s", strerror(errno)); + return NULL; + } + /* make sure we can free with g_free(), not free() */ + + pass = g_strdup (tmp); + free (tmp); + + return pass; +} diff --git a/lib/mu-util.h b/lib/mu-util.h index 69cdf9e2..b5b1eac8 100644 --- a/lib/mu-util.h +++ b/lib/mu-util.h @@ -179,6 +179,16 @@ gboolean mu_util_printerr_encoded (const char *frm, ...) G_GNUC_PRINTF(1,2); +/** + * read a password from stdin (without echoing), and return it. + * + * @param prompt the prompt text before the password + * + * @return the password (free with g_free), or NULL + */ +char* mu_util_read_password (const char *prompt) + G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT; + /** * Try to 'play' (ie., open with it's associated program) a file. On * MacOS, the the program 'open' is used for this; on other platforms