diff options
Diffstat (limited to 'libnm-core')
-rw-r--r-- | libnm-core/nm-connection.c | 7 | ||||
-rw-r--r-- | libnm-core/nm-core-internal.h | 2 | ||||
-rw-r--r-- | libnm-core/nm-setting-private.h | 1 | ||||
-rw-r--r-- | libnm-core/nm-setting.c | 10 | ||||
-rw-r--r-- | libnm-core/nm-simple-connection.c | 7 | ||||
-rw-r--r-- | libnm-core/tests/test-general.c | 43 |
6 files changed, 58 insertions, 12 deletions
diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c index 40322427b4..ba740ae748 100644 --- a/libnm-core/nm-connection.c +++ b/libnm-core/nm-connection.c @@ -238,6 +238,7 @@ validate_permissions_type (GVariant *variant, GError **error) * @connection: a #NMConnection * @new_settings: a #GVariant of type %NM_VARIANT_TYPE_CONNECTION, with the new settings * @parse_flags: flags. + * @has_secrets: XXX * @error: location to store error, or %NULL * * Replaces @connection's settings with @new_settings (which must be @@ -254,6 +255,7 @@ gboolean _nm_connection_replace_settings (NMConnection *connection, GVariant *new_settings, NMSettingParseFlags parse_flags, + gboolean *has_secrets, GError **error) { NMConnectionPrivate *priv; @@ -316,7 +318,8 @@ _nm_connection_replace_settings (NMConnection *connection, } } - setting = _nm_setting_new_from_dbus (type, setting_dict, new_settings, parse_flags, &local); + setting = _nm_setting_new_from_dbus (type, setting_dict, new_settings, + parse_flags, has_secrets, &local); if (!setting) { if (NM_FLAGS_HAS (parse_flags, NM_SETTING_PARSE_FLAGS_BEST_EFFORT)) @@ -378,7 +381,7 @@ nm_connection_replace_settings (NMConnection *connection, GVariant *new_settings, GError **error) { - return _nm_connection_replace_settings (connection, new_settings, NM_SETTING_PARSE_FLAGS_NONE, error); + return _nm_connection_replace_settings (connection, new_settings, NM_SETTING_PARSE_FLAGS_NONE, NULL, error); } /** diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h index 74f45100b1..69791d1414 100644 --- a/libnm-core/nm-core-internal.h +++ b/libnm-core/nm-core-internal.h @@ -115,10 +115,12 @@ typedef enum { /*< skip >*/ gboolean _nm_connection_replace_settings (NMConnection *connection, GVariant *new_settings, NMSettingParseFlags parse_flags, + gboolean *has_secrets, GError **error); NMConnection *_nm_simple_connection_new_from_dbus (GVariant *dict, NMSettingParseFlags parse_flags, + gboolean *has_secrets, GError **error); guint32 _nm_setting_get_setting_priority (NMSetting *setting); diff --git a/libnm-core/nm-setting-private.h b/libnm-core/nm-setting-private.h index 8d09e3d759..2200af4180 100644 --- a/libnm-core/nm-setting-private.h +++ b/libnm-core/nm-setting-private.h @@ -126,6 +126,7 @@ NMSetting *_nm_setting_new_from_dbus (GType setting_type, GVariant *setting_dict, GVariant *connection_dict, NMSettingParseFlags parse_flags, + gboolean *has_secrets, GError **error); typedef GVariant * (*NMSettingPropertyGetFunc) (NMSetting *setting, diff --git a/libnm-core/nm-setting.c b/libnm-core/nm-setting.c index 82467c9c6a..866b92e3cc 100644 --- a/libnm-core/nm-setting.c +++ b/libnm-core/nm-setting.c @@ -775,6 +775,7 @@ _nm_setting_to_dbus (NMSetting *setting, NMConnection *connection, NMConnectionS * @connection_dict: the #GVariant containing an %NM_VARIANT_TYPE_CONNECTION * dictionary mapping setting names to dictionaries. * @parse_flags: flags to determine behavior during parsing. + * @has_secrets: XXX * @error: location to store error, or %NULL * * Creates a new #NMSetting object and populates that object with the properties @@ -792,6 +793,7 @@ _nm_setting_new_from_dbus (GType setting_type, GVariant *setting_dict, GVariant *connection_dict, NMSettingParseFlags parse_flags, + gboolean *has_secrets, GError **error) { gs_unref_object NMSetting *setting = NULL; @@ -852,8 +854,12 @@ _nm_setting_new_from_dbus (GType setting_type, value = g_variant_lookup_value (setting_dict, property->name, NULL); - if (value && keys) - g_hash_table_remove (keys, property->name); + if (value) { + if (keys) + g_hash_table_remove (keys, property->name); + if (has_secrets && property->param_spec && (property->param_spec->flags & NM_SETTING_PARAM_SECRET)) + *has_secrets = TRUE; + } if (value && property->set_func) { diff --git a/libnm-core/nm-simple-connection.c b/libnm-core/nm-simple-connection.c index 11700666f5..2cc58454b1 100644 --- a/libnm-core/nm-simple-connection.c +++ b/libnm-core/nm-simple-connection.c @@ -53,6 +53,7 @@ nm_simple_connection_new (void) /** * _nm_simple_connection_new_from_dbus: * @dict: a #GVariant of type %NM_VARIANT_TYPE_CONNECTION describing the connection + * @has_secrets: XXX * @error: on unsuccessful return, an error * * Creates a new #NMSimpleConnection from a hash table describing the @@ -64,7 +65,8 @@ nm_simple_connection_new (void) * an error. **/ NMConnection * -_nm_simple_connection_new_from_dbus (GVariant *dict, NMSettingParseFlags parse_flags, GError **error) +_nm_simple_connection_new_from_dbus (GVariant *dict, NMSettingParseFlags parse_flags, + gboolean *has_secrets, GError **error) { NMConnection *connection; @@ -74,7 +76,7 @@ _nm_simple_connection_new_from_dbus (GVariant *dict, NMSettingParseFlags parse_f g_return_val_if_fail (!NM_FLAGS_ALL (parse_flags, NM_SETTING_PARSE_FLAGS_STRICT | NM_SETTING_PARSE_FLAGS_BEST_EFFORT), NULL); connection = nm_simple_connection_new (); - if (!_nm_connection_replace_settings (connection, dict, parse_flags, error)) + if (!_nm_connection_replace_settings (connection, dict, parse_flags, has_secrets, error)) g_clear_object (&connection); return connection; } @@ -97,6 +99,7 @@ nm_simple_connection_new_from_dbus (GVariant *dict, GError **error) { return _nm_simple_connection_new_from_dbus (dict, NM_SETTING_PARSE_FLAGS_NORMALIZE, + NULL, error); } diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index 1cb8d7af99..e8eb50ee82 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -77,7 +77,7 @@ G_STATIC_ASSERT (sizeof (bool) <= sizeof (int)); static NMConnection * _connection_new_from_dbus (GVariant *dict, GError **error) { - return _nm_simple_connection_new_from_dbus (dict, NM_SETTING_PARSE_FLAGS_NORMALIZE, error); + return _nm_simple_connection_new_from_dbus (dict, NM_SETTING_PARSE_FLAGS_NORMALIZE, NULL, error); } static void @@ -1026,15 +1026,18 @@ test_setting_new_from_dbus (void) { NMSettingWirelessSecurity *s_wsec; GVariant *dict; + gboolean has_secrets; s_wsec = make_test_wsec_setting ("setting-new-from-dbus"); dict = _nm_setting_to_dbus (NM_SETTING (s_wsec), NULL, NM_CONNECTION_SERIALIZE_ALL); g_object_unref (s_wsec); - s_wsec = (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRELESS_SECURITY, dict, NULL, NM_SETTING_PARSE_FLAGS_NONE, NULL); + s_wsec = (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRELESS_SECURITY, dict, NULL, + NM_SETTING_PARSE_FLAGS_NONE, &has_secrets, NULL); g_variant_unref (dict); g_assert (s_wsec); + g_assert (has_secrets); g_assert_cmpstr (nm_setting_wireless_security_get_key_mgmt (s_wsec), ==, "wpa-psk"); g_assert_cmpstr (nm_setting_wireless_security_get_leap_username (s_wsec), ==, "foobarbaz"); g_assert_cmpstr (nm_setting_wireless_security_get_psk (s_wsec), ==, "random psk"); @@ -1042,6 +1045,30 @@ test_setting_new_from_dbus (void) } static void +test_setting_new_from_dbus_no_secrets (void) +{ + NMSettingWirelessSecurity *s_wsec; + GVariant *dict; + gboolean has_secrets; + + s_wsec = make_test_wsec_setting ("setting-new-from-dbus"); + dict = _nm_setting_to_dbus (NM_SETTING (s_wsec), NULL, NM_CONNECTION_SERIALIZE_NO_SECRETS); + g_object_unref (s_wsec); + + s_wsec = (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRELESS_SECURITY, dict, NULL, + NM_SETTING_PARSE_FLAGS_NONE, &has_secrets, NULL); + g_variant_unref (dict); + + g_assert (s_wsec); + g_assert (!has_secrets); + g_assert_cmpstr (nm_setting_wireless_security_get_key_mgmt (s_wsec), ==, "wpa-psk"); + g_assert_cmpstr (nm_setting_wireless_security_get_leap_username (s_wsec), ==, "foobarbaz"); + g_assert_cmpstr (nm_setting_wireless_security_get_psk (s_wsec), ==, NULL); + g_object_unref (s_wsec); +} + + +static void test_setting_new_from_dbus_transform (void) { NMSetting *s_wired; @@ -1060,7 +1087,7 @@ test_setting_new_from_dbus_transform (void) dbus_mac_address, ETH_ALEN, 1)); dict = g_variant_builder_end (&builder); - s_wired = _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRED, dict, NULL, NM_SETTING_PARSE_FLAGS_NONE, &error); + s_wired = _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRED, dict, NULL, NM_SETTING_PARSE_FLAGS_NONE, NULL, &error); g_assert_no_error (error); g_assert_cmpstr (nm_setting_wired_get_mac_address (NM_SETTING_WIRED (s_wired)), ==, test_mac_address); @@ -1086,7 +1113,8 @@ test_setting_new_from_dbus_enum (void) g_variant_new_int32 (NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR)); dict = g_variant_builder_end (&builder); - s_ip6 = (NMSettingIP6Config *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_IP6_CONFIG, dict, NULL, NM_SETTING_PARSE_FLAGS_NONE, &error); + s_ip6 = (NMSettingIP6Config *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_IP6_CONFIG, dict, NULL, + NM_SETTING_PARSE_FLAGS_NONE, NULL, &error); g_assert_no_error (error); g_assert_cmpint (nm_setting_ip6_config_get_ip6_privacy (s_ip6), ==, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR); @@ -1105,7 +1133,8 @@ test_setting_new_from_dbus_enum (void) NM_SETTING_SECRET_FLAG_NOT_SAVED)); dict = g_variant_builder_end (&builder); - s_wsec = (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRELESS_SECURITY, dict, NULL, NM_SETTING_PARSE_FLAGS_NONE, &error); + s_wsec = (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRELESS_SECURITY, dict, NULL, + NM_SETTING_PARSE_FLAGS_NONE, NULL, &error); g_assert_no_error (error); g_assert_cmpint (nm_setting_wireless_security_get_wep_key_type (s_wsec), ==, NM_WEP_KEY_TYPE_KEY); @@ -1122,7 +1151,8 @@ test_setting_new_from_dbus_enum (void) g_variant_new_byte ('E')); dict = g_variant_builder_end (&builder); - s_serial = (NMSettingSerial *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_SERIAL, dict, NULL, NM_SETTING_PARSE_FLAGS_NONE, &error); + s_serial = (NMSettingSerial *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_SERIAL, dict, NULL, + NM_SETTING_PARSE_FLAGS_NONE, NULL, &error); g_assert_no_error (error); g_assert_cmpint (nm_setting_serial_get_parity (s_serial), ==, NM_SETTING_SERIAL_PARITY_EVEN); @@ -5491,6 +5521,7 @@ int main (int argc, char **argv) g_test_add_func ("/core/general/test_connection_to_dbus_setting_name", test_connection_to_dbus_setting_name); g_test_add_func ("/core/general/test_connection_to_dbus_deprecated_props", test_connection_to_dbus_deprecated_props); g_test_add_func ("/core/general/test_setting_new_from_dbus", test_setting_new_from_dbus); + g_test_add_func ("/core/general/test_setting_new_from_dbus_no_secrets", test_setting_new_from_dbus_no_secrets); g_test_add_func ("/core/general/test_setting_new_from_dbus_transform", test_setting_new_from_dbus_transform); g_test_add_func ("/core/general/test_setting_new_from_dbus_enum", test_setting_new_from_dbus_enum); g_test_add_func ("/core/general/test_setting_new_from_dbus_bad", test_setting_new_from_dbus_bad); |