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:
@@ -964,29 +964,30 @@ vpn_secrets_to_dbus (const NMSettInfoSetting *sett_info,
|
|||||||
NMConnectionSerializationFlags flags,
|
NMConnectionSerializationFlags flags,
|
||||||
const NMConnectionSerializationOptions *options)
|
const NMConnectionSerializationOptions *options)
|
||||||
{
|
{
|
||||||
gs_unref_hashtable GHashTable *secrets = NULL;
|
NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
|
||||||
const char *property_name = sett_info->property_infos[property_idx].name;
|
|
||||||
GVariantBuilder builder;
|
GVariantBuilder builder;
|
||||||
GHashTableIter iter;
|
gs_free const char **keys = NULL;
|
||||||
const char *key, *value;
|
guint i, len;
|
||||||
NMSettingSecretFlags secret_flags;
|
|
||||||
|
|
||||||
if (NM_FLAGS_HAS (flags, NM_CONNECTION_SERIALIZE_NO_SECRETS))
|
if (NM_FLAGS_HAS (flags, NM_CONNECTION_SERIALIZE_NO_SECRETS))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
|
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
|
||||||
g_object_get (setting, property_name, &secrets, NULL);
|
|
||||||
|
|
||||||
if (secrets) {
|
keys = nm_utils_strdict_get_keys (priv->secrets, TRUE, &len);
|
||||||
g_hash_table_iter_init (&iter, secrets);
|
for (i = 0; i < len; i++) {
|
||||||
while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value)) {
|
const char *key = keys[i];
|
||||||
if (NM_FLAGS_HAS (flags, NM_CONNECTION_SERIALIZE_WITH_SECRETS_AGENT_OWNED)) {
|
NMSettingSecretFlags secret_flags;
|
||||||
if ( !nm_setting_get_secret_flags (setting, key, &secret_flags, NULL)
|
|
||||||
|| !NM_FLAGS_HAS (secret_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED))
|
if (NM_FLAGS_HAS (flags, NM_CONNECTION_SERIALIZE_WITH_SECRETS_AGENT_OWNED)) {
|
||||||
continue;
|
if ( !nm_setting_get_secret_flags (setting, key, &secret_flags, NULL)
|
||||||
}
|
|| !NM_FLAGS_HAS (secret_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED))
|
||||||
g_variant_builder_add (&builder, "{ss}", key, value);
|
continue;
|
||||||
}
|
}
|
||||||
|
g_variant_builder_add (&builder,
|
||||||
|
"{ss}",
|
||||||
|
key,
|
||||||
|
g_hash_table_lookup (priv->secrets, key));
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_variant_builder_end (&builder);
|
return g_variant_builder_end (&builder);
|
||||||
|
Reference in New Issue
Block a user