summary refs log tree commit diff
path: root/libnm-core/nm-keyfile-reader.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnm-core/nm-keyfile-reader.c')
-rw-r--r--libnm-core/nm-keyfile-reader.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/libnm-core/nm-keyfile-reader.c b/libnm-core/nm-keyfile-reader.c
index 353804f9..9d8c8734 100644
--- a/libnm-core/nm-keyfile-reader.c
+++ b/libnm-core/nm-keyfile-reader.c
@@ -1253,6 +1253,15 @@ static KeyParser key_parsers[] = {
 };
 
 static void
+set_default_for_missing_key (NMSetting *setting, const char *property)
+{
+	/* Set a value different from the default value of the property's spec */
+
+	if (NM_IS_SETTING_VLAN (setting) && !strcmp (property, NM_SETTING_VLAN_FLAGS))
+		g_object_set (setting, property, 0, NULL);
+}
+
+static void
 read_one_setting_value (NMSetting *setting,
                         const char *key,
                         const GValue *value,
@@ -1316,6 +1325,9 @@ read_one_setting_value (NMSetting *setting,
 			                  err->message))
 				goto out_error;
 		}
+
+		/* Allow default values different than in property spec */
+		set_default_for_missing_key (setting, key);
 		return;
 	}
 
@@ -1651,6 +1663,18 @@ nm_keyfile_read (GKeyFile *keyfile,
 		}
 	}
 
+	/* Make sure that if [vlan] group was missing we set vlan.flags to 0
+	 * for backwards compatibility */
+	if (nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME)) {
+		if (!nm_connection_get_setting_vlan (connection)) {
+			NMSettingVlan *s_vlan;
+
+			s_vlan = NM_SETTING_VLAN (nm_setting_vlan_new ());
+			g_object_set (s_vlan, NM_SETTING_VLAN_FLAGS, 0, NULL);
+			nm_connection_add_setting (connection, NM_SETTING (s_vlan));
+		}
+	}
+
 	return connection;
 out_error:
 	g_propagate_error (error, info.error);