summaryrefslogtreecommitdiff
path: root/libnm-core
diff options
context:
space:
mode:
Diffstat (limited to 'libnm-core')
-rw-r--r--libnm-core/nm-connection.c7
-rw-r--r--libnm-core/nm-core-internal.h2
-rw-r--r--libnm-core/nm-setting-private.h1
-rw-r--r--libnm-core/nm-setting.c10
-rw-r--r--libnm-core/nm-simple-connection.c7
-rw-r--r--libnm-core/tests/test-general.c43
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);