diff options
Diffstat (limited to 'src/ppp-manager')
| -rw-r--r-- | src/ppp-manager/nm-ppp-manager.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c index 16e34f11..89a7addf 100644 --- a/src/ppp-manager/nm-ppp-manager.c +++ b/src/ppp-manager/nm-ppp-manager.c @@ -481,7 +481,7 @@ impl_ppp_manager_set_ip4_config (NMPPPManager *manager, if (g_variant_lookup (config_dict, NM_PPP_IP4_CONFIG_PREFIX, "u", &u32)) address.plen = u32; - if (address.address && address.plen) { + if (address.address && address.plen && address.plen <= 32) { address.source = NM_IP_CONFIG_SOURCE_PPP; nm_ip4_config_add_address (config, &address); } else { @@ -554,6 +554,7 @@ impl_ppp_manager_set_ip6_config (NMPPPManager *manager, NMPlatformIP6Address addr; struct in6_addr a; NMUtilsIPv6IfaceId iid = NM_UTILS_IPV6_IFACE_ID_INIT; + gboolean has_peer = FALSE; _LOGI ("(IPv6 Config Get) reply received."); @@ -567,9 +568,12 @@ impl_ppp_manager_set_ip6_config (NMPPPManager *manager, if (iid_value_to_ll6_addr (config_dict, NM_PPP_IP6_CONFIG_PEER_IID, &a, NULL)) { nm_ip6_config_set_gateway (config, &a); addr.peer_address = a; + has_peer = TRUE; } if (iid_value_to_ll6_addr (config_dict, NM_PPP_IP6_CONFIG_OUR_IID, &addr.address, &iid)) { + if (!has_peer) + addr.peer_address = addr.address; nm_ip6_config_add_address (config, &addr); if (set_ip_config_common (manager, config_dict, NM_PPP_IP6_CONFIG_INTERFACE, NULL)) { @@ -1064,8 +1068,14 @@ nm_ppp_manager_start (NMPPPManager *manager, } pppoe_setting = nm_connection_get_setting_pppoe (connection); - if (pppoe_setting) + if (pppoe_setting) { + /* We can't modify the applied connection's setting, make a copy */ + if (!s_ppp_created) { + s_ppp = NM_SETTING_PPP (nm_setting_duplicate ((NMSetting *) s_ppp)); + s_ppp_created = TRUE; + } pppoe_fill_defaults (s_ppp); + } adsl_setting = (NMSettingAdsl *) nm_connection_get_setting (connection, NM_TYPE_SETTING_ADSL); |