libnm-util: verify() - can't set both IPv4 'disabled' and IPv6 'ignore' method

This commit is contained in:
Jiří Klimeš
2013-06-17 14:29:45 +02:00
parent 393346b4fc
commit 128c9d788f
2 changed files with 54 additions and 0 deletions

View File

@@ -691,6 +691,15 @@ nm_setting_ip4_config_get_may_fail (NMSettingIP4Config *setting)
return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->may_fail;
}
static gint
find_setting_by_name (gconstpointer a, gconstpointer b)
{
NMSetting *setting = NM_SETTING (a);
const char *str = (const char *) b;
return strcmp (nm_setting_get_name (setting), str);
}
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
@@ -759,6 +768,24 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
/* Disabled method is not allowed when IPv6 is set to 'ignore' */
if (!strcmp (priv->method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) {
GSList *list = g_slist_find_custom (all_settings, NM_SETTING_IP6_CONFIG_SETTING_NAME, find_setting_by_name);
if (list) {
NMSettingIP6Config *s_ip6 = g_slist_nth_data (list, 0);
if ( s_ip6
&& !strcmp (nm_setting_ip6_config_get_method (s_ip6), NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
g_set_error (error,
NM_SETTING_IP4_CONFIG_ERROR,
NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
_("IPv4 method '%s' is not allowed when IPv6 method 'ignore' is set"),
priv->method);
g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_METHOD);
return FALSE;
}
}
}
if (priv->dhcp_client_id && !strlen (priv->dhcp_client_id)) {
g_set_error_literal (error,
NM_SETTING_IP4_CONFIG_ERROR,

View File

@@ -675,6 +675,15 @@ nm_setting_ip6_config_get_ip6_privacy (NMSettingIP6Config *setting)
return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->ip6_privacy;
}
static gint
find_setting_by_name (gconstpointer a, gconstpointer b)
{
NMSetting *setting = NM_SETTING (a);
const char *str = (const char *) b;
return strcmp (nm_setting_get_name (setting), str);
}
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
@@ -743,6 +752,24 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
/* Method 'ignore' is not allowed when IPv4 is set to 'disabled' */
if (!strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
GSList *list = g_slist_find_custom (all_settings, NM_SETTING_IP4_CONFIG_SETTING_NAME, find_setting_by_name);
if (list) {
NMSettingIP4Config *s_ip4 = g_slist_nth_data (list, 0);
if ( s_ip4
&& !strcmp (nm_setting_ip4_config_get_method (s_ip4), NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) {
g_set_error (error,
NM_SETTING_IP6_CONFIG_ERROR,
NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
_("IPv6 method '%s' is not allowed when IPv4 method 'disabled' is set"),
priv->method);
g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_METHOD);
return FALSE;
}
}
}
if (priv->dhcp_hostname && !strlen (priv->dhcp_hostname)) {
g_set_error_literal (error,
NM_SETTING_IP6_CONFIG_ERROR,