diff options
author | Jiří Klimeš <jklimes@redhat.com> | 2012-09-10 14:23:24 +0200 |
---|---|---|
committer | Jiří Klimeš <jklimes@redhat.com> | 2014-06-25 16:26:59 +0200 |
commit | c88b832ce9510bdcb2df2bf7e02b1ded88154581 (patch) | |
tree | b927ff3d50659ebe19c9c6d8503cc35b2be7fc21 | |
parent | 4b1dd4647e0f1ce30da7a5eb0f2b0dae11637cb6 (diff) | |
download | NetworkManager-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
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); |