mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-10-06 16:21:50 +00:00
libnm: convert vpn-secrets to D-Bus in stable order
We should generate the GVariant in a stable manner. That implies to sort the keys first. Also, don't use the NM_SETTING_VPN_SECRETS getter, which first needs to clone all secrets.
This commit is contained in:
parent
3d9d2ad651
commit
7842da1606
|
@ -964,29 +964,30 @@ vpn_secrets_to_dbus (const NMSettInfoSetting *sett_info,
|
|||
NMConnectionSerializationFlags flags,
|
||||
const NMConnectionSerializationOptions *options)
|
||||
{
|
||||
gs_unref_hashtable GHashTable *secrets = NULL;
|
||||
const char *property_name = sett_info->property_infos[property_idx].name;
|
||||
NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
|
||||
GVariantBuilder builder;
|
||||
GHashTableIter iter;
|
||||
const char *key, *value;
|
||||
NMSettingSecretFlags secret_flags;
|
||||
gs_free const char **keys = NULL;
|
||||
guint i, len;
|
||||
|
||||
if (NM_FLAGS_HAS (flags, NM_CONNECTION_SERIALIZE_NO_SECRETS))
|
||||
return NULL;
|
||||
|
||||
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
|
||||
g_object_get (setting, property_name, &secrets, NULL);
|
||||
|
||||
if (secrets) {
|
||||
g_hash_table_iter_init (&iter, secrets);
|
||||
while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value)) {
|
||||
if (NM_FLAGS_HAS (flags, NM_CONNECTION_SERIALIZE_WITH_SECRETS_AGENT_OWNED)) {
|
||||
if ( !nm_setting_get_secret_flags (setting, key, &secret_flags, NULL)
|
||||
|| !NM_FLAGS_HAS (secret_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED))
|
||||
continue;
|
||||
}
|
||||
g_variant_builder_add (&builder, "{ss}", key, value);
|
||||
keys = nm_utils_strdict_get_keys (priv->secrets, TRUE, &len);
|
||||
for (i = 0; i < len; i++) {
|
||||
const char *key = keys[i];
|
||||
NMSettingSecretFlags secret_flags;
|
||||
|
||||
if (NM_FLAGS_HAS (flags, NM_CONNECTION_SERIALIZE_WITH_SECRETS_AGENT_OWNED)) {
|
||||
if ( !nm_setting_get_secret_flags (setting, key, &secret_flags, NULL)
|
||||
|| !NM_FLAGS_HAS (secret_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED))
|
||||
continue;
|
||||
}
|
||||
g_variant_builder_add (&builder,
|
||||
"{ss}",
|
||||
key,
|
||||
g_hash_table_lookup (priv->secrets, key));
|
||||
}
|
||||
|
||||
return g_variant_builder_end (&builder);
|
||||
|
|
Loading…
Reference in a new issue