summaryrefslogtreecommitdiff
path: root/libnm-core/nm-setting-vpn.c
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-01-13 21:23:02 +0100
committerThomas Haller <thaller@redhat.com>2019-01-22 16:30:23 +0100
commit08a0f682e192b4288170171bb89727d944555d4c (patch)
tree6d2125da4508f9a927e11b4751889973885d668e /libnm-core/nm-setting-vpn.c
parent2210d4514eb9f9dec5ca55415cc8b8dd0f9afefc (diff)
downloadNetworkManager-08a0f682e192b4288170171bb89727d944555d4c.tar.gz
libnm: always call clear_secrets() function for all properties
And merge it with the version that uses no flags. Previously, clear_secrets(_with_flags()) was only implemented by NMSettingVpn. All other settings would only consider GObject-based properties. As we will add secrets that have no GObject property, call the virtual function always, so that the setting can hook into this (for WireGuard peers).
Diffstat (limited to 'libnm-core/nm-setting-vpn.c')
-rw-r--r--libnm-core/nm-setting-vpn.c52
1 files changed, 33 insertions, 19 deletions
diff --git a/libnm-core/nm-setting-vpn.c b/libnm-core/nm-setting-vpn.c
index 581c70d02a..1371140ec4 100644
--- a/libnm-core/nm-setting-vpn.c
+++ b/libnm-core/nm-setting-vpn.c
@@ -813,29 +813,43 @@ compare_property (const NMSettInfoSetting *sett_info,
}
static gboolean
-clear_secrets_with_flags (NMSetting *setting,
- GParamSpec *pspec,
- NMSettingClearSecretsWithFlagsFn func,
- gpointer user_data)
+clear_secrets (const NMSettInfoSetting *sett_info,
+ guint property_idx,
+ NMSetting *setting,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data)
{
NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
+ GParamSpec *prop_spec = sett_info->property_infos[property_idx].param_spec;
GHashTableIter iter;
const char *secret;
gboolean changed = TRUE;
- if (priv->secrets == NULL)
+ if ( !prop_spec
+ || !NM_FLAGS_HAS (prop_spec->flags, NM_SETTING_PARAM_SECRET))
+ return FALSE;
+
+ nm_assert (nm_streq (prop_spec->name, NM_SETTING_VPN_SECRETS));
+
+ if (!priv->secrets)
return FALSE;
- /* Iterate through secrets hash and check each entry */
g_hash_table_iter_init (&iter, priv->secrets);
while (g_hash_table_iter_next (&iter, (gpointer) &secret, NULL)) {
- NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
- nm_setting_get_secret_flags (setting, secret, &flags, NULL);
- if (func (setting, secret, flags, user_data) == TRUE) {
- g_hash_table_iter_remove (&iter);
- changed = TRUE;
- }
+ if (func) {
+ NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
+
+ if (!nm_setting_get_secret_flags (setting, secret, &flags, NULL))
+ nm_assert_not_reached ();
+
+ if (!func (setting, secret, flags, user_data))
+ continue;
+ } else
+ nm_assert (nm_setting_get_secret_flags (setting, secret, NULL, NULL));
+
+ g_hash_table_iter_remove (&iter);
+ changed = TRUE;
}
if (changed)
@@ -963,13 +977,13 @@ nm_setting_vpn_class_init (NMSettingVpnClass *klass)
object_class->set_property = set_property;
object_class->finalize = finalize;
- setting_class->verify = verify;
- setting_class->update_one_secret = update_one_secret;
- setting_class->get_secret_flags = get_secret_flags;
- setting_class->set_secret_flags = set_secret_flags;
- setting_class->need_secrets = need_secrets;
- setting_class->compare_property = compare_property;
- setting_class->clear_secrets_with_flags = clear_secrets_with_flags;
+ setting_class->verify = verify;
+ setting_class->update_one_secret = update_one_secret;
+ setting_class->get_secret_flags = get_secret_flags;
+ setting_class->set_secret_flags = set_secret_flags;
+ setting_class->need_secrets = need_secrets;
+ setting_class->compare_property = compare_property;
+ setting_class->clear_secrets = clear_secrets;
/**
* NMSettingVpn:service-type: