mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-26 19:20:12 +01:00
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 77d01c9094 ('settings: ignore incompatible connections
when looking for existing ones') for how this code changed.
https://bugzilla.redhat.com/show_bug.cgi?id=1727909
(cherry picked from commit 5aa50d7c87)
This commit is contained in:
parent
900eb63cf3
commit
04c5cc5a5c
1 changed files with 3 additions and 30 deletions
|
|
@ -3379,23 +3379,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;
|
||||
|
|
@ -3410,27 +3403,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 */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue