libnm-core: stricter verification of NMSettingConnection:type property

Now also verify the 'type' property regardless of existing
@all_settings.

Signed-off-by: Thomas Haller <thaller@redhat.com>
This commit is contained in:
Thomas Haller
2014-07-08 17:22:43 +02:00
parent cf44a15874
commit f60256e035

View File

@@ -754,7 +754,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
_("property is missing")); _("property is missing"));
g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_ID); g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_ID);
return FALSE; return FALSE;
} else if (!strlen (priv->id)) { } else if (!priv->id[0]) {
g_set_error_literal (error, g_set_error_literal (error,
NM_SETTING_CONNECTION_ERROR, NM_SETTING_CONNECTION_ERROR,
NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY, NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
@@ -831,35 +831,46 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
_("property is missing")); _("property is missing"));
g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE); g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE);
return FALSE; return FALSE;
} else if (!strlen (priv->type)) { } else {
g_set_error_literal (error, GType base_type;
NM_SETTING_CONNECTION_ERROR,
NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
_("property is empty"));
g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE);
return FALSE;
}
/* Make sure the corresponding 'type' item is present */ if (!priv->type[0]) {
if (all_settings) { g_set_error_literal (error,
NMSetting *s_base; NM_SETTING_CONNECTION_ERROR,
NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
_("property is empty"));
g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE);
return FALSE;
}
s_base = nm_setting_find_in_list (all_settings, priv->type); base_type = nm_setting_lookup_type (priv->type);
if (!s_base) { if (base_type == G_TYPE_INVALID) {
g_set_error (error, g_set_error (error,
NM_SETTING_CONNECTION_ERROR, NM_SETTING_CONNECTION_ERROR,
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND, NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
_("requires presence of '%s' setting in the connection"), _("connection type '%s' is not valid"),
priv->type); priv->type);
g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE); g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE);
return FALSE; return FALSE;
} }
if (!_nm_setting_is_base_type (s_base)) { if (!_nm_setting_type_is_base_type (base_type)) {
g_set_error (error, g_set_error (error,
NM_CONNECTION_ERROR, NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID, NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID,
_("connection type '%s' is not a base type"), _("connection type '%s' is not a valid base type"),
priv->type);
g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE);
return FALSE;
}
/* Make sure the corresponding 'type' item is present */
if ( all_settings
&& !nm_setting_find_in_list (all_settings, priv->type)) {
g_set_error (error,
NM_SETTING_CONNECTION_ERROR,
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND,
_("requires presence of '%s' setting in the connection"),
priv->type); priv->type);
g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE); g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE);
return FALSE; return FALSE;