From 82947737b1af0fe96b59fefcafc400668a0e9323 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Wed, 30 Jul 2014 08:49:59 -0400 Subject: [PATCH 1/3] cli: return a failure status when the daemon is not running (bgo #698060) Applies to status commands such as "nmcli radio" or "nmcli g status". This is consistent with other commands. The "RUNNING" field is now always "running", the tool will just return an error instead of setting it to "not running". It never signalled whether the daemon was actually running anyway, only whether the client managed to connect to it. Signed-off-by: Lubomir Rintel --- clients/cli/network-manager.c | 53 ++++++++++++++++------------------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/clients/cli/network-manager.c b/clients/cli/network-manager.c index 4a885dbfd1..d4841ebc43 100644 --- a/clients/cli/network-manager.c +++ b/clients/cli/network-manager.c @@ -299,7 +299,7 @@ nm_connectivity_to_string (NMConnectivityState connectivity) static gboolean show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_flds) { - gboolean nm_running, startup = FALSE; + gboolean startup = FALSE; NMState state = NM_STATE_UNKNOWN; NMConnectivityState connectivity = NM_CONNECTIVITY_UNKNOWN; const char *net_enabled_str; @@ -335,42 +335,37 @@ show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_fl nmc->get_client (nmc); /* create NMClient */ - nm_running = nm_client_get_nm_running (nmc->client); - if (nm_running) { - if (!nmc_versions_match (nmc)) - return FALSE; - - state = nm_client_get_state (nmc->client); - startup = nm_client_get_startup (nmc->client); - connectivity = nm_client_get_connectivity (nmc->client); - net_enabled_str = nm_client_networking_get_enabled (nmc->client) ? _("enabled") : _("disabled"); - wireless_hw_enabled_str = nm_client_wireless_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled"); - wireless_enabled_str = nm_client_wireless_get_enabled (nmc->client) ? _("enabled") : _("disabled"); - wwan_hw_enabled_str = nm_client_wwan_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled"); - wwan_enabled_str = nm_client_wwan_get_enabled (nmc->client) ? _("enabled") : _("disabled"); -#if WITH_WIMAX - wimax_hw_enabled_str = nm_client_wimax_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled"); - wimax_enabled_str = nm_client_wimax_get_enabled (nmc->client) ? _("enabled") : _("disabled"); -#endif - } else { -#if WITH_WIMAX - net_enabled_str = wireless_hw_enabled_str = wireless_enabled_str = - wwan_hw_enabled_str = wwan_enabled_str = wimax_hw_enabled_str = wimax_enabled_str = _("unknown"); -#else - net_enabled_str = wireless_hw_enabled_str = wireless_enabled_str = - wwan_hw_enabled_str = wwan_enabled_str = _("unknown"); -#endif + if (!nm_client_get_nm_running (nmc->client)) { + g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); + nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; + return FALSE; } + if (!nmc_versions_match (nmc)) + return FALSE; + + state = nm_client_get_state (nmc->client); + startup = nm_client_get_startup (nmc->client); + connectivity = nm_client_get_connectivity (nmc->client); + net_enabled_str = nm_client_networking_get_enabled (nmc->client) ? _("enabled") : _("disabled"); + wireless_hw_enabled_str = nm_client_wireless_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled"); + wireless_enabled_str = nm_client_wireless_get_enabled (nmc->client) ? _("enabled") : _("disabled"); + wwan_hw_enabled_str = nm_client_wwan_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled"); + wwan_enabled_str = nm_client_wwan_get_enabled (nmc->client) ? _("enabled") : _("disabled"); +#if WITH_WIMAX + wimax_hw_enabled_str = nm_client_wimax_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled"); + wimax_enabled_str = nm_client_wimax_get_enabled (nmc->client) ? _("enabled") : _("disabled"); +#endif + nmc->print_fields.header_name = pretty_header_name ? (char *) pretty_header_name : _("NetworkManager status"); arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES); g_ptr_array_add (nmc->output_data, arr); arr = nmc_dup_fields_array (tmpl, tmpl_len, 0); - set_val_strc (arr, 0, nm_running ? _("running") : _("not running")); - set_val_strc (arr, 1, nm_running ? nm_client_get_version (nmc->client) : _("unknown")); + set_val_strc (arr, 0, _("running")); + set_val_strc (arr, 1, nm_client_get_version (nmc->client)); set_val_strc (arr, 2, nm_state_to_string (state)); - set_val_strc (arr, 3, nm_running ? (startup ? _("starting") : _("started")) : _("unknown")); + set_val_strc (arr, 3, startup ? _("starting") : _("started")); set_val_strc (arr, 4, nm_connectivity_to_string (connectivity)); set_val_strc (arr, 5, net_enabled_str); set_val_strc (arr, 6, wireless_hw_enabled_str); From f27a259ee625ba243f04832a9167b2928fcaf25e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Fri, 19 Sep 2014 11:11:19 +0200 Subject: [PATCH 2/3] cli: when NM is not running, give this error in 'nmcli connection' Check whether NM is running before comparing nmcli and NM versions. Returning NMC_RESULT_ERROR_NM_NOT_RUNNING is in accordance with other nmcli commands. --- clients/cli/connections.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/clients/cli/connections.c b/clients/cli/connections.c index bd425ecfd6..1396b2356c 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -8429,13 +8429,20 @@ do_connections (NmCli *nmc, int argc, char **argv) return nmc->return_value; } + /* Get NMClient object early */ + nmc->get_client (nmc); + + /* Check whether NetworkManager is runnung */ + if (!nm_client_get_nm_running (nmc->client)) { + g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); + nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; + return nmc->return_value; + } + /* Compare NM and nmcli versions */ if (!nmc_versions_match (nmc)) return nmc->return_value; - /* Get NMClient object early */ - nmc->get_client (nmc); - /* Get NMRemoteSettings object */ if (!(nmc->system_settings = nm_remote_settings_new (NULL, &error))) { g_string_printf (nmc->return_text, _("Error: Could not get system settings: %s."), error->message); From dc1c17fd306c60b0c9a9bd8c84f102722491e23c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Fri, 19 Sep 2014 11:31:19 +0200 Subject: [PATCH 3/3] cli: get NMClient early and remove duplicated code --- clients/cli/connections.c | 46 ------------------ clients/cli/devices.c | 99 +++++---------------------------------- 2 files changed, 13 insertions(+), 132 deletions(-) diff --git a/clients/cli/connections.c b/clients/cli/connections.c index 1396b2356c..28fa8f778a 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -1284,13 +1284,6 @@ do_connections_show (NmCli *nmc, gboolean active_only, int argc, char **argv) char *profile_flds = NULL, *active_flds = NULL; nmc->should_wait = FALSE; - nmc->get_client (nmc); - - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto finish; - } if (argc == 0) { char *fields_str; @@ -1997,15 +1990,6 @@ do_connection_up (NmCli *nmc, int argc, char **argv) argv++; } - /* create NMClient */ - nmc->get_client (nmc); - - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto error; - } - /* Use nowait_flag instead of should_wait because exiting has to be postponed till * active_connection_state_cb() is called. That gives NM time to check our permissions * and we can follow activation progress. @@ -2057,15 +2041,6 @@ do_connection_down (NmCli *nmc, int argc, char **argv) } } - /* create NMClient */ - nmc->get_client (nmc); - - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto error; - } - /* Get active connections */ active_cons = nm_client_get_active_connections (nmc->client); while (arg_num > 0) { @@ -7459,7 +7434,6 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t g_clear_error (&tmp_err); break; } - nmc->get_client (nmc); nmc->nowait_flag = FALSE; nmc->should_wait = TRUE; @@ -7601,7 +7575,6 @@ get_ethernet_device_name (NmCli *nmc) const GPtrArray *devices; int i; - nmc->get_client (nmc); devices = nm_client_get_devices (nmc->client); for (i = 0; i < devices->len; i++) { NMDevice *dev = g_ptr_array_index (devices, i); @@ -7966,15 +7939,6 @@ do_connection_modify (NmCli *nmc, nmc->should_wait = FALSE; - /* create NMClient */ - nmc->get_client (nmc); - - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto finish; - } - if (argc == 0) { g_string_printf (nmc->return_text, _("Error: No arguments provided.")); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; @@ -8174,15 +8138,6 @@ do_connection_delete (NmCli *nmc, int argc, char **argv) nmc->return_value = NMC_RESULT_SUCCESS; nmc->should_wait = FALSE; - /* create NMClient */ - nmc->get_client (nmc); - - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto finish; - } - if (argc == 0) { if (nmc->ask) { line = nmc_readline (PROMPT_CONNECTION); @@ -8438,7 +8393,6 @@ do_connections (NmCli *nmc, int argc, char **argv) nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; return nmc->return_value; } - /* Compare NM and nmcli versions */ if (!nmc_versions_match (nmc)) return nmc->return_value; diff --git a/clients/cli/devices.c b/clients/cli/devices.c index 705838de4d..8bd2c84445 100644 --- a/clients/cli/devices.c +++ b/clients/cli/devices.c @@ -1180,17 +1180,6 @@ do_devices_status (NmCli *nmc, int argc, char **argv) goto error; } - nmc->get_client (nmc); - - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto error; - } - - if (!nmc_versions_match (nmc)) - goto error; - /* Add headers */ nmc->print_fields.header_name = _("Status of devices"); arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES); @@ -1228,17 +1217,6 @@ do_devices_show (NmCli *nmc, int argc, char **argv) goto error; } - nmc->get_client (nmc); - - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto error; - } - - if (!nmc_versions_match (nmc)) - goto error; - devices = get_devices_sorted (nmc->client); if (ifname) { @@ -1392,16 +1370,6 @@ do_device_connect (NmCli *nmc, int argc, char **argv) goto error; } - nmc->get_client (nmc); - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto error; - } - - if (!nmc_versions_match (nmc)) - goto error; - devices = get_devices_sorted (nmc->client); for (i = 0; devices[i]; i++) { NMDevice *candidate = devices[i]; @@ -1526,16 +1494,6 @@ do_device_disconnect (NmCli *nmc, int argc, char **argv) goto error; } - nmc->get_client (nmc); - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto error; - } - - if (!nmc_versions_match (nmc)) - goto error; - devices = get_devices_sorted (nmc->client); for (i = 0; devices[i]; i++) { NMDevice *candidate = devices[i]; @@ -1620,16 +1578,6 @@ do_device_delete (NmCli *nmc, int argc, char **argv) goto error; } - nmc->get_client (nmc); - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto error; - } - - if (!nmc_versions_match (nmc)) - goto error; - devices = get_devices_sorted (nmc->client); for (i = 0; devices[i]; i++) { NMDevice *candidate = devices[i]; @@ -1761,17 +1709,6 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv) goto error; } - nmc->get_client (nmc); - - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto error; - } - - if (!nmc_versions_match (nmc)) - goto error; - devices = get_devices_sorted (nmc->client); if (ifname) { /* Device specified - list only APs of this interface */ @@ -2219,17 +2156,6 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv) goto error; } - nmc->get_client (nmc); - - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto error; - } - - if (!nmc_versions_match (nmc)) - goto error; - devices = nm_client_get_devices (nmc->client); /* Find a device to activate the connection on */ @@ -2393,7 +2319,6 @@ do_device_wifi_rescan (NmCli *nmc, int argc, char **argv) } /* Find Wi-Fi device to scan on. When no ifname is provided, the first Wi-Fi is used. */ - nmc->get_client (nmc); devices = nm_client_get_devices (nmc->client); devices_idx = 0; device = find_wifi_device_by_iface (devices, ifname, &devices_idx); @@ -2518,17 +2443,6 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv) goto error; } - nmc->get_client (nmc); - - if (!nm_client_get_nm_running (nmc->client)) { - g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); - nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; - goto error; - } - - if (!nmc_versions_match (nmc)) - goto error; - devices = nm_client_get_devices (nmc->client); if (ifname) { /* Device specified - list only NSPs of this interface */ @@ -2745,6 +2659,19 @@ do_devices (NmCli *nmc, int argc, char **argv) rl_attempted_completion_function = (rl_completion_func_t *) nmcli_device_tab_completion; + /* Get NMClient object early */ + nmc->get_client (nmc); + + /* Check whether NetworkManager is runnung */ + if (!nm_client_get_nm_running (nmc->client)) { + g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); + nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; + return nmc->return_value; + } + /* Compare NM and nmcli versions */ + if (!nmc_versions_match (nmc)) + return nmc->return_value; + if (argc == 0) { if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) goto opt_error;