mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-09-06 17:14:02 +00:00
libnm: don't special case "vpn.secrets" property in property_to_dbus()
"nm-setting.c" (and property_to_dbus()) should stay independent of actualy settings implementations. Instead, the property-info should control the behavior. What I like about this change is also that the generic handling is not a flags "handle_secrets_for_vpn", but it just says to skip checking the param-spec flags and directly call the to_dbus_fcn(). It's just a generally useful thing to do, to let the to_dbus_fcn() function also handle checking the property flags. The fact that only vpn.secrets properties uses this for a certain pupose, is abstracted in a way that makes sense.
This commit is contained in:
parent
5a5e08794e
commit
29a451d33a
|
@ -67,6 +67,10 @@ gboolean _nm_setting_clear_secrets (NMSetting *setting,
|
|||
*/
|
||||
#define NM_SETTING_PARAM_REAPPLY_IMMEDIATELY (1 << (6 + G_PARAM_USER_SHIFT))
|
||||
|
||||
/* property_to_dbus() should ignore the property flags, and instead always calls to_dbus_fcn()
|
||||
*/
|
||||
#define NM_SETTING_PARAM_TO_DBUS_IGNORE_FLAGS (1 << (7 + G_PARAM_USER_SHIFT))
|
||||
|
||||
extern const NMSettInfoPropertType nm_sett_info_propert_type_deprecated_interface_name;
|
||||
extern const NMSettInfoPropertType nm_sett_info_propert_type_deprecated_ignore_i;
|
||||
extern const NMSettInfoPropertType nm_sett_info_propert_type_deprecated_ignore_u;
|
||||
|
|
|
@ -921,6 +921,9 @@ vpn_secrets_to_dbus (const NMSettInfoSetting *sett_info,
|
|||
const char *key, *value;
|
||||
NMSettingSecretFlags secret_flags;
|
||||
|
||||
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);
|
||||
|
||||
|
@ -1150,6 +1153,7 @@ nm_setting_vpn_class_init (NMSettingVpnClass *klass)
|
|||
G_TYPE_HASH_TABLE,
|
||||
G_PARAM_READWRITE |
|
||||
NM_SETTING_PARAM_SECRET |
|
||||
NM_SETTING_PARAM_TO_DBUS_IGNORE_FLAGS |
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj (properties_override,
|
||||
obj_properties[PROP_SECRETS],
|
||||
|
|
|
@ -586,7 +586,8 @@ property_to_dbus (const NMSettInfoSetting *sett_info,
|
|||
if (!property->param_spec) {
|
||||
if (!property->property_type->to_dbus_fcn)
|
||||
return NULL;
|
||||
} else if (!ignore_flags) {
|
||||
} else if ( !ignore_flags
|
||||
&& !NM_FLAGS_HAS (property->param_spec->flags, NM_SETTING_PARAM_TO_DBUS_IGNORE_FLAGS)) {
|
||||
if (!NM_FLAGS_HAS (property->param_spec->flags, G_PARAM_WRITABLE))
|
||||
return NULL;
|
||||
|
||||
|
@ -598,13 +599,7 @@ property_to_dbus (const NMSettInfoSetting *sett_info,
|
|||
if (NM_FLAGS_HAS (flags, NM_CONNECTION_SERIALIZE_NO_SECRETS))
|
||||
return NULL;
|
||||
|
||||
/* Check agent secrets. Secrets in the vpn.secrets property are special as
|
||||
* the flag for each of them is specified as a separate key in the
|
||||
* vpn.data property. They are handled separately in the to_dbus_fcn()
|
||||
* of VPN setting. */
|
||||
if ( NM_FLAGS_HAS (flags, NM_CONNECTION_SERIALIZE_WITH_SECRETS_AGENT_OWNED)
|
||||
&& !nm_streq (nm_setting_get_name (setting), NM_SETTING_VPN_SETTING_NAME)
|
||||
&& !nm_streq (property->name, NM_SETTING_VPN_SECRETS)) {
|
||||
if (NM_FLAGS_HAS (flags, NM_CONNECTION_SERIALIZE_WITH_SECRETS_AGENT_OWNED)) {
|
||||
NMSettingSecretFlags f;
|
||||
|
||||
/* see also _nm_connection_serialize_secrets() */
|
||||
|
|
|
@ -3487,6 +3487,9 @@ test_setting_metadata (void)
|
|||
else
|
||||
g_assert_cmpstr (g_value_get_string (&val), ==, default_value);
|
||||
}
|
||||
|
||||
if (NM_FLAGS_HAS (sip->param_spec->flags, NM_SETTING_PARAM_TO_DBUS_IGNORE_FLAGS))
|
||||
g_assert (sip->property_type->to_dbus_fcn);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue