diff options
| author | Michael Biebl <biebl@debian.org> | 2019-02-26 19:01:41 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2019-02-26 19:01:41 +0100 |
| commit | 964ae8cc391520440cf5aa13e2b9cc34850ea6c2 (patch) | |
| tree | 50da9ecaee7fbb612ec18f9e24f7dec215bf7861 /clients/cli/connections.c | |
| parent | 3626b425d1bc017fdc6f1ea0cfd329d1e1681641 (diff) | |
New upstream version 1.14.6 upstream/1.14.6
Diffstat (limited to 'clients/cli/connections.c')
| -rw-r--r-- | clients/cli/connections.c | 58 |
1 files changed, 51 insertions, 7 deletions
diff --git a/clients/cli/connections.c b/clients/cli/connections.c index bcd257ac..8a10691e 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -6534,6 +6534,12 @@ static gboolean nmc_editor_cb_called; static GError *nmc_editor_error; static MonitorACInfo *nmc_editor_monitor_ac; +static void +editor_connection_changed_cb (NMConnection *connection, gboolean *changed) +{ + *changed = TRUE; +} + /* * Store 'error' to shared 'nmc_editor_error' and monitoring info to * 'nmc_editor_monitor_ac' and signal the condition so that @@ -6579,8 +6585,8 @@ static gboolean progress_activation_editor_cb (gpointer user_data) { MonitorACInfo *info = (MonitorACInfo *) user_data; - gs_unref_object NMDevice *device = info->device; - gs_unref_object NMActiveConnection *ac = info->ac; + NMDevice *device = info->device; + NMActiveConnection *ac = info->ac; NMActiveConnectionState ac_state; NMDeviceState dev_state; @@ -6613,11 +6619,13 @@ progress_activation_editor_cb (gpointer user_data) nm_object_get_path (NM_OBJECT (connection))); } - return TRUE; + return G_SOURCE_CONTINUE; finish: + nm_g_object_unref (device); + nm_g_object_unref (ac); info->monitor_id = 0; - return FALSE; + return G_SOURCE_REMOVE; } static void @@ -7128,6 +7136,16 @@ menu_switch_to_level1 (const NmcConfig *nmc_config, } static gboolean +editor_save_timeout (gpointer user_data) +{ + gboolean *timeout = user_data; + + *timeout = TRUE; + + return G_SOURCE_REMOVE; +} + +static gboolean editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_type) { gs_unref_object NMRemoteConnection *rem_con = NULL; @@ -7646,6 +7664,10 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t /* Save the connection */ if (nm_connection_verify (connection, &err1)) { gboolean persistent = TRUE; + gboolean connection_changed; + nm_auto_unref_gsource GSource *source = NULL; + gboolean timeout = FALSE; + gulong handler_id = 0; /* parse argument */ if (cmd_arg) { @@ -7674,23 +7696,44 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t connection, add_connection_editor_cb, info); + connection_changed = TRUE; } else { /* Save/update already saved (existing) connection */ nm_connection_replace_settings_from_connection (NM_CONNECTION (rem_con), connection); update_connection (persistent, rem_con, update_connection_editor_cb, NULL); + + handler_id = g_signal_connect (rem_con, + NM_CONNECTION_CHANGED, + G_CALLBACK (editor_connection_changed_cb), + &connection_changed); + connection_changed = FALSE; } - //FIXME: add also a timeout for cases the callback is not called - while (!nmc_editor_cb_called) + source = g_timeout_source_new (10 * NM_UTILS_MSEC_PER_SECOND); + g_source_set_callback (source, editor_save_timeout, &timeout, NULL); + g_source_attach (source, g_main_loop_get_context (loop)); + + while (!nmc_editor_cb_called && !timeout) g_main_context_iteration (NULL, TRUE); + while (!connection_changed && !timeout) + g_main_context_iteration (NULL, TRUE); + + if (handler_id) + g_signal_handler_disconnect (rem_con, handler_id); + g_source_destroy (source); + if (nmc_editor_error) { g_print (_("Error: Failed to save '%s' (%s) connection: %s\n"), nm_connection_get_id (connection), nm_connection_get_uuid (connection), nmc_editor_error->message); g_error_free (nmc_editor_error); + } else if (timeout) { + g_print (_("Error: Timeout saving '%s' (%s) connection\n"), + nm_connection_get_id (connection), + nm_connection_get_uuid (connection)); } else { g_print (!rem_con ? _("Connection '%s' (%s) successfully saved.\n") : @@ -7713,9 +7756,10 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t if (menu_ctx.curr_setting) s_name = g_strdup (nm_setting_get_name (menu_ctx.curr_setting)); - /* Update settings in the local connection */ + /* Update settings and secrets in the local connection */ nm_connection_replace_settings_from_connection (connection, NM_CONNECTION (con_tmp)); + update_secrets_in_connection (con_tmp, connection); /* Also update setting for menu context and TAB-completion */ menu_ctx.curr_setting = s_name ? nm_connection_get_setting_by_name (connection, s_name) : NULL; |