setting-ip-config: validate route attributes in verify()

It's better to verify these route attributes so that the user can be
notified early if something is not supported or invalid.

The downside is that some incorrect profiles (with invalid route attributes)
that previously would work since this commit will not anymore as
the incorrect bits don't get ignored but rejected instead.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/407
https://bugzilla.redhat.com/show_bug.cgi?id=1821787
This commit is contained in:
Antonio Cardace 2020-06-09 11:29:42 +02:00
parent 5d0d13f570
commit 7781f78435
No known key found for this signature in database
GPG key ID: 6BF80ABD43E377D3

View file

@ -5059,6 +5059,7 @@ verify (NMSetting *setting, NMConnection *connection, GError **error)
/* Validate routes */
for (i = 0; i < priv->routes->len; i++) {
gs_free_error GError *local = NULL;
NMIPRoute *route = (NMIPRoute *) priv->routes->pdata[i];
if (nm_ip_route_get_family (route) != NM_SETTING_IP_CONFIG_GET_FAMILY (setting)) {
@ -5070,6 +5071,19 @@ verify (NMSetting *setting, NMConnection *connection, GError **error)
g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_ROUTES);
return FALSE;
}
if (!_nm_ip_route_attribute_validate_all (route, &local)) {
g_set_error (error,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_INVALID_PROPERTY,
_("invalid attribute: %s"),
local->message);
g_prefix_error (error,
"%s.%s: ",
nm_setting_get_name (setting),
NM_SETTING_IP_CONFIG_ROUTES);
return FALSE;
}
}
if (priv->routing_rules) {