ifcfg: merge branch 'th/ifcfg-ipv6-disabled-fix'

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/962
This commit is contained in:
Thomas Haller 2021-08-19 09:02:25 +02:00
commit b08eef9d38
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
19 changed files with 138 additions and 69 deletions

View file

@ -1974,26 +1974,27 @@ make_ip4_setting(shvarFile *ifcfg,
/* DNS servers
* Pick up just IPv4 addresses (IPv6 addresses are taken by make_ip6_setting())
*/
for (i = 1; i <= 10; i++) {
for (i = 1; i < 10000; i++) {
char tag[256];
numbered_tag(tag, "DNS", i);
nm_clear_g_free(&value);
v = svGetValueStr(ifcfg, tag, &value);
if (v) {
if (nm_utils_ipaddr_is_valid(AF_INET, v)) {
if (!nm_setting_ip_config_add_dns(s_ip4, v))
PARSE_WARNING("duplicate DNS server %s", tag);
} else if (nm_utils_ipaddr_is_valid(AF_INET6, v)) {
/* Ignore IPv6 addresses */
} else {
g_set_error(error,
NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid DNS server address '%s'",
v);
return NULL;
}
if (!v)
break;
if (nm_utils_ipaddr_is_valid(AF_INET, v)) {
if (!nm_setting_ip_config_add_dns(s_ip4, v))
PARSE_WARNING("duplicate DNS server %s", tag);
} else if (nm_utils_ipaddr_is_valid(AF_INET6, v)) {
/* Ignore IPv6 addresses */
} else {
g_set_error(error,
NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid DNS server address '%s'",
v);
return NULL;
}
}
@ -2249,6 +2250,7 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
gboolean ip6_privacy = FALSE, ip6_privacy_prefer_public_ip;
NMSettingIP6ConfigPrivacy ip6_privacy_val;
guint32 route_table;
gboolean is_disabled;
s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
@ -2375,10 +2377,9 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
NULL);
/* Don't bother to read IP, DNS and routes when IPv6 is disabled */
if (NM_IN_STRSET(method,
NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NM_SETTING_IP6_CONFIG_METHOD_DISABLED))
return NM_SETTING(g_steal_pointer(&s_ip6));
is_disabled = NM_IN_STRSET(method,
NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NM_SETTING_IP6_CONFIG_METHOD_DISABLED);
nm_clear_g_free(&value);
v = svGetValueStr(ifcfg, "DHCPV6_DUID", &value);
@ -2438,15 +2439,23 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
NULL);
list = nm_strsplit_set(value, " ");
for (iter = list, i = 0; iter && *iter; iter++, i++) {
NMIPAddress *addr = NULL;
if (list) {
if (is_disabled)
PARSE_WARNING("ignore IPv6 addresses with method disabled/ignore");
else {
for (iter = list, i = 0; *iter; iter++, i++) {
nm_auto_unref_ip_address NMIPAddress *addr = NULL;
if (!parse_full_ip6_address(ifcfg, *iter, i, &addr, error))
return NULL;
if (!parse_full_ip6_address(ifcfg, *iter, i, &addr, is_disabled ? NULL : error)) {
if (is_disabled)
break;
return NULL;
}
if (!nm_setting_ip_config_add_address(s_ip6, addr))
PARSE_WARNING("duplicate IP6 address");
nm_ip_address_unref(addr);
if (!nm_setting_ip_config_add_address(s_ip6, addr))
PARSE_WARNING("duplicate IP6 address");
}
}
}
/* Gateway */
@ -2462,18 +2471,20 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
}
if (v) {
char *ptr;
if ((ptr = strchr(v, '%')) != NULL)
*ptr = '\0'; /* remove %interface prefix if present */
if (!nm_utils_ipaddr_is_valid(AF_INET6, v)) {
g_set_error(error,
NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid IP6 address '%s'",
v);
return NULL;
}
g_object_set(s_ip6, NM_SETTING_IP_CONFIG_GATEWAY, v, NULL);
if (!is_disabled) {
g_set_error(error,
NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid IP6 address '%s'",
v);
return NULL;
}
} else
g_object_set(s_ip6, NM_SETTING_IP_CONFIG_GATEWAY, v, NULL);
}
}
@ -2497,23 +2508,27 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
/* DNS servers
* Pick up just IPv6 addresses (IPv4 addresses are taken by make_ip4_setting())
*/
for (i = 1; i <= 10; i++) {
for (i = 1; i < 10000; i++) {
char tag[256];
numbered_tag(tag, "DNS", i);
nm_clear_g_free(&value);
v = svGetValueStr(ifcfg, tag, &value);
if (!v) {
/* all done */
if (!v)
break;
}
if (nm_utils_ipaddr_is_valid(AF_INET6, v)) {
if (is_disabled) {
PARSE_WARNING("ignore DNS server addresses with method disabled/ignore");
break;
}
if (!nm_setting_ip_config_add_dns(s_ip6, v))
PARSE_WARNING("duplicate DNS server %s", tag);
} else if (nm_utils_ipaddr_is_valid(AF_INET, v)) {
/* Ignore IPv4 addresses */
} else {
if (is_disabled)
continue;
g_set_error(error,
NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_INVALID_CONNECTION,
@ -2542,9 +2557,13 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
searches = nm_strsplit_set(v, " ");
if (searches) {
for (iter = searches; *iter; iter++) {
if (!nm_setting_ip_config_add_dns_search(s_ip6, *iter))
PARSE_WARNING("duplicate DNS domain '%s'", *iter);
if (is_disabled) {
PARSE_WARNING("ignore IPV6_DOMAIN with method disabled/ignore");
} else {
for (iter = searches; *iter; iter++) {
if (!nm_setting_ip_config_add_dns_search(s_ip6, *iter))
PARSE_WARNING("duplicate DNS domain '%s'", *iter);
}
}
}
}

View file

@ -2685,12 +2685,11 @@ write_dns_setting(shvarFile *ifcfg, NMConnection *connection, int addr_family)
}
}
static gboolean
static void
write_ip4_setting(NMConnection *connection,
shvarFile * ifcfg,
shvarFile ** out_route_content_svformat,
GString ** out_route_content,
GError ** error)
GString ** out_route_content)
{
NMSettingIPConfig * s_ip4;
const char * value;
@ -2713,7 +2712,7 @@ write_ip4_setting(NMConnection *connection,
s_ip4 = nm_connection_get_setting_ip4_config(connection);
if (!s_ip4)
return TRUE;
return;
method = nm_setting_ip_config_get_method(s_ip4);
@ -2722,7 +2721,7 @@ write_ip4_setting(NMConnection *connection,
method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
if (nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED))
return TRUE;
return;
num = nm_setting_ip_config_get_num_addresses(s_ip4);
@ -2881,8 +2880,6 @@ write_ip4_setting(NMConnection *connection,
}
svSetValueStr(ifcfg, "DHCP_REJECT_SERVERS", str->str);
}
return TRUE;
}
static void
@ -2968,11 +2965,8 @@ write_ip4_aliases(NMConnection *connection, const char *base_ifcfg_path)
}
}
static gboolean
write_ip6_setting(NMConnection *connection,
shvarFile * ifcfg,
GString ** out_route6_content,
GError ** error)
static void
write_ip6_setting(NMConnection *connection, shvarFile *ifcfg, GString **out_route6_content)
{
NMSettingIPConfig * s_ip6;
const char * value;
@ -2991,17 +2985,15 @@ write_ip6_setting(NMConnection *connection,
s_ip6 = nm_connection_get_setting_ip6_config(connection);
if (!s_ip6)
return TRUE;
return;
value = nm_setting_ip_config_get_method(s_ip6);
g_assert(value);
if (!strcmp(value, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
svSetValueStr(ifcfg, "IPV6INIT", "no");
return TRUE;
} else if (!strcmp(value, NM_SETTING_IP6_CONFIG_METHOD_DISABLED)) {
svSetValueStr(ifcfg, "IPV6_DISABLED", "yes");
svSetValueStr(ifcfg, "IPV6INIT", "no");
return TRUE;
} else if (!strcmp(value, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
svSetValueStr(ifcfg, "IPV6INIT", "yes");
svSetValueStr(ifcfg, "IPV6_AUTOCONF", "yes");
@ -3148,8 +3140,6 @@ write_ip6_setting(NMConnection *connection,
write_res_options(ifcfg, s_ip6, "IPV6_RES_OPTIONS");
NM_SET_OUT(out_route6_content, write_route_file(s_ip6));
return TRUE;
}
static void
@ -3441,15 +3431,12 @@ do_write_construct(NMConnection * connection,
} else
route_ignore = FALSE;
if (!write_ip4_setting(connection,
ifcfg,
!route_ignore && route_path_is_svformat ? &route_content_svformat : NULL,
!route_ignore && route_path_is_svformat ? NULL : &route_content,
error))
return FALSE;
write_ip4_setting(connection,
ifcfg,
!route_ignore && route_path_is_svformat ? &route_content_svformat : NULL,
!route_ignore && route_path_is_svformat ? NULL : &route_content);
if (!write_ip6_setting(connection, ifcfg, !route_ignore ? &route6_content : NULL, error))
return FALSE;
write_ip6_setting(connection, ifcfg, !route_ignore ? &route6_content : NULL);
write_ip_routing_rules(connection, ifcfg, route_ignore);

View file

@ -16,6 +16,8 @@ BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="System test-wired-802-1X-subj-matches"
UUID=${UUID}
DEVICE=eth0

View file

@ -11,6 +11,9 @@ GATEWAY=1.1.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="Test Write Bond Main"
UUID=${UUID}
DEVICE=bond0

View file

@ -5,6 +5,9 @@ BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="Test Write Permissions"
UUID=${UUID}
ONBOOT=yes

View file

@ -11,6 +11,9 @@ BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="Test Write Wifi LEAP"
UUID=${UUID}
ONBOOT=yes

View file

@ -10,6 +10,9 @@ BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="Test Write Wifi WEP 104 ASCII"
UUID=${UUID}
ONBOOT=yes

View file

@ -17,6 +17,8 @@ IPV4_FAILURE_FATAL=no
ACD_TIMEOUT=400
ARPING_WAIT=1
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="Test Write Wired Static Routes"
UUID=${UUID}
ONBOOT=yes

View file

@ -8,6 +8,8 @@ BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="Test Write Wired with Match setting"
UUID=${UUID}
ONBOOT=yes

View file

@ -17,6 +17,8 @@ PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="Vlan test-vlan-interface"
UUID=${UUID}
DEVICE=vlan43

View file

@ -8,6 +8,8 @@ BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="random wifi connection"
UUID=${UUID}
ONBOOT=yes

View file

@ -8,6 +8,8 @@ BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="random wifi connection 2"
UUID=${UUID}
ONBOOT=yes

View file

@ -6,6 +6,8 @@ DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6_DISABLED=yes
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="Test Write Wired Disabled IP6"
UUID=${UUID}
ONBOOT=yes

View file

@ -12,6 +12,9 @@ GATEWAY=1.1.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="Test Write SR-IOV config"
UUID=${UUID}
DEVICE=eth0

View file

@ -6,6 +6,8 @@ BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=test-static-routes-legacy
UUID=ba60d05a-7898-820d-c2db-427a88f8f2a5
DEVICE=eth0

View file

@ -9,6 +9,9 @@ GATEWAY=1.1.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="Test Write TC config"
UUID=${UUID}
DEVICE=eth0

View file

@ -10,6 +10,9 @@ GATEWAY=1.1.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="Test Write TC config"
UUID=${UUID}
DEVICE=eth0

View file

@ -9,6 +9,8 @@ HWADDR=
PROXY_METHOD=none
BROWSER_ONLY=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="Vlan test-vlan-vlanid-use"
UUID=${UUID}
DEVICE=eth0.9

View file

@ -5287,7 +5287,12 @@ test_write_wired_match(void)
s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
nm_connection_add_setting(connection, NM_SETTING(s_ip6));
g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
g_object_set(s_ip6,
NM_SETTING_IP_CONFIG_METHOD,
NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
(int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
NULL);
/* Match setting */
s_match = (NMSettingMatch *) nm_setting_match_new();
@ -5480,7 +5485,12 @@ test_write_ip6_disabled(void)
s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
nm_connection_add_setting(connection, NM_SETTING(s_ip6));
g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_DISABLED, NULL);
g_object_set(s_ip6,
NM_SETTING_IP_CONFIG_METHOD,
NM_SETTING_IP6_CONFIG_METHOD_DISABLED,
NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
(int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
NULL);
nmtst_assert_connection_verifies(connection);
@ -5755,6 +5765,8 @@ test_write_wired_static_routes(void)
NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NM_SETTING_IP_CONFIG_MAY_FAIL,
TRUE,
NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
(int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
NULL);
nmtst_assert_connection_verifies(connection);
@ -5834,6 +5846,8 @@ test_write_wired_dhcp_8021x_peap_mschapv2(void)
NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NM_SETTING_IP_CONFIG_MAY_FAIL,
TRUE,
NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
(int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
NULL);
/* 802.1x setting */
@ -6331,6 +6345,8 @@ test_write_wifi_open(void)
NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NM_SETTING_IP_CONFIG_MAY_FAIL,
TRUE,
NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
(int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
NULL);
nmtst_assert_connection_verifies(connection);
@ -6498,6 +6514,8 @@ test_write_wifi_wep(void)
NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NM_SETTING_IP_CONFIG_MAY_FAIL,
TRUE,
NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
(int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
NULL);
nmtst_assert_connection_verifies(connection);
@ -7781,6 +7799,8 @@ test_write_wifi_wpa_then_open(void)
NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NM_SETTING_IP_CONFIG_MAY_FAIL,
TRUE,
NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
(int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
NULL);
nmtst_assert_connection_verifies(connection);
@ -7904,6 +7924,8 @@ test_write_wifi_wpa_then_wep_with_perms(void)
NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NM_SETTING_IP_CONFIG_MAY_FAIL,
TRUE,
NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
(int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
NULL);
nmtst_assert_connection_verifies(connection);
@ -8303,6 +8325,8 @@ test_write_wifi_wep_agent_keys(void)
NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NM_SETTING_IP_CONFIG_MAY_FAIL,
TRUE,
NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
(int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
NULL);
/* Wifi setting */