diff options
| author | Beniamino Galvani <bgalvani@redhat.com> | 2016-03-22 22:18:21 +0100 |
|---|---|---|
| committer | Beniamino Galvani <bgalvani@redhat.com> | 2016-03-22 22:18:21 +0100 |
| commit | 7cab83049ecebbcdc6d6d148bb569eb1f0da7722 (patch) | |
| tree | 07843e1900a14fb651a3aec884019c1543638e46 | |
| parent | 3cb50cd6a913827c9bea0766b6fadd07549ec9d1 (diff) | |
| download | NetworkManager-7cab83049ecebbcdc6d6d148bb569eb1f0da7722.tar.gz | |
libnm-core: ignore gateway when never-default is set
| -rw-r--r-- | libnm-core/nm-keyfile-reader.c | 16 | ||||
| -rw-r--r-- | libnm-core/tests/test-keyfile.c | 55 |
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 (); } |
