summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2016-03-22 22:18:21 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2016-03-22 22:18:21 +0100
commit7cab83049ecebbcdc6d6d148bb569eb1f0da7722 (patch)
tree07843e1900a14fb651a3aec884019c1543638e46
parent3cb50cd6a913827c9bea0766b6fadd07549ec9d1 (diff)
downloadNetworkManager-7cab83049ecebbcdc6d6d148bb569eb1f0da7722.tar.gz
libnm-core: ignore gateway when never-default is set
-rw-r--r--libnm-core/nm-keyfile-reader.c16
-rw-r--r--libnm-core/tests/test-keyfile.c55
2 files changed, 70 insertions, 1 deletions
diff --git a/libnm-core/nm-keyfile-reader.c b/libnm-core/nm-keyfile-reader.c
index 4a17d2c488..9f2afbeec4 100644
--- a/libnm-core/nm-keyfile-reader.c
+++ b/libnm-core/nm-keyfile-reader.c
@@ -1500,6 +1500,18 @@ out_error:
return;
}
+static void
+fix_setting (NMSetting *setting)
+{
+ if (NM_IS_SETTING_IP_CONFIG (setting)) {
+ NMSettingIPConfig *s_ip = (NMSettingIPConfig *) setting;
+
+ if ( nm_setting_ip_config_get_never_default (s_ip)
+ && nm_setting_ip_config_get_gateway (s_ip))
+ g_object_set (setting, NM_SETTING_IP_CONFIG_GATEWAY, NULL, NULL);
+ }
+}
+
static NMSetting *
read_setting (KeyfileReaderInfo *info)
{
@@ -1517,8 +1529,10 @@ read_setting (KeyfileReaderInfo *info)
info->setting = setting;
nm_setting_enumerate_values (setting, read_one_setting_value, info);
info->setting = NULL;
- if (!info->error)
+ if (!info->error) {
+ fix_setting (setting);
return setting;
+ }
g_object_unref (setting);
} else {
diff --git a/libnm-core/tests/test-keyfile.c b/libnm-core/tests/test-keyfile.c
index 92b6c1f56c..7c302d15d0 100644
--- a/libnm-core/tests/test-keyfile.c
+++ b/libnm-core/tests/test-keyfile.c
@@ -25,6 +25,7 @@
#include "nm-keyfile-internal.h"
#include "nm-simple-connection.h"
#include "nm-setting-connection.h"
+#include "nm-setting-ip-config.h"
#include "nm-setting-wired.h"
#include "nm-setting-8021x.h"
@@ -520,6 +521,58 @@ test_8021x_cert_read (void)
/******************************************************************************/
+static void
+test_ipv4_gateway_never_default (void)
+{
+ gs_unref_object NMConnection *con = NULL;
+ NMSettingIPConfig *s_ip;
+
+ con = nmtst_create_connection_from_keyfile (
+ "[connection]\n"
+ "type=ethernet\n"
+ "interface-name=eth0\n"
+ "[ipv4]\n"
+ "method=manual\n"
+ "address1=192.168.10.150/24,192.168.10.1\n"
+ "never-default=true\n"
+ "",
+ "/test_ipv4/test0", NULL);
+
+ s_ip = nm_connection_get_setting_ip4_config (con);
+ g_assert (s_ip);
+
+ g_assert_cmpint (nm_setting_ip_config_get_num_addresses (s_ip), ==, 1);
+ g_assert (nm_setting_ip_config_get_never_default (s_ip));
+ g_assert (nm_setting_ip_config_get_gateway (s_ip) == NULL);
+}
+
+static void
+test_ipv6_gateway_never_default (void)
+{
+ gs_unref_object NMConnection *con = NULL;
+ NMSettingIPConfig *s_ip;
+
+ con = nmtst_create_connection_from_keyfile (
+ "[connection]\n"
+ "type=ethernet\n"
+ "interface-name=eth0\n"
+ "[ipv6]\n"
+ "method=manual\n"
+ "address1=fd01::2/64,fd01::1\n"
+ "never-default=true\n"
+ "",
+ "/test_ipv6/test0", NULL);
+
+ s_ip = nm_connection_get_setting_ip6_config (con);
+ g_assert (s_ip);
+
+ g_assert_cmpint (nm_setting_ip_config_get_num_addresses (s_ip), ==, 1);
+ g_assert (nm_setting_ip_config_get_never_default (s_ip));
+ g_assert (nm_setting_ip_config_get_gateway (s_ip) == NULL);
+}
+
+/******************************************************************************/
+
NMTST_DEFINE ();
int main (int argc, char **argv)
@@ -528,6 +581,8 @@ int main (int argc, char **argv)
g_test_add_func ("/core/keyfile/test_8021x_cert", test_8021x_cert);
g_test_add_func ("/core/keyfile/test_8021x_cert_read", test_8021x_cert_read);
+ g_test_add_func ("/core/keyfile/test_ipv4_gateway_never_default", test_ipv4_gateway_never_default);
+ g_test_add_func ("/core/keyfile/test_ipv6_gateway_never_default", test_ipv6_gateway_never_default);
return g_test_run ();
}