about summary refs log tree commit diff
path: root/libnm-core
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2018-10-20 01:31:18 +0200
committerMichael Biebl <biebl@debian.org>2018-10-20 01:31:18 +0200
commitb4885f208ba690090952c0ae0452dd5bc2ba0601 (patch)
tree5c8af02da4543f7132b9bad45711a3a65e620d0d /libnm-core
parent142485af41b7cf7b0060cc682a56d3ff38cabbb6 (diff)
parent6518e361171f64bcaaa4bf868139362ed95cc2e0 (diff)
Update upstream source from tag 'upstream/1.14.2'
Update to upstream version '1.14.2'
with Debian dir c118292f450ace1133a5dba2777cbeb54977dbe8
Diffstat (limited to 'libnm-core')
-rw-r--r--libnm-core/nm-crypto.c3
-rw-r--r--libnm-core/nm-keyfile-internal.h7
-rw-r--r--libnm-core/nm-keyfile.c87
-rw-r--r--libnm-core/nm-setting-ip-config.c2
-rw-r--r--libnm-core/nm-setting-sriov.c2
-rw-r--r--libnm-core/nm-setting-team.c16
-rw-r--r--libnm-core/nm-setting-wireless.c16
-rw-r--r--libnm-core/nm-setting.c10
-rw-r--r--libnm-core/nm-utils.c22
-rw-r--r--libnm-core/tests/test-general.c1
-rw-r--r--libnm-core/tests/test-keyfile.c46
-rw-r--r--libnm-core/tests/test-setting.c6
12 files changed, 120 insertions, 98 deletions
diff --git a/libnm-core/nm-crypto.c b/libnm-core/nm-crypto.c
index 7a6e8d18..dc8f1c15 100644
--- a/libnm-core/nm-crypto.c
+++ b/libnm-core/nm-crypto.c
@@ -188,7 +188,6 @@ parse_old_openssl_key_file (const guint8 *data,
 	int enc_tags = 0;
 	NMCryptoKeyType key_type;
 	nm_auto_clear_secret_ptr NMSecretPtr parsed = { 0 };
-	nm_auto_clear_secret_ptr NMSecretPtr data_content = { 0 };
 	nm_auto_free_secret char *iv = NULL;
 	NMCryptoCipherType cipher = NM_CRYPTO_CIPHER_UNKNOWN;
 	const char *start_tag;
@@ -338,7 +337,6 @@ parse_pkcs8_key_file (const guint8 *data,
                       GError **error)
 {
 	gsize start = 0, end = 0;
-	gs_free guchar *der = NULL;
 	const char *start_tag = NULL, *end_tag = NULL;
 	gboolean encrypted = FALSE;
 	nm_auto_free_secret char *der_base64 = NULL;
@@ -515,7 +513,6 @@ _nmtst_decrypt_key (NMCryptoCipherType cipher,
 {
 	nm_auto_clear_secret_ptr NMSecretPtr bin_iv = { 0 };
 	nm_auto_clear_secret_ptr NMSecretPtr key = { 0 };
-	gs_free char *output = NULL;
 
 	nm_assert (password);
 	nm_assert (cipher != NM_CRYPTO_CIPHER_UNKNOWN);
diff --git a/libnm-core/nm-keyfile-internal.h b/libnm-core/nm-keyfile-internal.h
index d6a14711..94228d95 100644
--- a/libnm-core/nm-keyfile-internal.h
+++ b/libnm-core/nm-keyfile-internal.h
@@ -95,12 +95,17 @@ typedef struct {
 } NMKeyfileReadTypeDataWarn;
 
 NMConnection *nm_keyfile_read (GKeyFile *keyfile,
-                               const char *keyfile_name,
                                const char *base_dir,
                                NMKeyfileReadHandler handler,
                                void *user_data,
                                GError **error);
 
+gboolean nm_keyfile_read_ensure_id (NMConnection *connection,
+                                    const char *fallback_id);
+
+gboolean nm_keyfile_read_ensure_uuid (NMConnection *connection,
+                                      const char *fallback_uuid_seed);
+
 /*****************************************************************************/
 
 typedef enum {
diff --git a/libnm-core/nm-keyfile.c b/libnm-core/nm-keyfile.c
index c7d87869..e4ed1899 100644
--- a/libnm-core/nm-keyfile.c
+++ b/libnm-core/nm-keyfile.c
@@ -2812,20 +2812,52 @@ read_vpn_secrets (KeyfileReaderInfo *info, NMSettingVpn *s_vpn)
 	}
 }
 
+gboolean
+nm_keyfile_read_ensure_id (NMConnection *connection,
+                           const char *fallback_id)
+{
+	NMSettingConnection *s_con;
+
+	g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+	g_return_val_if_fail (fallback_id, FALSE);
+
+	s_con = nm_connection_get_setting_connection (connection);
+	g_return_val_if_fail (NM_IS_SETTING_CONNECTION (s_con), FALSE);
+
+	if (nm_setting_connection_get_id (s_con))
+		return FALSE;
+
+	g_object_set (s_con, NM_SETTING_CONNECTION_ID, fallback_id, NULL);
+	return TRUE;
+}
+
+gboolean
+nm_keyfile_read_ensure_uuid (NMConnection *connection,
+                             const char *fallback_uuid_seed)
+{
+	NMSettingConnection *s_con;
+	gs_free char *hashed_uuid = NULL;
+
+	g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+	g_return_val_if_fail (fallback_uuid_seed, FALSE);
+
+	s_con = nm_connection_get_setting_connection (connection);
+	g_return_val_if_fail (NM_IS_SETTING_CONNECTION (s_con), FALSE);
+
+	if (nm_setting_connection_get_uuid (s_con))
+		return FALSE;
+
+	hashed_uuid = _nm_utils_uuid_generate_from_strings ("keyfile", fallback_uuid_seed, NULL);
+	g_object_set (s_con, NM_SETTING_CONNECTION_UUID, hashed_uuid, NULL);
+	return TRUE;
+}
+
 /**
  * nm_keyfile_read:
  * @keyfile: the keyfile from which to create the connection
- * @keyfile_name: keyfile allows missing connection id and uuid
- *   and NetworkManager will create those when reading a connection
- *   from file. By providing a filename you can reproduce that behavior,
- *   but of course, it can only recreate the same UUID if you provide the
- *   same filename as NetworkManager core daemon would.
- *   @keyfile_name has only a relevance for setting the id or uuid if it
- *   is missing and as fallback for @base_dir.
  * @base_dir: when reading certificates from files with relative name,
- *   the relative path is made absolute using @base_dir.
- *   If @base_dir is missing, first try to get the pathname from @keyfile_name
- *   (if it is given as absolute path). As last, fallback to the current path.
+ *   the relative path is made absolute using @base_dir. This must
+ *   be an absolute path.
  * @handler: read handler
  * @user_data: user data for read handler
  * @error: error
@@ -2837,7 +2869,6 @@ read_vpn_secrets (KeyfileReaderInfo *info, NMSettingVpn *s_vpn)
  */
 NMConnection *
 nm_keyfile_read (GKeyFile *keyfile,
-                 const char *keyfile_name,
                  const char *base_dir,
                  NMKeyfileReadHandler handler,
                  void *user_data,
@@ -2848,25 +2879,13 @@ nm_keyfile_read (GKeyFile *keyfile,
 	NMSetting *setting;
 	char **groups;
 	gsize length;
-	int i;
+	gsize i;
 	gboolean vpn_secrets = FALSE;
 	KeyfileReaderInfo info = { 0 };
-	gs_free char *base_dir_free = NULL;
 
 	g_return_val_if_fail (keyfile, NULL);
 	g_return_val_if_fail (!error || !*error, NULL);
-
-	if (!base_dir) {
-		/* basedir is not given. Prefer it from the keyfile_name */
-		if (keyfile_name && keyfile_name[0] == '/') {
-			base_dir = base_dir_free = g_path_get_dirname (keyfile_name);
-		} else {
-			/* if keyfile is not given or not an absolute path, fallback
-			 * to current working directory. */
-			base_dir = base_dir_free = g_get_current_dir ();
-		}
-	} else
-		g_return_val_if_fail (base_dir[0] == '/', NULL);
+	g_return_val_if_fail (base_dir && base_dir[0] == '/', NULL);
 
 	connection = nm_simple_connection_new ();
 
@@ -2902,24 +2921,6 @@ nm_keyfile_read (GKeyFile *keyfile,
 		nm_connection_add_setting (connection, NM_SETTING (s_con));
 	}
 
-	/* Make sure that we have 'id' even if not explictly specified in the keyfile */
-	if (   keyfile_name
-	    && !nm_setting_connection_get_id (s_con)) {
-		gs_free char *base_name = NULL;
-
-		base_name = g_path_get_basename (keyfile_name);
-		g_object_set (s_con, NM_SETTING_CONNECTION_ID, base_name, NULL);
-	}
-
-	/* Make sure that we have 'uuid' even if not explictly specified in the keyfile */
-	if (   keyfile_name
-	    && !nm_setting_connection_get_uuid (s_con)) {
-		gs_free char *hashed_uuid = NULL;
-
-		hashed_uuid = _nm_utils_uuid_generate_from_strings ("keyfile", keyfile_name, NULL);
-		g_object_set (s_con, NM_SETTING_CONNECTION_UUID, hashed_uuid, NULL);
-	}
-
 	/* Make sure that we have 'interface-name' even if it was specified in the
 	 * "wrong" (ie, deprecated) group.
 	 */
diff --git a/libnm-core/nm-setting-ip-config.c b/libnm-core/nm-setting-ip-config.c
index fa2535b8..2b3134b6 100644
--- a/libnm-core/nm-setting-ip-config.c
+++ b/libnm-core/nm-setting-ip-config.c
@@ -1310,7 +1310,7 @@ nm_ip_route_attribute_validate  (const char *name,
 		return FALSE;
 	}
 
-	if (spec->type == G_VARIANT_TYPE_STRING) {
+	if (g_variant_type_equal (spec->type, G_VARIANT_TYPE_STRING)) {
 		const char *string = g_variant_get_string (value, NULL);
 		gs_free char *string_free = NULL;
 		char *sep;
diff --git a/libnm-core/nm-setting-sriov.c b/libnm-core/nm-setting-sriov.c
index 45b3a1d2..7228fb0c 100644
--- a/libnm-core/nm-setting-sriov.c
+++ b/libnm-core/nm-setting-sriov.c
@@ -433,7 +433,7 @@ nm_sriov_vf_attribute_validate  (const char *name,
 		return FALSE;
 	}
 
-	if (spec->type == G_VARIANT_TYPE_STRING) {
+	if (g_variant_type_equal (spec->type, G_VARIANT_TYPE_STRING)) {
 		const char *string;
 
 		switch (spec->str_type) {
diff --git a/libnm-core/nm-setting-team.c b/libnm-core/nm-setting-team.c
index e6737e48..3d151462 100644
--- a/libnm-core/nm-setting-team.c
+++ b/libnm-core/nm-setting-team.c
@@ -125,9 +125,9 @@ nm_team_link_watcher_new_ethtool (int delay_up,
 	NMTeamLinkWatcher *watcher;
 	const char *val_fail = NULL;
 
-	if (delay_up < 0 || delay_up > G_MAXINT32)
+	if (delay_up < 0 || !_NM_INT_LE_MAXINT32 (delay_up))
 		val_fail = "delay-up";
-	if (delay_down < 0 || delay_down > G_MAXINT32)
+	if (delay_down < 0 || !_NM_INT_LE_MAXINT32 (delay_down))
 		val_fail = "delay-down";
 	if (val_fail) {
 		g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
@@ -182,11 +182,11 @@ nm_team_link_watcher_new_nsna_ping (int init_wait,
 		return NULL;
 	}
 
-	if (init_wait < 0 || init_wait > G_MAXINT32)
+	if (init_wait < 0 || !_NM_INT_LE_MAXINT32 (init_wait))
 		val_fail = "init-wait";
-	if (interval < 0 || interval > G_MAXINT32)
+	if (interval < 0 || !_NM_INT_LE_MAXINT32 (interval))
 		val_fail = "interval";
-	if (missed_max < 0 || missed_max > G_MAXINT32)
+	if (missed_max < 0 || !_NM_INT_LE_MAXINT32 (missed_max))
 		val_fail = "missed-max";
 	if (val_fail) {
 		g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
@@ -255,11 +255,11 @@ nm_team_link_watcher_new_arp_ping (int init_wait,
 		return NULL;
 	}
 
-	if (init_wait < 0 || init_wait > G_MAXINT32)
+	if (init_wait < 0 || !_NM_INT_LE_MAXINT32 (init_wait))
 		val_fail = "init-wait";
-	if (interval < 0 || interval > G_MAXINT32)
+	if (interval < 0 || !_NM_INT_LE_MAXINT32 (interval))
 		val_fail = "interval";
-	if (missed_max < 0 || missed_max > G_MAXINT32)
+	if (missed_max < 0 || !_NM_INT_LE_MAXINT32 (missed_max))
 		val_fail = "missed-max";
 	if (val_fail) {
 		g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
diff --git a/libnm-core/nm-setting-wireless.c b/libnm-core/nm-setting-wireless.c
index a9cae6c0..6f6175b7 100644
--- a/libnm-core/nm-setting-wireless.c
+++ b/libnm-core/nm-setting-wireless.c
@@ -1595,14 +1595,20 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *klass)
 	/**
 	 * NMSettingWireless:hidden:
 	 *
-	 * If %TRUE, indicates this network is a non-broadcasting network that hides
-	 * its SSID.  In this case various workarounds may take place, such as
-	 * probe-scanning the SSID for more reliable network discovery.  However,
+	 * If %TRUE, indicates that the network is a non-broadcasting network that
+	 * hides its SSID. This works both in infrastructure and AP mode.
+	 *
+	 * In infrastructure mode, various workarounds are used for a more reliable
+	 * discovery of hidden networks, such as probe-scanning the SSID.  However,
 	 * these workarounds expose inherent insecurities with hidden SSID networks,
 	 * and thus hidden SSID networks should be used with caution.
 	 *
-	 * Note that marking the network as hidden may be a privacy issue for you, as
-	 * the explicit probe-scans may be distinctly recognizable on the air.
+	 * In AP mode, the created network does not broadcast its SSID.
+	 *
+	 * Note that marking the network as hidden may be a privacy issue for you
+	 * (in infrastructure mode) or client stations (in AP mode), as the explicit
+	 * probe-scans are distinctly recognizable on the air.
+	 *
 	 **/
 	/* ---ifcfg-rh---
 	 * property: hidden
diff --git a/libnm-core/nm-setting.c b/libnm-core/nm-setting.c
index 0cec5165..6b9681b5 100644
--- a/libnm-core/nm-setting.c
+++ b/libnm-core/nm-setting.c
@@ -1422,7 +1422,7 @@ nm_setting_diff (NMSetting *a,
 		} else {
 			g_hash_table_iter_init (&iter, a_gendata->hash);
 			while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &val)) {
-				val2 = b_gendata ? g_hash_table_lookup (b_gendata->hash, key) : NULL;
+				val2 = g_hash_table_lookup (b_gendata->hash, key);
 				compared_any = TRUE;
 				if (   !val2
 				    || !g_variant_equal (val, val2)) {
@@ -1432,7 +1432,7 @@ nm_setting_diff (NMSetting *a,
 			}
 			g_hash_table_iter_init (&iter, b_gendata->hash);
 			while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &val)) {
-				val2 = a_gendata ? g_hash_table_lookup (a_gendata->hash, key) : NULL;
+				val2 = g_hash_table_lookup (a_gendata->hash, key);
 				compared_any = TRUE;
 				if (   !val2
 				    || !g_variant_equal (val, val2)) {
@@ -2037,8 +2037,12 @@ _nm_setting_get_deprecated_virtual_interface_name (NMSetting *setting,
 {
 	NMSettingConnection *s_con;
 
+	if (!connection)
+		return NULL;
+
 	s_con = nm_connection_get_setting_connection (connection);
-	g_return_val_if_fail (s_con != NULL, NULL);
+	if (!s_con)
+		return NULL;
 
 	if (nm_setting_connection_get_interface_name (s_con))
 		return g_variant_new_string (nm_setting_connection_get_interface_name (s_con));
diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c
index f6e1555e..0f524e11 100644
--- a/libnm-core/nm-utils.c
+++ b/libnm-core/nm-utils.c
@@ -4941,18 +4941,18 @@ const char **nm_utils_enum_get_values (GType type, int from, int to)
 static gboolean
 _nm_utils_is_json_object_no_validation (const char *str, GError **error)
 {
-	if (str) {
-		/* libjansson also requires only utf-8 encoding. */
-		if (!g_utf8_validate (str, -1, NULL)) {
-			g_set_error_literal (error,
-			                     NM_CONNECTION_ERROR,
-			                     NM_CONNECTION_ERROR_INVALID_PROPERTY,
-			                     _("not valid utf-8"));
-			return FALSE;
-		}
-		while (g_ascii_isspace (str[0]))
-			str++;
+	nm_assert (str);
+
+	/* libjansson also requires only utf-8 encoding. */
+	if (!g_utf8_validate (str, -1, NULL)) {
+		g_set_error_literal (error,
+		                     NM_CONNECTION_ERROR,
+		                     NM_CONNECTION_ERROR_INVALID_PROPERTY,
+		                     _("not valid utf-8"));
+		return FALSE;
 	}
+	while (g_ascii_isspace (str[0]))
+		str++;
 
 	/* do some very basic validation to see if this might be a JSON object. */
 	if (str[0] == '{') {
diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c
index 38531248..5a954270 100644
--- a/libnm-core/tests/test-general.c
+++ b/libnm-core/tests/test-general.c
@@ -6609,7 +6609,6 @@ _do_test_utils_str_utf8safe (const char *str, gsize str_len, const char *expecte
 	const char *str_safe;
 	const char *buf_safe;
 	const char *s;
-	gs_free gpointer buf_free_1 = NULL;
 	gs_free char *str_free_1 = NULL;
 	gs_free char *str_free_2 = NULL;
 	gs_free char *str_free_3 = NULL;
diff --git a/libnm-core/tests/test-keyfile.c b/libnm-core/tests/test-keyfile.c
index d941fa22..78e01ce9 100644
--- a/libnm-core/tests/test-keyfile.c
+++ b/libnm-core/tests/test-keyfile.c
@@ -167,19 +167,28 @@ _nm_keyfile_write (NMConnection *connection,
 static NMConnection *
 _nm_keyfile_read (GKeyFile *keyfile,
                   const char *keyfile_name,
-                  const char *base_dir,
                   NMKeyfileReadHandler read_handler,
                   void *read_data,
                   gboolean needs_normalization)
 {
 	GError *error = NULL;
 	NMConnection *con;
+	gs_free char *filename = NULL;
+	gs_free char *base_dir = NULL;
 
 	g_assert (keyfile);
+	g_assert (!keyfile_name || (keyfile_name[0] == '/'));
 
-	con = nm_keyfile_read (keyfile, keyfile_name, base_dir, read_handler, read_data, &error);
+	base_dir = g_path_get_dirname (keyfile_name);
+	filename = g_path_get_basename (keyfile_name);
+
+	con = nm_keyfile_read (keyfile, base_dir, read_handler, read_data, &error);
 	g_assert_no_error (error);
 	g_assert (NM_IS_CONNECTION (con));
+
+	nm_keyfile_read_ensure_id (con, filename);
+	nm_keyfile_read_ensure_uuid (con, keyfile_name);
+
 	if (needs_normalization) {
 		nmtst_assert_connection_verifies_after_normalization (con, 0, 0);
 		nmtst_connection_normalize (con);
@@ -205,7 +214,6 @@ static void
 _keyfile_convert (NMConnection **con,
                   GKeyFile **keyfile,
                   const char *keyfile_name,
-                  const char *base_dir,
                   NMKeyfileReadHandler read_handler,
                   void *read_data,
                   NMKeyfileWriteHandler write_handler,
@@ -229,7 +237,7 @@ _keyfile_convert (NMConnection **con,
 
 	if (c0) {
 		c0_k1 = _nm_keyfile_write (c0, write_handler, write_data);
-		c0_k1_c2 = _nm_keyfile_read (c0_k1, keyfile_name, base_dir, read_handler, read_data, FALSE);
+		c0_k1_c2 = _nm_keyfile_read (c0_k1, keyfile_name, read_handler, read_data, FALSE);
 		c0_k1_c2_k3 = _nm_keyfile_write (c0_k1_c2, write_handler, write_data);
 
 		g_assert (_nm_keyfile_equals (c0_k1, c0_k1_c2_k3, TRUE));
@@ -237,9 +245,9 @@ _keyfile_convert (NMConnection **con,
 	if (k0) {
 		NMSetting8021x *s1, *s2;
 
-		k0_c1 = _nm_keyfile_read (k0, keyfile_name, base_dir, read_handler, read_data, needs_normalization);
+		k0_c1 = _nm_keyfile_read (k0, keyfile_name, read_handler, read_data, needs_normalization);
 		k0_c1_k2 = _nm_keyfile_write (k0_c1, write_handler, write_data);
-		k0_c1_k2_c3 = _nm_keyfile_read (k0_c1_k2, keyfile_name, base_dir, read_handler, read_data, FALSE);
+		k0_c1_k2_c3 = _nm_keyfile_read (k0_c1_k2, keyfile_name, read_handler, read_data, FALSE);
 
 		/* It is a expeced behavior, that if @k0 contains a relative path ca-cert, @k0_c1 will
 		 * contain that path as relative. But @k0_c1_k2 and @k0_c1_k2_c3 will have absolute paths.
@@ -312,7 +320,7 @@ _test_8021x_cert_check (NMConnection *con,
 	NMSetting8021x *s_8021x;
 	gs_free char *kval = NULL;
 
-	_keyfile_convert (&con, &keyfile, NULL, NULL, NULL, NULL, NULL, NULL, FALSE);
+	_keyfile_convert (&con, &keyfile, "/_test_8021x_cert_check/foo", NULL, NULL, NULL, NULL, FALSE);
 
 	s_8021x = nm_connection_get_setting_802_1x (con);
 
@@ -449,14 +457,14 @@ test_8021x_cert_read (void)
 	con = nmtst_create_connection_from_keyfile (
 	      "[connection]\n"
 	      "type=ethernet",
-	      "/test_8021x_cert_read/test0", NULL);
+	      "/test_8021x_cert_read/test0");
 	CLEAR (&con, &keyfile);
 
 	keyfile = _keyfile_load_from_data (
 	          "[connection]\n"
 	          "type=ethernet"
 	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test1", NULL, NULL, NULL, NULL, NULL, TRUE);
+	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test1", NULL, NULL, NULL, NULL, TRUE);
 	CLEAR (&con, &keyfile);
 
 	keyfile = _keyfile_load_from_data (
@@ -471,7 +479,7 @@ test_8021x_cert_read (void)
 	          "private-key=102;105;108;101;58;47;47;47;104;111;109;101;47;100;99;98;119;47;68;101;115;107;116;111;112;47;99;101;114;116;105;110;102;114;97;47;99;108;105;101;110;116;46;112;101;109;0;\n"
 	          "private-key-password=12345testing\n"
 	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, NULL, TRUE);
+	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
 	CLEAR (&con, &keyfile);
 
 	keyfile = _keyfile_load_from_data (
@@ -500,7 +508,7 @@ test_8021x_cert_read (void)
 	                      "/33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111111\n"
 	          "private-key-password=12345testing\n"
 	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, NULL, TRUE);
+	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
 	s_8021x = nm_connection_get_setting_802_1x (con);
 
 	g_assert (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
@@ -528,7 +536,7 @@ test_8021x_cert_read (void)
 	          "private-key=data:;base64,aGFsbG8=\n" // hallo
 	          "private-key-password=12345testing\n"
 	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, NULL, TRUE);
+	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
 	s_8021x = nm_connection_get_setting_802_1x (con);
 
 	g_assert (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
@@ -553,7 +561,7 @@ test_8021x_cert_read (void)
 	          "private-key=abc.deR\n"
 	          "private-key-password=12345testing\n"
 	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, NULL, TRUE);
+	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
 	s_8021x = nm_connection_get_setting_802_1x (con);
 
 	g_assert (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
@@ -578,7 +586,7 @@ test_8021x_cert_read (void)
 	          "private-key=hallo\n"
 	          "private-key-password=12345testing\n"
 	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, NULL, TRUE);
+	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
 	s_8021x = nm_connection_get_setting_802_1x (con);
 
 	g_assert (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
@@ -605,7 +613,7 @@ test_team_conf_read_valid (void)
 	      "interface-name=nm-team1\n"
 	      "[team]\n"
 	      "config={\"foo\":\"bar\"}",
-	      "/test_team_conf_read/valid", NULL);
+	      "/test_team_conf_read/valid");
 
 	g_assert (con);
 	s_team = nm_connection_get_setting_team (con);
@@ -629,7 +637,7 @@ test_team_conf_read_invalid (void)
 	      "interface-name=nm-team1\n"
 	      "[team]\n"
 	      "config={foobar}",
-	      "/test_team_conf_read/invalid", NULL);
+	      "/test_team_conf_read/invalid");
 
 	g_assert (con);
 	s_team = nm_connection_get_setting_team (con);
@@ -657,7 +665,7 @@ test_user_1 (void)
 	      "[user]\n"
 	      "my-value.x=value1\n"
 	      "",
-	      "/test_user_1/invalid", NULL);
+	      "/test_user_1/invalid");
 	g_assert (con);
 	s_user = NM_SETTING_USER (nm_connection_get_setting (con, NM_TYPE_SETTING_USER));
 	g_assert (s_user);
@@ -704,7 +712,7 @@ test_user_1 (void)
 	nm_connection_add_setting (con, NM_SETTING (s_user));
 	nmtst_connection_normalize (con);
 
-	_keyfile_convert (&con, &keyfile, NULL, NULL, NULL, NULL, NULL, NULL, FALSE);
+	_keyfile_convert (&con, &keyfile, "/test_user_1/foo", NULL, NULL, NULL, NULL, FALSE);
 }
 
 /*****************************************************************************/
@@ -725,7 +733,7 @@ test_vpn_1 (void)
 	      "service-type=a.b.c\n"
 	      "vpn-key-1=value1\n"
 	      "",
-	      "/test_vpn_1/invalid", NULL);
+	      "/test_vpn_1/invalid");
 	g_assert (con);
 	s_vpn = NM_SETTING_VPN (nm_connection_get_setting (con, NM_TYPE_SETTING_VPN));
 	g_assert (s_vpn);
diff --git a/libnm-core/tests/test-setting.c b/libnm-core/tests/test-setting.c
index c8eda381..4e010feb 100644
--- a/libnm-core/tests/test-setting.c
+++ b/libnm-core/tests/test-setting.c
@@ -1319,13 +1319,15 @@ test_ethtool_1 (void)
 	nmtst_assert_success (keyfile, error);
 
 	con3 = nm_keyfile_read (keyfile,
-	                        "ethtool-keyfile-name",
-	                        NULL,
+	                        "/ignored/current/working/directory/for/loading/relative/paths",
 	                        NULL,
 	                        NULL,
 	                        &error);
 	nmtst_assert_success (con3, error);
 
+	nm_keyfile_read_ensure_id (con3, "unused-because-already-has-id");
+	nm_keyfile_read_ensure_uuid (con3, "unused-because-already-has-uuid");
+
 	nmtst_connection_normalize (con3);
 
 	nmtst_assert_connection_equals (con, FALSE, con3, FALSE);