mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-08 04:18:07 +02:00
cli: do not echo passwords on terminal when asking for them
adds nmc_readline_echo() function that can disable displaying characters.
This commit is contained in:
parent
d5a8401686
commit
a14306c2ce
2 changed files with 76 additions and 26 deletions
|
|
@ -930,6 +930,7 @@ get_secrets_from_user (const char *request_id,
|
||||||
const char *title,
|
const char *title,
|
||||||
const char *msg,
|
const char *msg,
|
||||||
gboolean ask,
|
gboolean ask,
|
||||||
|
gboolean echo_on,
|
||||||
GHashTable *pwds_hash,
|
GHashTable *pwds_hash,
|
||||||
GPtrArray *secrets)
|
GPtrArray *secrets)
|
||||||
{
|
{
|
||||||
|
|
@ -951,7 +952,7 @@ get_secrets_from_user (const char *request_id,
|
||||||
rl_startup_hook = nmc_rl_set_deftext;
|
rl_startup_hook = nmc_rl_set_deftext;
|
||||||
nmc_rl_pre_input_deftext = g_strdup (secret->value);
|
nmc_rl_pre_input_deftext = g_strdup (secret->value);
|
||||||
}
|
}
|
||||||
pwd = nmc_readline ("%s (%s): ", secret->name, secret->prop_name);
|
pwd = nmc_readline_echo (echo_on, "%s (%s): ", secret->name, secret->prop_name);
|
||||||
if (!pwd)
|
if (!pwd)
|
||||||
pwd = g_strdup ("");
|
pwd = g_strdup ("");
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -998,7 +999,7 @@ nmc_secrets_requested (NMSecretAgentSimple *agent,
|
||||||
nmc_terminal_erase_line ();
|
nmc_terminal_erase_line ();
|
||||||
|
|
||||||
success = get_secrets_from_user (request_id, title, msg, nmc->in_editor || nmc->ask,
|
success = get_secrets_from_user (request_id, title, msg, nmc->in_editor || nmc->ask,
|
||||||
nmc->pwds_hash, secrets);
|
FALSE, nmc->pwds_hash, secrets);
|
||||||
if (success)
|
if (success)
|
||||||
nm_secret_agent_simple_response (agent, request_id, secrets);
|
nm_secret_agent_simple_response (agent, request_id, secrets);
|
||||||
else {
|
else {
|
||||||
|
|
@ -1074,30 +1075,12 @@ nmc_set_in_readline (gboolean in_readline)
|
||||||
/* Global variable defined in nmcli.c */
|
/* Global variable defined in nmcli.c */
|
||||||
extern NmCli nm_cli;
|
extern NmCli nm_cli;
|
||||||
|
|
||||||
/**
|
|
||||||
* nmc_readline:
|
|
||||||
* @prompt_fmt: prompt to print (telling user what to enter). It is standard
|
|
||||||
* printf() format string
|
|
||||||
* @...: a list of arguments according to the @prompt_fmt format string
|
|
||||||
*
|
|
||||||
* Wrapper around libreadline's readline() function.
|
|
||||||
* If user pressed Ctrl-C, readline() is called again (if not in editor and
|
|
||||||
* line is empty, nmcli will quit).
|
|
||||||
* If user pressed Ctrl-D on empty line, nmcli will quit.
|
|
||||||
*
|
|
||||||
* Returns: the user provided string. In case the user entered empty string,
|
|
||||||
* this function returns NULL.
|
|
||||||
*/
|
|
||||||
char *
|
|
||||||
nmc_readline (const char *prompt_fmt, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
char *prompt, *str;
|
|
||||||
int b;
|
|
||||||
|
|
||||||
va_start (args, prompt_fmt);
|
static char *
|
||||||
prompt = g_strdup_vprintf (prompt_fmt, args);
|
nmc_readline_helper (const char *prompt)
|
||||||
va_end (args);
|
{
|
||||||
|
char *str;
|
||||||
|
int b;
|
||||||
|
|
||||||
readline_mark:
|
readline_mark:
|
||||||
/* We are in readline -> Ctrl-C should not quit nmcli */
|
/* We are in readline -> Ctrl-C should not quit nmcli */
|
||||||
|
|
@ -1145,7 +1128,6 @@ readline_mark:
|
||||||
sleep (3);
|
sleep (3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g_free (prompt);
|
|
||||||
|
|
||||||
/* Return NULL, not empty string */
|
/* Return NULL, not empty string */
|
||||||
if (str && *str == '\0') {
|
if (str && *str == '\0') {
|
||||||
|
|
@ -1155,6 +1137,73 @@ readline_mark:
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* nmc_readline:
|
||||||
|
* @prompt_fmt: prompt to print (telling user what to enter). It is standard
|
||||||
|
* printf() format string
|
||||||
|
* @...: a list of arguments according to the @prompt_fmt format string
|
||||||
|
*
|
||||||
|
* Wrapper around libreadline's readline() function.
|
||||||
|
* If user pressed Ctrl-C, readline() is called again (if not in editor and
|
||||||
|
* line is empty, nmcli will quit).
|
||||||
|
* If user pressed Ctrl-D on empty line, nmcli will quit.
|
||||||
|
*
|
||||||
|
* Returns: the user provided string. In case the user entered empty string,
|
||||||
|
* this function returns NULL.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
nmc_readline (const char *prompt_fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
char *prompt, *str;
|
||||||
|
|
||||||
|
va_start (args, prompt_fmt);
|
||||||
|
prompt = g_strdup_vprintf (prompt_fmt, args);
|
||||||
|
va_end (args);
|
||||||
|
|
||||||
|
str = nmc_readline_helper (prompt);
|
||||||
|
|
||||||
|
g_free (prompt);
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* nmc_readline_echo:
|
||||||
|
*
|
||||||
|
* The same as nmc_readline() except it can disable echoing of input characters if @echo_on is %FALSE.
|
||||||
|
* nmc_readline(TRUE, ...) == nmc_readline(...)
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
nmc_readline_echo (gboolean echo_on, const char *prompt_fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
char *prompt, *str;
|
||||||
|
struct termios termios_orig, termios_new;
|
||||||
|
|
||||||
|
va_start (args, prompt_fmt);
|
||||||
|
prompt = g_strdup_vprintf (prompt_fmt, args);
|
||||||
|
va_end (args);
|
||||||
|
|
||||||
|
/* Disable echoing characters */
|
||||||
|
if (!echo_on) {
|
||||||
|
tcgetattr (STDIN_FILENO, &termios_orig);
|
||||||
|
termios_new = termios_orig;
|
||||||
|
termios_new.c_lflag &= ~(ECHO);
|
||||||
|
tcsetattr (STDIN_FILENO, TCSADRAIN, &termios_new);
|
||||||
|
}
|
||||||
|
|
||||||
|
str = nmc_readline_helper (prompt);
|
||||||
|
|
||||||
|
g_free (prompt);
|
||||||
|
|
||||||
|
/* Restore original terminal settings */
|
||||||
|
if (!echo_on)
|
||||||
|
tcsetattr (STDIN_FILENO, TCSADRAIN, &termios_orig);
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nmc_rl_gen_func_basic:
|
* nmc_rl_gen_func_basic:
|
||||||
* @text: text to complete
|
* @text: text to complete
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@ char *nmc_unique_connection_name (const GPtrArray *connections,
|
||||||
|
|
||||||
void nmc_cleanup_readline (void);
|
void nmc_cleanup_readline (void);
|
||||||
char *nmc_readline (const char *prompt_fmt, ...) G_GNUC_PRINTF (1, 2);
|
char *nmc_readline (const char *prompt_fmt, ...) G_GNUC_PRINTF (1, 2);
|
||||||
|
char *nmc_readline_echo (gboolean echo_on, const char *prompt_fmt, ...) G_GNUC_PRINTF (2, 3);
|
||||||
char *nmc_rl_gen_func_basic (const char *text, int state, const char **words);
|
char *nmc_rl_gen_func_basic (const char *text, int state, const char **words);
|
||||||
gboolean nmc_get_in_readline (void);
|
gboolean nmc_get_in_readline (void);
|
||||||
void nmc_set_in_readline (gboolean in_readline);
|
void nmc_set_in_readline (gboolean in_readline);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue