diff options
author | Thomas Haller <thaller@redhat.com> | 2019-08-07 12:51:23 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2019-09-23 13:13:23 +0200 |
commit | 5aa50d7c87c85591f2dada6dd0af8efdfb1cf837 (patch) | |
tree | 905ad33e7037d8389de67b5239506a7bfe827811 | |
parent | e79f1b623d4154631f66d8bc6cca151a1d840b4e (diff) | |
download | NetworkManager-5aa50d7c87c85591f2dada6dd0af8efdfb1cf837.tar.gz |
core: fix wrongly generating "Wired connection 1" (auto-default) for ethernet with MAC
If a profile has only "ethernet.mac-address" set, but
"connection.interface-name" not, then the previous check
iface = nm_setting_connection_get_interface_name (s_con);
if (!nm_streq0 (iface, nm_device_get_iface (device)))
continue;
would wrongly consider the profile not matching for the device.
As a result, we would wrongly create a auto-default connection.
Fix that. We already call nm_device_check_connection_compatible()
above. That is fully suitable to compare the interface name and
the MAC address. We don't need to duplicate this check (wrongly).
See also commit 77d01c909470 ('settings: ignore incompatible connections
when looking for existing ones') for how this code changed.
https://bugzilla.redhat.com/show_bug.cgi?id=1727909
-rw-r--r-- | src/settings/nm-settings.c | 33 |
1 files changed, 3 insertions, 30 deletions
diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index f474324c20..45cfbd0683 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -3355,23 +3355,16 @@ static gboolean have_connection_for_device (NMSettings *self, NMDevice *device) { NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self); - NMSettingWired *s_wired; - const char *setting_hwaddr; - const char *perm_hw_addr; NMSettingsConnection *sett_conn; g_return_val_if_fail (NM_IS_SETTINGS (self), FALSE); - perm_hw_addr = nm_device_get_permanent_hw_address (device); - - /* Find a wired connection locked to the given MAC address, if any */ + /* Find a wired connection matching for the device, if any */ c_list_for_each_entry (sett_conn, &priv->connections_lst_head, _connections_lst) { NMConnection *connection = nm_settings_connection_get_connection (sett_conn); - NMSettingConnection *s_con = nm_connection_get_setting_connection (connection); const char *ctype; - const char *iface; - ctype = nm_setting_connection_get_connection_type (s_con); + ctype = nm_connection_get_connection_type (connection); if (!NM_IN_STRSET (ctype, NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_PPPOE_SETTING_NAME)) continue; @@ -3386,27 +3379,7 @@ have_connection_for_device (NMSettings *self, NMDevice *device) NM_SETTINGS_CONNECTION_INT_FLAGS_VOLATILE)) continue; - iface = nm_setting_connection_get_interface_name (s_con); - if (!nm_streq0 (iface, nm_device_get_iface (device))) - continue; - - s_wired = nm_connection_get_setting_wired (connection); - if ( !s_wired - && nm_streq (ctype, NM_SETTING_PPPOE_SETTING_NAME)) { - /* No wired setting; therefore the PPPoE connection applies to any device */ - return TRUE; - } - - setting_hwaddr = nm_setting_wired_get_mac_address (s_wired); - if (setting_hwaddr) { - /* A connection mac-locked to this device */ - if ( perm_hw_addr - && nm_utils_hwaddr_matches (setting_hwaddr, -1, perm_hw_addr, -1)) - return TRUE; - } else { - /* A connection that applies to any wired device */ - return TRUE; - } + return TRUE; } /* See if there's a known non-NetworkManager configuration for the device */ |