summaryrefslogtreecommitdiff
path: root/clients
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-10-09 11:50:26 +0200
committerThomas Haller <thaller@redhat.com>2018-10-10 09:55:45 +0200
commit2f291e3ceaf1dc266ac03fb3c438a0cfa8105b58 (patch)
treeb001b548c89b603098e16b3ddb954e3ddf43f9f2 /clients
parent258c1e8816bbabe8e25ff987643f246365253664 (diff)
cli: don't use global nm_cli in nmc_readline_*()
Globals are bad. Don't let nmc_readline_helper() access nm_cli. Instead, pass nmc_config along. nmc_config albeit being a complex struct, is much more begning: - the configuration nmc_config is initialized early on and afterwards immutable. - it only contains simple fields, which affect the behavior. - it's not a global. While passing around the complex configuration struct, it is clear that all callpaths don't access additional global information.
Diffstat (limited to 'clients')
-rw-r--r--clients/cli/agent.c18
-rw-r--r--clients/cli/common.c49
-rw-r--r--clients/cli/common.h9
-rw-r--r--clients/cli/connections.c217
-rw-r--r--clients/cli/devices.c21
-rw-r--r--clients/cli/polkit-agent.c15
6 files changed, 194 insertions, 135 deletions
diff --git a/clients/cli/agent.c b/clients/cli/agent.c
index bbfe47fb4..05cc5dca5 100644
--- a/clients/cli/agent.c
+++ b/clients/cli/agent.c
@@ -85,7 +85,8 @@ set_deftext (void)
}
static gboolean
-get_secrets_from_user (const char *request_id,
+get_secrets_from_user (const NmcConfig *nmc_config,
+ const char *request_id,
const char *title,
const char *msg,
GPtrArray *secrets)
@@ -104,7 +105,7 @@ get_secrets_from_user (const char *request_id,
rl_startup_hook = set_deftext;
pre_input_deftext = g_strdup (secret->value);
}
- pwd = nmc_readline ("%s (%s): ", secret->pretty_name, secret->entry_id);
+ pwd = nmc_readline (nmc_config, "%s (%s): ", secret->pretty_name, secret->entry_id);
/* No password provided, cancel the secrets. */
if (!pwd)
@@ -123,17 +124,16 @@ secrets_requested (NMSecretAgentSimple *agent,
GPtrArray *secrets,
gpointer user_data)
{
- NmCli *nmc = (NmCli *) user_data;
- gboolean success = FALSE;
+ NmCli *nmc = user_data;
+ gboolean success;
if (nmc->nmc_config.print_output == NMC_PRINT_PRETTY)
nmc_terminal_erase_line ();
- success = get_secrets_from_user (request_id, title, msg, secrets);
- if (success)
- nm_secret_agent_simple_response (agent, request_id, secrets);
- else
- nm_secret_agent_simple_response (agent, request_id, NULL);
+ success = get_secrets_from_user (&nmc->nmc_config, request_id, title, msg, secrets);
+ nm_secret_agent_simple_response (agent,
+ request_id,
+ success ? secrets : NULL);
}
static NMCResultCode
diff --git a/clients/cli/common.c b/clients/cli/common.c
index d299f5296..71b8e9c00 100644
--- a/clients/cli/common.c
+++ b/clients/cli/common.c
@@ -661,12 +661,12 @@ vpn_openconnect_get_secrets (NMConnection *connection, GPtrArray *secrets)
}
static gboolean
-get_secrets_from_user (const char *request_id,
+get_secrets_from_user (const NmcConfig *nmc_config,
+ const char *request_id,
const char *title,
const char *msg,
NMConnection *connection,
gboolean ask,
- gboolean echo_on,
GHashTable *pwds_hash,
GPtrArray *secrets)
{
@@ -698,8 +698,9 @@ get_secrets_from_user (const char *request_id,
}
if (msg)
g_print ("%s\n", msg);
- pwd = nmc_readline_echo (secret->is_secret
- ? echo_on
+ pwd = nmc_readline_echo (nmc_config,
+ secret->is_secret
+ ? nmc_config->show_secrets
: TRUE,
"%s (%s): ", secret->pretty_name, secret->entry_id);
if (!pwd)
@@ -763,8 +764,14 @@ nmc_secrets_requested (NMSecretAgentSimple *agent,
g_free (path);
}
- success = get_secrets_from_user (request_id, title, msg, connection, nmc->nmc_config.in_editor || nmc->ask,
- nmc->nmc_config.show_secrets, nmc->pwds_hash, secrets);
+ success = get_secrets_from_user (&nmc->nmc_config,
+ request_id,
+ title,
+ msg,
+ connection,
+ nmc->nmc_config.in_editor || nmc->ask,
+ nmc->pwds_hash,
+ secrets);
if (success)
nm_secret_agent_simple_response (agent, request_id, secrets);
else {
@@ -847,7 +854,8 @@ stdin_ready_cb (GIOChannel * io, GIOCondition condition, gpointer data)
}
static char *
-nmc_readline_helper (const char *prompt)
+nmc_readline_helper (const NmcConfig *nmc_config,
+ const char *prompt)
{
GIOChannel *io = NULL;
guint io_watch_id;
@@ -884,7 +892,7 @@ read_again:
if (nmc_seen_sigint ()) {
/* Ctrl-C */
nmc_clear_sigint ();
- if ( nm_cli.nmc_config.in_editor
+ if ( nmc_config->in_editor
|| (rl_string && *rl_string)) {
/* In editor, or the line is not empty */
/* Call readline again to get new prompt (repeat) */
@@ -926,20 +934,17 @@ read_again:
* this function returns NULL.
*/
char *
-nmc_readline (const char *prompt_fmt, ...)
+nmc_readline (const NmcConfig *nmc_config,
+ const char *prompt_fmt,
+ ...)
{
va_list args;
- char *prompt, *str;
+ gs_free char *prompt = NULL;
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;
+ return nmc_readline_helper (nmc_config, prompt);
}
static void
@@ -974,10 +979,14 @@ nmc_secret_redisplay (void)
* nmc_readline(TRUE, ...) == nmc_readline(...)
*/
char *
-nmc_readline_echo (gboolean echo_on, const char *prompt_fmt, ...)
+nmc_readline_echo (const NmcConfig *nmc_config,
+ gboolean echo_on,
+ const char *prompt_fmt,
+ ...)
{
va_list args;
- char *prompt, *str;
+ gs_free char *prompt = NULL;
+ char *str;
HISTORY_STATE *saved_history;
HISTORY_STATE passwd_history = { 0, };
@@ -992,9 +1001,7 @@ nmc_readline_echo (gboolean echo_on, const char *prompt_fmt, ...)
rl_redisplay_function = nmc_secret_redisplay;
}
- str = nmc_readline_helper (prompt);
-
- g_free (prompt);
+ str = nmc_readline_helper (nmc_config, prompt);
/* Restore the non-hiding behavior */
if (!echo_on) {
diff --git a/clients/cli/common.h b/clients/cli/common.h
index 1a2df57e7..5d075249e 100644
--- a/clients/cli/common.h
+++ b/clients/cli/common.h
@@ -59,8 +59,13 @@ char *nmc_unique_connection_name (const GPtrArray *connections,
const char *try_name);
void nmc_cleanup_readline (void);
-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_readline (const NmcConfig *nmc_config,
+ const char *prompt_fmt,
+ ...) G_GNUC_PRINTF (2, 3);
+char *nmc_readline_echo (const NmcConfig *nmc_config,
+ gboolean echo_on,
+ const char *prompt_fmt,
+ ...) G_GNUC_PRINTF (3, 4);
NmcCompEntryFunc nmc_rl_compentry_func_wrap (const char *const*values);
char *nmc_rl_gen_func_basic (const char *text, int state, const char *const*words);
char *nmc_rl_gen_func_ifnames (const char *text, int state);
diff --git a/clients/cli/connections.c b/clients/cli/connections.c
index 63af89e12..5355755d0 100644
--- a/clients/cli/connections.c
+++ b/clients/cli/connections.c
@@ -2765,14 +2765,14 @@ do_connection_up (NmCli *nmc, int argc, char **argv)
argc_ptr = &argc;
if (argc == 0 && nmc->ask) {
- char *line;
+ gs_free char *line = NULL;
/* nmc_do_cmd() should not call this with argc=0. */
g_assert (!nmc->complete);
- line = nmc_readline (PROMPT_CONNECTION);
+ line = nmc_readline (&nmc->nmc_config,
+ PROMPT_CONNECTION);
nmc_string_to_arg_array (line, NULL, TRUE, &arg_arr, &arg_num);
- g_free (line);
argv_ptr = &arg_arr;
argc_ptr = &arg_num;
}
@@ -3019,9 +3019,11 @@ do_connection_down (NmCli *nmc, int argc, char **argv)
g_assert (!nmc->complete);
if (nmc->ask) {
- char *line = nmc_readline (PROMPT_ACTIVE_CONNECTIONS);
+ gs_free char *line = NULL;
+
+ line = nmc_readline (&nmc->nmc_config,
+ PROMPT_ACTIVE_CONNECTIONS);
nmc_string_to_arg_array (line, NULL, TRUE, &arg_arr, &arg_num);
- g_free (line);
arg_ptr = arg_arr;
}
if (arg_num == 0) {
@@ -4892,7 +4894,9 @@ ask_option (NmCli *nmc, NMConnection *connection, const NMMetaAbstractInfo *abst
g_print (_("You can specify this option more than once. Press <Enter> when you're done.\n"));
again:
- value = nmc_readline ("%s", prompt);
+ value = nmc_readline (&nmc->nmc_config,
+ "%s",
+ prompt);
if (multi && !value)
return;
@@ -4982,23 +4986,25 @@ questionnaire_mandatory (NmCli *nmc, NMConnection *connection)
}
static gboolean
-want_provide_opt_args (const char *type, int num)
+want_provide_opt_args (const NmcConfig *nmc_config,
+ const char *type,
+ guint num)
{
- char *answer;
- gboolean ret = TRUE;
+ gs_free char *answer = NULL;
/* Ask for optional arguments. */
g_print (ngettext ("There is %d optional setting for %s.\n",
- "There are %d optional settings for %s.\n", num),
- num, type);
- answer = nmc_readline (ngettext ("Do you want to provide it? %s",
- "Do you want to provide them? %s", num),
+ "There are %d optional settings for %s.\n",
+ num),
+ (int) num,
+ type);
+ answer = nmc_readline (nmc_config,
+ ngettext ("Do you want to provide it? %s",
+ "Do you want to provide them? %s",
+ num),
prompt_yes_no (TRUE, NULL));
- answer = answer ? g_strstrip (answer) : NULL;
- if (answer && !matches (answer, WORD_YES))
- ret = FALSE;
- g_free (answer);
- return ret;
+ nm_strstrip (answer);
+ return !answer || matches (answer, WORD_YES);
}
static gboolean
@@ -5068,7 +5074,9 @@ again:
/* Now ask for the settings. */
if ( already_confirmed
- || want_provide_opt_args (_(setting_info->pretty_name), infos->len)) {
+ || want_provide_opt_args (&nmc->nmc_config,
+ _(setting_info->pretty_name),
+ infos->len)) {
ask_option (nmc, connection, infos->pdata[0]);
already_confirmed = TRUE;
/* asking for an option may enable other options. Create the list again. */
@@ -6786,20 +6794,16 @@ is_connection_dirty (NMConnection *connection, NMRemoteConnection *remote)
}
static gboolean
-confirm_quit (void)
+confirm_quit (const NmcConfig *nmc_config)
{
- char *answer;
- gboolean want_quit = FALSE;
+ gs_free char *answer = NULL;
- answer = nmc_readline (_("The connection is not saved. "
+ answer = nmc_readline (nmc_config,
+ _("The connection is not saved. "
"Do you really want to quit? %s"),
prompt_yes_no (FALSE, NULL));
- answer = answer ? g_strstrip (answer) : NULL;
- if (answer && matches (answer, WORD_YES))
- want_quit = TRUE;
-
- g_free (answer);
- return want_quit;
+ nm_strstrip (answer);
+ return (answer && matches (answer, WORD_YES));
}
/*
@@ -6847,10 +6851,13 @@ property_edit_submenu (NmCli *nmc,
if (nmc->editor_status_line)
editor_show_status_line (connection, dirty, temp_changes);
- cmd_property_user = nmc_readline ("%s", prompt);
+ cmd_property_user = nmc_readline (&nmc->nmc_config,
+ "%s",
+ prompt);
if (!cmd_property_user || !*cmd_property_user)
continue;
- cmdsub = parse_editor_sub_cmd (g_strstrip (cmd_property_user), &cmd_property_arg);
+ g_strstrip (cmd_property_user);
+ cmdsub = parse_editor_sub_cmd (cmd_property_user, &cmd_property_arg);
switch (cmdsub) {
case NMC_EDITOR_SUB_CMD_SET:
@@ -6871,7 +6878,9 @@ property_edit_submenu (NmCli *nmc,
g_print (_("Allowed values for '%s' property: %s\n"),
prop_name, avals_str);
}
- prop_val_user = nmc_readline (_("Enter '%s' value: "), prop_name);
+ prop_val_user = nmc_readline (&nmc->nmc_config,
+ _("Enter '%s' value: "),
+ prop_name);
} else
prop_val_user = g_strdup (cmd_property_arg);
@@ -6899,7 +6908,9 @@ property_edit_submenu (NmCli *nmc,
case NMC_EDITOR_SUB_CMD_CHANGE:
rl_startup_hook = nmc_rl_set_deftext;
nmc_rl_pre_input_deftext = nmc_setting_get_property_parsable (curr_setting, prop_name, NULL);
- prop_val_user = nmc_readline (_("Edit '%s' value: "), prop_name);
+ prop_val_user = nmc_readline (&nmc->nmc_config,
+ _("Edit '%s' value: "),
+ prop_name);
nmc_property_get_gvalue (curr_setting, prop_name, &prop_g_value);
nmc_property_set_default_value (curr_setting, prop_name);
@@ -6916,19 +6927,20 @@ property_edit_submenu (NmCli *nmc,
case NMC_EDITOR_SUB_CMD_REMOVE:
if (cmd_property_arg) {
unsigned long val_int = G_MAXUINT32;
- char *option = NULL;
+ gs_free char *option = NULL;
- if (!nmc_string_to_uint (cmd_property_arg, TRUE, 0, G_MAXUINT32, &val_int))
+ if (!nmc_string_to_uint (cmd_property_arg, TRUE, 0, G_MAXUINT32, &val_int)) {
option = g_strdup (cmd_property_arg);
+ g_strstrip (option);
+ }
if (!nmc_setting_remove_property_option (curr_setting, prop_name,
- option ? g_strstrip (option) : NULL,
+ option,
(guint32) val_int,
&tmp_err)) {
g_print (_("Error: %s\n"), tmp_err->message);
g_clear_error (&tmp_err);
}
- g_free (option);
} else {
if (!nmc_setting_reset_property (curr_setting, prop_name, &tmp_err)) {
g_print (_("Error: failed to remove value of '%s': %s\n"), prop_name,
@@ -6971,7 +6983,7 @@ property_edit_submenu (NmCli *nmc,
case NMC_EDITOR_SUB_CMD_QUIT:
if (is_connection_dirty (connection, *rem_con)) {
- if (confirm_quit ())
+ if (confirm_quit (&nmc->nmc_config))
return FALSE;
} else
return FALSE;
@@ -7032,7 +7044,8 @@ create_setting_by_name (const char *name, const NMMetaSettingValidPartItem *cons
}
static const char *
-ask_check_setting (const char *arg,
+ask_check_setting (const NmcConfig *nmc_config,
+ const char *arg,
const NMMetaSettingValidPartItem *const*valid_settings_main,
const NMMetaSettingValidPartItem *const*valid_settings_slave,
const char *valid_settings_str)
@@ -7043,12 +7056,12 @@ ask_check_setting (const char *arg,
if (!arg) {
g_print (_("Available settings: %s\n"), valid_settings_str);
- setting_name_user = nmc_readline (EDITOR_PROMPT_SETTING);
+ setting_name_user = nmc_readline (nmc_config,
+ EDITOR_PROMPT_SETTING);
} else
setting_name_user = g_strdup (arg);
- if (setting_name_user)
- g_strstrip (setting_name_user);
+ nm_strstrip (setting_name_user);
if (!(setting_name = check_valid_name (setting_name_user,
valid_settings_main,
@@ -7062,7 +7075,8 @@ ask_check_setting (const char *arg,
}
static const char *
-ask_check_property (const char *arg,
+ask_check_property (const NmcConfig *nmc_config,
+ const char *arg,
const char **valid_props,
const char *valid_props_str)
{
@@ -7072,9 +7086,9 @@ ask_check_property (const char *arg,
if (!arg) {
g_print (_("Available properties: %s\n"), valid_props_str);
- prop_name_user = nmc_readline (EDITOR_PROMPT_PROPERTY);
- if (prop_name_user)
- g_strstrip (prop_name_user);
+ prop_name_user = nmc_readline (nmc_config,
+ EDITOR_PROMPT_PROPERTY);
+ nm_strstrip (prop_name_user);
} else
prop_name_user = g_strdup (arg);
@@ -7101,7 +7115,9 @@ update_connection_timestamp (NMConnection *src, NMConnection *dst)
}
static gboolean
-confirm_connection_saving (NMConnection *local, NMConnection *remote)
+confirm_connection_saving (const NmcConfig *nmc_config,
+ NMConnection *local,
+ NMConnection *remote)
{
NMSettingConnection *s_con_loc, *s_con_rem;
gboolean ac_local, ac_remote;
@@ -7119,16 +7135,15 @@ confirm_connection_saving (NMConnection *local, NMConnection *remote)
ac_remote = FALSE;
if (ac_local && !ac_remote) {
- char *answer;
- answer = nmc_readline (_("Saving the connection with 'autoconnect=yes'. "
+ gs_free char *answer = NULL;
+
+ answer = nmc_readline (nmc_config,
+ _("Saving the connection with 'autoconnect=yes'. "
"That might result in an immediate activation of the connection.\n"
- "Do you still want to save? %s"), prompt_yes_no (TRUE, NULL));
- answer = answer ? g_strstrip (answer) : NULL;
- if (!answer || matches (answer, WORD_YES))
- confirmed = TRUE;
- else
- confirmed = FALSE;
- g_free (answer);
+ "Do you still want to save? %s"),
+ prompt_yes_no (TRUE, NULL));
+ nm_strstrip (answer);
+ confirmed = (!answer || matches (answer, WORD_YES));
}
return confirmed;
}
@@ -7223,7 +7238,9 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
if (nmc->editor_status_line)
editor_show_status_line (connection, dirty, temp_changes);
- cmd_user = nmc_readline ("%s", menu_ctx.main_prompt);
+ cmd_user = nmc_readline (&nmc->nmc_config,
+ "%s",
+ menu_ctx.main_prompt);
/* Get the remote connection again, it may have disappeared */
removed = refresh_remote_connection (&weak, &rem_con);
@@ -7235,7 +7252,9 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
if (!cmd_user || !*cmd_user)
continue;
- cmd = parse_editor_main_cmd (g_strstrip (cmd_user), &cmd_arg);
+ g_strstrip (cmd_user);
+
+ cmd = parse_editor_main_cmd (cmd_user, &cmd_arg);
split_editor_main_cmd_args (cmd_arg, &cmd_arg_s, &cmd_arg_p, &cmd_arg_v);
switch (cmd) {
@@ -7249,7 +7268,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
const char *const*avals;
GError *tmp_err = NULL;
- prop_name = ask_check_property (cmd_arg,
+ prop_name = ask_check_property (&nmc->nmc_config,
+ cmd_arg,
(const char **) menu_ctx.valid_props,
menu_ctx.valid_props_str);
if (!prop_name)
@@ -7263,7 +7283,9 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
g_print (_("Allowed values for '%s' property: %s\n"),
prop_name, avals_str);
}
- prop_val_user = nmc_readline (_("Enter '%s' value: "), prop_name);
+ prop_val_user = nmc_readline (&nmc->nmc_config,
+ _("Enter '%s' value: "),
+ prop_name);
/* Set property value */
if (!nmc_setting_set_property (menu_ctx.curr_setting, prop_name, prop_val_user, &tmp_err)) {
@@ -7321,7 +7343,9 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
g_print (_("Allowed values for '%s' property: %s\n"),
prop_name, avals_str);
}
- cmd_arg_v = nmc_readline (_("Enter '%s' value: "), prop_name);
+ cmd_arg_v = nmc_readline (&nmc->nmc_config,
+ _("Enter '%s' value: "),
+ prop_name);
}
/* Set property value */
@@ -7344,7 +7368,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
NMSetting *setting;
const char *user_arg = cmd_arg_s ?: cmd_arg_p;
- setting_name = ask_check_setting (user_arg,
+ setting_name = ask_check_setting (&nmc->nmc_config,
+ user_arg,
valid_settings_main,
valid_settings_slave,
valid_settings_str);
@@ -7390,7 +7415,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
/* level 1 - setting selected */
const char *prop_name;
- prop_name = ask_check_property (cmd_arg_p,
+ prop_name = ask_check_property (&nmc->nmc_config,
+ cmd_arg_p,
(const char **) menu_ctx.valid_props,
menu_ctx.valid_props_str);
if (!prop_name)
@@ -7413,7 +7439,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
GError *tmp_err = NULL;
const char *prop_name;
- prop_name = ask_check_property (cmd_arg,
+ prop_name = ask_check_property (&nmc->nmc_config,
+ cmd_arg,
(const char **) menu_ctx.valid_props,
menu_ctx.valid_props_str);
if (!prop_name)
@@ -7507,7 +7534,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
if (menu_ctx.level == 1) {
const char *prop_name;
- prop_name = ask_check_property (cmd_arg,
+ prop_name = ask_check_property (&nmc->nmc_config,
+ cmd_arg,
(const char **) menu_ctx.valid_props,
menu_ctx.valid_props_str);
if (!prop_name)
@@ -7705,9 +7733,12 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
}
/* Ask for save confirmation if the connection changes to autoconnect=yes */
- if (nmc->editor_save_confirmation)
- if (!confirm_connection_saving (connection, NM_CONNECTION (rem_con)))
+ if (nmc->editor_save_confirmation) {
+ if (!confirm_connection_saving (&nmc->nmc_config,
+ connection,
+ NM_CONNECTION (rem_con)))
break;
+ }
if (!rem_con) {
/* Tell the settings service to add the new connection */
@@ -7824,7 +7855,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
nmc_editor_error->message);
g_error_free (nmc_editor_error);
} else {
- nmc_readline (_("Monitoring connection activation (press any key to continue)\n"));
+ nmc_readline (&nmc->nmc_config,
+ _("Monitoring connection activation (press any key to continue)\n"));
}
if (nmc_editor_monitor_ac) {
@@ -7898,7 +7930,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
case NMC_EDITOR_MAIN_CMD_QUIT:
if (is_connection_dirty (connection, rem_con)) {
- if (confirm_quit ())
+ if (confirm_quit (&nmc->nmc_config))
cmd_loop = FALSE; /* quit command loop */
} else
cmd_loop = FALSE; /* quit command loop */
@@ -8174,8 +8206,9 @@ do_connection_edit (NmCli *nmc, int argc, char **argv)
g_print (_("Error: invalid connection type; %s\n"), err1->message);
g_clear_error (&err1);
- type_ask = nmc_readline (EDITOR_PROMPT_CON_TYPE);
- type = type_ask = type_ask ? g_strstrip (type_ask) : NULL;
+ type_ask = nmc_readline (&nmc->nmc_config,
+ EDITOR_PROMPT_CON_TYPE);
+ type = type_ask = nm_strstrip (type_ask);
connection_type = check_valid_name_toplevel (type_ask, &slave_type, &err1);
}
nm_clear_g_free (&tmp_str);
@@ -8368,14 +8401,14 @@ do_connection_clone (NmCli *nmc, int argc, char **argv)
argc_ptr = &argc;
if (argc == 0 && nmc->ask) {
- char *line;
+ gs_free char *line = NULL;
/* nmc_do_cmd() should not call this with argc=0. */
g_assert (!nmc->complete);
- line = nmc_readline (PROMPT_CONNECTION);
+ line = nmc_readline (&nmc->nmc_config,
+ PROMPT_CONNECTION);
nmc_string_to_arg_array (line, NULL, TRUE, &arg_arr, &arg_num);
- g_free (line);
argv_ptr = &arg_arr;
argc_ptr = &arg_num;
}
@@ -8391,9 +8424,10 @@ do_connection_clone (NmCli *nmc, int argc, char **argv)
if (argv[0])
new_name = *argv;
- else if (nmc->ask)
- new_name = new_name_ask = nmc_readline (_("New connection name: "));
- else {
+ else if (nmc->ask) {
+ new_name = new_name_ask = nmc_readline (&nmc->nmc_config,
+ _("New connection name: "));
+ } else {
g_string_printf (nmc->return_text, _("Error: <new name> argument is missing."));
NMC_RETURN (nmc, NMC_RESULT_ERROR_USER_INPUT);
}
@@ -8478,14 +8512,14 @@ do_connection_delete (NmCli *nmc, int argc, char **argv)
if (argc == 0) {
if (nmc->ask) {
- char *line;
+ gs_free char *line = NULL;
/* nmc_do_cmd() should not call this with argc=0. */
g_assert (!nmc->complete);
- line = nmc_readline (PROMPT_CONNECTIONS);
+ line = nmc_readline (&nmc->nmc_config,
+ PROMPT_CONNECTIONS);
nmc_string_to_arg_array (line, NULL, TRUE, &arg_arr, &arg_num);
- g_free (line);
arg_ptr = arg_arr;
}
if (arg_num == 0) {
@@ -8734,10 +8768,13 @@ do_connection_import (NmCli *nmc, int argc, char **argv)
g_assert (!nmc->complete);
if (nmc->ask) {
- type_ask = nmc_readline ("%s: ", gettext (NM_META_TEXT_PROMPT_VPN_TYPE));
- filename_ask = nmc_readline (gettext (PROMPT_IMPORT_FILE));
- type = type_ask = type_ask ? g_strstrip (type_ask) : NULL;
- filename = filename_ask = filename_ask ? g_strstrip (filename_ask) : NULL;
+ type_ask = nmc_readline (&nmc->nmc_config,
+ "%s: ",
+ gettext (NM_META_TEXT_PROMPT_VPN_TYPE));
+ type = nm_strstrip (type_ask);
+ filename_ask = nmc_readline (&nmc->nmc_config,
+ gettext (PROMPT_IMPORT_FILE));
+ filename = nm_strstrip (filename_ask);
} else {
g_string_printf (nmc->return_text, _("Error: No arguments provided."));
NMC_RETURN (nmc, NMC_RESULT_ERROR_USER_INPUT);
@@ -8854,14 +8891,14 @@ do_connection_export (NmCli *nmc, int argc, char **argv)
argc_ptr = &argc;
if (argc == 0 && nmc->ask) {
- char *line;
+ gs_free char *line = NULL;
/* nmc_do_cmd() should not call this with argc=0. */
g_assert (!nmc->complete);
- line = nmc_readline (PROMPT_VPN_CONNECTION);
+ line = nmc_readline (&nmc->nmc_config,
+ PROMPT_VPN_CONNECTION);
nmc_string_to_arg_array (line, NULL, TRUE, &arg_arr, &arg_num);
- g_free (line);
argv_ptr = &arg_arr;
argc_ptr = &arg_num;
}
@@ -8884,8 +8921,10 @@ do_connection_export (NmCli *nmc, int argc, char **argv)
goto finish;
}
- if (out_name == NULL && nmc->ask)
- out_name = out_name_ask = nmc_readline (_("Output file name: "));
+ if (!out_name && nmc->ask) {
+ out_name = out_name_ask = nmc_readline (&nmc->nmc_config,
+ _("Output file name: "));
+ }
type = nm_connection_get_connection_type (connection);
if (g_strcmp0 (type, NM_SETTING_VPN_SETTING_NAME) != 0) {
diff --git a/clients/cli/devices.c b/clients/cli/devices.c
index 9a1fdedb1..caed85bf2 100644
--- a/clients/cli/devices.c
+++ b/clients/cli/devices.c
@@ -1029,9 +1029,11 @@ get_device_list (NmCli *nmc, int argc, char **argv)
if (argc == 0) {
if (nmc->ask) {
- char *line = nmc_readline (PROMPT_INTERFACES);
+ gs_free char *line = NULL;
+
+ line = nmc_readline (&nmc->nmc_config,
+ PROMPT_INTERFACES);
nmc_string_to_arg_array (line, NULL, FALSE, &arg_arr, &arg_num);
- g_free (line);
arg_ptr = arg_arr;
}
if (arg_num == 0) {
@@ -1086,8 +1088,10 @@ get_device (NmCli *nmc, int *argc, char ***argv, GError **error)
int i;
if (*argc == 0) {
- if (nmc->ask)
- ifname = ifname_ask = nmc_readline (PROMPT_INTERFACE);
+ if (nmc->ask) {
+ ifname = ifname_ask = nmc_readline (&nmc->nmc_config,
+ PROMPT_INTERFACE);
+ }
if (!ifname_ask) {
g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
@@ -3211,7 +3215,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
g_assert (!nmc->complete);
if (nmc->ask) {
- ssid_ask = nmc_readline (_("SSID or BSSID: "));
+ ssid_ask = nmc_readline (&nmc->nmc_config, _("SSID or BSSID: "));
param_user = ssid_ask ?: "";
bssid1_arr = nm_utils_hwaddr_atoba (param_user, ETH_ALEN);
}
@@ -3470,8 +3474,11 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
|| ap_wpa_flags != NM_802_11_AP_SEC_NONE
|| ap_rsn_flags != NM_802_11_AP_SEC_NONE) {
/* Ask for missing password when one is expected and '--ask' is used */
- if (!password && nmc->ask)
- password = passwd_ask = nmc_readline_echo (nmc->nmc_config.show_secrets, _("Password: "));
+ if (!password && nmc->ask) {
+ password = passwd_ask = nmc_readline_echo (&nmc->nmc_config,
+ nmc->nmc_config.show_secrets,
+ _("Password: "));
+ }
if (password) {
if (!connection)
diff --git a/clients/cli/polkit-agent.c b/clients/cli/polkit-agent.c
index 338f0b15e..b895599be 100644
--- a/clients/cli/polkit-agent.c
+++ b/clients/cli/polkit-agent.c
@@ -40,24 +40,25 @@ polkit_request (NMPolkitListener *listener,
gboolean echo_on,
gpointer user_data)
{
- char *response, *tmp, *p;
+ NmCli *nmc = user_data;
g_print ("%s\n", message);
g_print ("(action_id: %s)\n", action_id);
/* Ask user for polkit authorization password */
if (user) {
+ gs_free char *tmp = NULL;
+ char *p;
+
/* chop of ": " if present */
tmp = g_strdup (request);
p = strrchr (tmp, ':');
- if (p && !strcmp (p, ": "))
+ if (p && nm_streq (p, ": "))
*p = '\0';
- response = nmc_readline_echo (echo_on, "%s (%s): ", tmp, user);
- g_free (tmp);
- } else
- response = nmc_readline_echo (echo_on, "%s", request);
+ return nmc_readline_echo (&nmc->nmc_config, echo_on, "%s (%s): ", tmp, user);
+ }
- return response;
+ return nmc_readline_echo (&nmc->nmc_config, echo_on, "%s", request);
}
static void