summaryrefslogtreecommitdiff
path: root/libnm-util/nm-setting-vpn.c
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2013-12-11 14:33:49 +0100
committerThomas Haller <thaller@redhat.com>2014-01-15 17:01:53 +0100
commit123bf9eea44b2a570cf862f98564ca3a3e2ce8de (patch)
tree6aec16ba9352ebdee93f5b88de9fd29647ccec41 /libnm-util/nm-setting-vpn.c
parent0f382131294cae8dd8ff9b143ddbd110517759ee (diff)
downloadNetworkManager-123bf9eea44b2a570cf862f98564ca3a3e2ce8de.tar.gz
libnm-util: raise CHANGED signal in nm_connection_update_secrets only on change
This changes behaviour of nm_connection_update_secrets() in that it will now return %TRUE, if there are no secrets to be cleared. Seems more correct, to return success if there is nothing to do. Signed-off-by: Thomas Haller <thaller@redhat.com>
Diffstat (limited to 'libnm-util/nm-setting-vpn.c')
-rw-r--r--libnm-util/nm-setting-vpn.c38
1 files changed, 23 insertions, 15 deletions
diff --git a/libnm-util/nm-setting-vpn.c b/libnm-util/nm-setting-vpn.c
index 3de47a07f1..b5cffc14b6 100644
--- a/libnm-util/nm-setting-vpn.c
+++ b/libnm-util/nm-setting-vpn.c
@@ -429,7 +429,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return TRUE;
}
-static gboolean
+static NMSettingUpdateSecretResult
update_secret_string (NMSetting *setting,
const char *key,
const char *value,
@@ -437,21 +437,24 @@ update_secret_string (NMSetting *setting,
{
NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
- g_return_val_if_fail (key != NULL, FALSE);
- g_return_val_if_fail (value != NULL, FALSE);
+ g_return_val_if_fail (key != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
+ g_return_val_if_fail (value != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
if (!value || !strlen (value)) {
g_set_error (error, NM_SETTING_ERROR,
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
"Secret %s was empty", key);
- return FALSE;
+ return NM_SETTING_UPDATE_SECRET_ERROR;
}
+ if (g_strcmp0 (g_hash_table_lookup (priv->secrets, key), value) == 0)
+ return NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED;
+
g_hash_table_insert (priv->secrets, g_strdup (key), g_strdup (value));
- return TRUE;
+ return NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED;
}
-static gboolean
+static NMSettingUpdateSecretResult
update_secret_hash (NMSetting *setting,
GHashTable *secrets,
GError **error)
@@ -459,8 +462,9 @@ update_secret_hash (NMSetting *setting,
NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
GHashTableIter iter;
const char *name, *value;
+ NMSettingUpdateSecretResult result = NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED;
- g_return_val_if_fail (secrets != NULL, FALSE);
+ g_return_val_if_fail (secrets != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
/* Make sure the items are valid */
g_hash_table_iter_init (&iter, secrets);
@@ -469,14 +473,14 @@ update_secret_hash (NMSetting *setting,
g_set_error_literal (error, NM_SETTING_ERROR,
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
"Secret name was empty");
- return FALSE;
+ return NM_SETTING_UPDATE_SECRET_ERROR;
}
if (!value || !strlen (value)) {
g_set_error (error, NM_SETTING_ERROR,
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
"Secret %s value was empty", name);
- return FALSE;
+ return NM_SETTING_UPDATE_SECRET_ERROR;
}
}
@@ -492,19 +496,23 @@ update_secret_hash (NMSetting *setting,
continue;
}
+ if (g_strcmp0 (g_hash_table_lookup (priv->secrets, name), value) == 0)
+ continue;
+
g_hash_table_insert (priv->secrets, g_strdup (name), g_strdup (value));
+ result = NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED;
}
- return TRUE;
+ return result;
}
-static gboolean
+static int
update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **error)
{
- gboolean success = FALSE;
+ NMSettingUpdateSecretResult success = NM_SETTING_UPDATE_SECRET_ERROR;
- g_return_val_if_fail (key != NULL, FALSE);
- g_return_val_if_fail (value != NULL, FALSE);
+ g_return_val_if_fail (key != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
+ g_return_val_if_fail (value != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
if (G_VALUE_HOLDS_STRING (value)) {
/* Passing the string properties individually isn't correct, and won't
@@ -522,7 +530,7 @@ update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **
} else
g_set_error_literal (error, NM_SETTING_ERROR, NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH, key);
- if (success)
+ if (success == NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED)
g_object_notify (G_OBJECT (setting), NM_SETTING_VPN_SECRETS);
return success;