summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiří Klimeš <jklimes@redhat.com>2012-09-10 14:23:24 +0200
committerJiří Klimeš <jklimes@redhat.com>2014-06-25 16:26:59 +0200
commitc88b832ce9510bdcb2df2bf7e02b1ded88154581 (patch)
treeb927ff3d50659ebe19c9c6d8503cc35b2be7fc21
parent4b1dd4647e0f1ce30da7a5eb0f2b0dae11637cb6 (diff)
downloadNetworkManager-c88b832ce9510bdcb2df2bf7e02b1ded88154581.tar.gz
keyfile: allow missing 'id' and 'uuid' in [connection] section (bgo #683345)
If 'id' is missing, it is automatically filled with base file name. If 'uuid' is missing, it is automatically generated (hashing file path). https://bugzilla.gnome.org/show_bug.cgi?id=683345
-rw-r--r--src/settings/plugins/keyfile/reader.c18
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Makefile.am3
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_Missing_ID_UUID9
-rw-r--r--src/settings/plugins/keyfile/tests/test-keyfile.c22
4 files changed, 51 insertions, 1 deletions
diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c
index 83090f37aa..aa3cda0cdf 100644
--- a/src/settings/plugins/keyfile/reader.c
+++ b/src/settings/plugins/keyfile/reader.c
@@ -1293,6 +1293,24 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
}
}
+ /* Make sure that we have 'id' even if not explictly specified in the keyfile */
+ if (!nm_setting_connection_get_id (s_con)) {
+ char *base_name;
+
+ base_name = g_path_get_basename (filename);
+ g_object_set (s_con, NM_SETTING_CONNECTION_ID, base_name, NULL);
+ g_free (base_name);
+ }
+
+ /* Make sure that we have 'uuid' even if not explictly specified in the keyfile */
+ if (!nm_setting_connection_get_uuid (s_con)) {
+ char *hashed_uuid;
+
+ hashed_uuid = nm_utils_uuid_generate_from_string (filename);
+ g_object_set (s_con, NM_SETTING_CONNECTION_UUID, hashed_uuid, NULL);
+ g_free (hashed_uuid);
+ }
+
ensure_slave_setting (connection);
}
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
index 576164d274..217ac4acd6 100644
--- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
@@ -21,7 +21,8 @@ KEYFILES = \
Test_Bridge_Component \
Test_New_Wired_Group_Name \
Test_New_Wireless_Group_Names \
- Test_Missing_Vlan_Setting
+ Test_Missing_Vlan_Setting \
+ Test_Missing_ID_UUID
CERTS = \
test-ca-cert.pem \
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Missing_ID_UUID b/src/settings/plugins/keyfile/tests/keyfiles/Test_Missing_ID_UUID
new file mode 100644
index 0000000000..138380d080
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Missing_ID_UUID
@@ -0,0 +1,9 @@
+# id and uuid keys are missing
+# They will be auto-genetrated by NetworkManager
+
+[connection]
+type=ethernet
+autoconnect=true
+
+[802-3-ethernet]
+mac-address=00:11:22:33:44:55
diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c
index cc57c1c393..be27c17de6 100644
--- a/src/settings/plugins/keyfile/tests/test-keyfile.c
+++ b/src/settings/plugins/keyfile/tests/test-keyfile.c
@@ -3410,6 +3410,27 @@ test_read_missing_vlan_setting (void)
g_object_unref (connection);
}
+static void
+test_read_missing_id_uuid (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+ gboolean success;
+
+ connection = nm_keyfile_plugin_connection_from_file (TEST_KEYFILES_DIR"/Test_Missing_ID_UUID", &error);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* Ensure the ID and UUID properties are there */
+ g_assert_cmpstr (nm_connection_get_id (connection), ==, "Test_Missing_ID_UUID");
+ g_assert (nm_connection_get_uuid (connection));
+
+ g_object_unref (connection);
+}
+
NMTST_DEFINE ();
int main (int argc, char **argv)
@@ -3472,6 +3493,7 @@ int main (int argc, char **argv)
test_write_new_wireless_group_names ();
test_read_missing_vlan_setting ();
+ test_read_missing_id_uuid ();
base = g_path_get_basename (argv[0]);
fprintf (stdout, "%s: SUCCESS\n", base);