summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-10-19 11:22:14 +0200
committerThomas Haller <thaller@redhat.com>2017-10-25 14:04:36 +0200
commitbd66285b1c13d4116fcd367fd13919de751a8f77 (patch)
treed7012548ab5ea58c707309d67dc757308276cd2f
parent7d7bc99ff06bfa0416ccad9db02a519b769721ee (diff)
downloadNetworkManager-bd66285b1c13d4116fcd367fd13919de751a8f77.tar.gz
settings: get rid of callback arguments for nm_settings_connection_commit_changes()
No need to return an error result via a callback function. Just return the plain error.
-rw-r--r--src/nm-checkpoint.c1
-rw-r--r--src/nm-manager.c2
-rw-r--r--src/settings/nm-settings-connection.c183
-rw-r--r--src/settings/nm-settings-connection.h11
-rw-r--r--src/settings/plugins/ifupdown/nms-ifupdown-plugin.c4
5 files changed, 83 insertions, 118 deletions
diff --git a/src/nm-checkpoint.c b/src/nm-checkpoint.c
index 2dd76d590f..2bf1844e82 100644
--- a/src/nm-checkpoint.c
+++ b/src/nm-checkpoint.c
@@ -260,7 +260,6 @@ activate:
dev_checkpoint->settings_connection);
nm_settings_connection_commit_changes (connection,
NM_SETTINGS_CONNECTION_COMMIT_REASON_NONE,
- NULL,
NULL);
}
} else {
diff --git a/src/nm-manager.c b/src/nm-manager.c
index fa67ee7842..a876fcb119 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -4036,7 +4036,7 @@ activation_add_done (NMSettings *settings,
if (_internal_activate_generic (self, active, &local)) {
nm_settings_connection_commit_changes (new_connection,
NM_SETTINGS_CONNECTION_COMMIT_REASON_USER_ACTION | NM_SETTINGS_CONNECTION_COMMIT_REASON_ID_CHANGED,
- NULL, NULL);
+ NULL);
g_dbus_method_invocation_return_value (
context,
g_variant_new ("(oo)",
diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c
index fa70d95cb8..8ef9f32228 100644
--- a/src/settings/nm-settings-connection.c
+++ b/src/settings/nm-settings-connection.c
@@ -597,42 +597,34 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self,
return success;
}
-void
+gboolean
nm_settings_connection_commit_changes (NMSettingsConnection *self,
NMSettingsConnectionCommitReason commit_reason,
- NMSettingsConnectionCommitFunc callback,
- gpointer user_data)
+ GError **error)
{
- gs_free_error GError *error = NULL;
NMSettingsConnectionClass *klass;
- g_return_if_fail (NM_IS_SETTINGS_CONNECTION (self));
+ g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (self), FALSE);
klass = NM_SETTINGS_CONNECTION_GET_CLASS (self);
if (!klass->commit_changes) {
- g_set_error (&error,
+ g_set_error (error,
NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_FAILED,
"writing settings not supported");
- goto out;
+ return FALSE;
}
if (!klass->commit_changes (self,
commit_reason,
- &error)) {
- nm_assert (error);
- goto out;
+ error)) {
+ return FALSE;
}
set_unsaved (self, FALSE);
-out:
- if (callback) {
- g_object_ref (self);
- callback (self, error, user_data);
- g_object_unref (self);
- }
+ return TRUE;
}
static void
@@ -838,15 +830,6 @@ secret_is_system_owned (NMSettingSecretFlags flags,
}
static void
-new_secrets_commit_cb (NMSettingsConnection *self,
- GError *error,
- gpointer user_data)
-{
- if (error)
- _LOGW ("Error saving new secrets to backing storage: %s", error->message);
-}
-
-static void
get_cmp_flags (NMSettingsConnection *self, /* only needed for logging */
GetSecretsInfo *info, /* only needed for logging */
NMConnection *connection,
@@ -932,6 +915,8 @@ nm_settings_connection_new_secrets (NMSettingsConnection *self,
GVariant *secrets,
GError **error)
{
+ gs_free_error GError *local = NULL;
+
if (!nm_settings_connection_has_unmodified_applied_connection (self, applied_connection,
NM_SETTING_COMPARE_FLAG_NONE)) {
g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
@@ -944,8 +929,11 @@ nm_settings_connection_new_secrets (NMSettingsConnection *self,
update_system_secrets_cache (self);
update_agent_secrets_cache (self, NULL);
- nm_settings_connection_commit_changes (self, NM_SETTINGS_CONNECTION_COMMIT_REASON_NONE,
- new_secrets_commit_cb, NULL);
+
+ if (!nm_settings_connection_commit_changes (self,
+ NM_SETTINGS_CONNECTION_COMMIT_REASON_NONE,
+ &local))
+ _LOGW ("Error saving new secrets to backing storage: %s", local->message);
return TRUE;
}
@@ -1056,11 +1044,16 @@ get_secrets_done_cb (NMAgentManager *manager,
* nothing has changed, since agent-owned secrets don't get saved here.
*/
if (agent_had_system) {
+ gs_free_error GError *local2 = NULL;
+
_LOGD ("(%s:%p) saving new secrets to backing storage",
setting_name,
info);
- nm_settings_connection_commit_changes (self, NM_SETTINGS_CONNECTION_COMMIT_REASON_NONE, new_secrets_commit_cb, NULL);
+ if (!nm_settings_connection_commit_changes (self,
+ NM_SETTINGS_CONNECTION_COMMIT_REASON_NONE,
+ &local2))
+ _LOGW ("Error saving new secrets to backing storage: %s", local2->message);
} else {
_LOGD ("(%s:%p) new agent secrets processed",
setting_name,
@@ -1602,33 +1595,6 @@ update_complete (NMSettingsConnection *self,
}
static void
-con_update_cb (NMSettingsConnection *self,
- GError *error,
- gpointer user_data)
-{
- UpdateInfo *info = user_data;
- NMConnection *for_agent;
-
- if (!error) {
- /* Dupe the connection so we can clear out non-agent-owned secrets,
- * as agent-owned secrets are the only ones we send back be saved.
- * Only send secrets to agents of the same UID that called update too.
- */
- for_agent = nm_simple_connection_new_clone (NM_CONNECTION (self));
- nm_connection_clear_secrets_with_flags (for_agent,
- secrets_filter_cb,
- GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED));
- nm_agent_manager_save_secrets (info->agent_mgr,
- nm_connection_get_path (NM_CONNECTION (self)),
- for_agent,
- info->subject);
- g_object_unref (for_agent);
- }
-
- update_complete (self, info, error);
-}
-
-static void
update_auth_cb (NMSettingsConnection *self,
GDBusMethodInvocation *context,
NMAuthSubject *subject,
@@ -1650,11 +1616,9 @@ update_auth_cb (NMSettingsConnection *self,
if (info->save_to_disk) {
nm_settings_connection_commit_changes (self,
NM_SETTINGS_CONNECTION_COMMIT_REASON_USER_ACTION,
- con_update_cb,
- info);
- } else
- update_complete (self, info, NULL);
- return;
+ &local);
+ }
+ goto out;
}
if (!any_secrets_present (info->new_settings)) {
@@ -1686,31 +1650,46 @@ update_auth_cb (NMSettingsConnection *self,
if (info->save_to_disk) {
klass = NM_SETTINGS_CONNECTION_GET_CLASS (self);
if (klass->can_commit) {
- if (!klass->can_commit (self, &local)) {
- con_update_cb (self, local, info);
- return;
- }
+ if (!klass->can_commit (self, &local))
+ goto out;
}
}
- if (!nm_settings_connection_replace_settings (self, info->new_settings, TRUE, "replace-and-commit-disk", &local)) {
- con_update_cb (self, local, info);
- return;
- }
+ if (!nm_settings_connection_replace_settings (self, info->new_settings, TRUE, "replace-and-commit-disk", &local))
+ goto out;
- if (!info->save_to_disk) {
- con_update_cb (self, NULL, info);
- return;
- }
+ if (!info->save_to_disk)
+ goto out;
commit_reason = NM_SETTINGS_CONNECTION_COMMIT_REASON_USER_ACTION;
if (nm_streq0 (nm_connection_get_id (NM_CONNECTION (self)),
nm_connection_get_id (info->new_settings)))
commit_reason |= NM_SETTINGS_CONNECTION_COMMIT_REASON_ID_CHANGED;
- nm_settings_connection_commit_changes (self, commit_reason, con_update_cb, info);
+ nm_settings_connection_commit_changes (self, commit_reason, &local);
+
+out:
+ if (!local) {
+ gs_unref_object NMConnection *for_agent = NULL;
+
+ /* Dupe the connection so we can clear out non-agent-owned secrets,
+ * as agent-owned secrets are the only ones we send back be saved.
+ * Only send secrets to agents of the same UID that called update too.
+ */
+ for_agent = nm_simple_connection_new_clone (NM_CONNECTION (self));
+ nm_connection_clear_secrets_with_flags (for_agent,
+ secrets_filter_cb,
+ GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED));
+ nm_agent_manager_save_secrets (info->agent_mgr,
+ nm_connection_get_path (NM_CONNECTION (self)),
+ for_agent,
+ info->subject);
+ }
+
+ update_complete (self, info, local);
}
+
static const char *
get_update_modify_permission (NMConnection *old, NMConnection *new)
{
@@ -1990,23 +1969,6 @@ impl_settings_connection_get_secrets (NMSettingsConnection *self,
}
static void
-clear_secrets_cb (NMSettingsConnection *self,
- GError *error,
- gpointer user_data)
-{
- CallbackInfo *info = user_data;
-
- if (error)
- g_dbus_method_invocation_return_gerror (info->context, error);
- else
- g_dbus_method_invocation_return_value (info->context, NULL);
-
- nm_audit_log_connection_op (NM_AUDIT_OP_CONN_CLEAR_SECRETS, self,
- !error, NULL, info->subject, error ? error->message : NULL);
- g_free (info);
-}
-
-static void
dbus_clear_secrets_auth_cb (NMSettingsConnection *self,
GDBusMethodInvocation *context,
NMAuthSubject *subject,
@@ -2014,31 +1976,38 @@ dbus_clear_secrets_auth_cb (NMSettingsConnection *self,
gpointer user_data)
{
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
- CallbackInfo *info;
+ gs_free_error GError *local = NULL;
if (error) {
g_dbus_method_invocation_return_gerror (context, error);
nm_audit_log_connection_op (NM_AUDIT_OP_CONN_CLEAR_SECRETS, self,
FALSE, NULL, subject, error->message);
- } else {
- /* Clear secrets in connection and caches */
- nm_connection_clear_secrets (NM_CONNECTION (self));
- if (priv->system_secrets)
- nm_connection_clear_secrets (priv->system_secrets);
- if (priv->agent_secrets)
- nm_connection_clear_secrets (priv->agent_secrets);
+ return;
+ }
- /* Tell agents to remove secrets for this connection */
- nm_agent_manager_delete_secrets (priv->agent_mgr,
- nm_connection_get_path (NM_CONNECTION (self)),
- NM_CONNECTION (self));
+ /* Clear secrets in connection and caches */
+ nm_connection_clear_secrets (NM_CONNECTION (self));
+ if (priv->system_secrets)
+ nm_connection_clear_secrets (priv->system_secrets);
+ if (priv->agent_secrets)
+ nm_connection_clear_secrets (priv->agent_secrets);
- info = g_malloc0 (sizeof (*info));
- info->context = context;
- info->subject = subject;
+ /* Tell agents to remove secrets for this connection */
+ nm_agent_manager_delete_secrets (priv->agent_mgr,
+ nm_connection_get_path (NM_CONNECTION (self)),
+ NM_CONNECTION (self));
- nm_settings_connection_commit_changes (self, NM_SETTINGS_CONNECTION_COMMIT_REASON_NONE, clear_secrets_cb, info);
- }
+ nm_settings_connection_commit_changes (self,
+ NM_SETTINGS_CONNECTION_COMMIT_REASON_NONE,
+ &local);
+
+ nm_audit_log_connection_op (NM_AUDIT_OP_CONN_CLEAR_SECRETS, self,
+ !local, NULL, subject, local ? local->message : NULL);
+
+ if (local)
+ g_dbus_method_invocation_return_gerror (context, local);
+ else
+ g_dbus_method_invocation_return_value (context, NULL);
}
static void
diff --git a/src/settings/nm-settings-connection.h b/src/settings/nm-settings-connection.h
index 8ce86897a7..3a38fa650d 100644
--- a/src/settings/nm-settings-connection.h
+++ b/src/settings/nm-settings-connection.h
@@ -94,10 +94,6 @@ typedef struct _NMSettingsConnectionCallId *NMSettingsConnectionCallId;
typedef struct _NMSettingsConnectionClass NMSettingsConnectionClass;
-typedef void (*NMSettingsConnectionCommitFunc) (NMSettingsConnection *self,
- GError *error,
- gpointer user_data);
-
typedef void (*NMSettingsConnectionDeleteFunc) (NMSettingsConnection *self,
GError *error,
gpointer user_data);
@@ -132,10 +128,9 @@ gboolean nm_settings_connection_has_unmodified_applied_connection (NMSettingsCon
NMConnection *applied_connection,
NMSettingCompareFlags compare_flage);
-void nm_settings_connection_commit_changes (NMSettingsConnection *self,
- NMSettingsConnectionCommitReason commit_reason,
- NMSettingsConnectionCommitFunc callback,
- gpointer user_data);
+gboolean nm_settings_connection_commit_changes (NMSettingsConnection *self,
+ NMSettingsConnectionCommitReason commit_reason,
+ GError **error);
gboolean nm_settings_connection_replace_settings (NMSettingsConnection *self,
NMConnection *new_connection,
diff --git a/src/settings/plugins/ifupdown/nms-ifupdown-plugin.c b/src/settings/plugins/ifupdown/nms-ifupdown-plugin.c
index b718a3f831..161298ed0e 100644
--- a/src/settings/plugins/ifupdown/nms-ifupdown-plugin.c
+++ b/src/settings/plugins/ifupdown/nms-ifupdown-plugin.c
@@ -139,7 +139,9 @@ bind_device_to_connection (SettingsPluginIfupdown *self,
g_object_set (s_wifi, NM_SETTING_WIRELESS_MAC_ADDRESS, address, NULL);
}
- nm_settings_connection_commit_changes (NM_SETTINGS_CONNECTION (exported), NM_SETTINGS_CONNECTION_COMMIT_REASON_NONE, NULL, NULL);
+ nm_settings_connection_commit_changes (NM_SETTINGS_CONNECTION (exported),
+ NM_SETTINGS_CONNECTION_COMMIT_REASON_NONE,
+ NULL);
}
static void