mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-01 16:30:12 +01:00
device: fix restricting Generic connection by interface-name
NMDeviceGeneric:check_connection_compatible() doesn't check for a
matching interface name. It relies on the parent implementation to
do that.
The parent implementation calls nm_manager_get_connection_iface().
That fails for NM_SETTING_GENERIC_SETTING_NAME, because that one has
no factory. Maybe this imbalance of having no factory for the Generic device
is wrong, but usually factories only match a distinct set of device
types, while the generic factory would handle them all (as last resort).
Without this, activating a generic connection might activate the
wrong interface.
(cherry picked from commit 3876b10a47)
This commit is contained in:
parent
d19a11e137
commit
753a2cc4d9
1 changed files with 17 additions and 9 deletions
|
|
@ -1144,6 +1144,11 @@ nm_manager_get_connection_iface (NMManager *self,
|
|||
|
||||
factory = nm_device_factory_manager_find_factory_for_connection (connection);
|
||||
if (!factory) {
|
||||
if (nm_streq0 (nm_connection_get_connection_type (connection), NM_SETTING_GENERIC_SETTING_NAME)) {
|
||||
/* the generic type doesn't have a factory. */
|
||||
goto return_ifname_fom_connection;
|
||||
}
|
||||
|
||||
g_set_error (error,
|
||||
NM_MANAGER_ERROR,
|
||||
NM_MANAGER_ERROR_FAILED,
|
||||
|
|
@ -1155,15 +1160,7 @@ nm_manager_get_connection_iface (NMManager *self,
|
|||
if ( !out_parent
|
||||
&& !NM_DEVICE_FACTORY_GET_CLASS (factory)->get_connection_iface) {
|
||||
/* optimization. Shortcut lookup of the partent device. */
|
||||
iface = g_strdup (nm_connection_get_interface_name (connection));
|
||||
if (!iface) {
|
||||
g_set_error (error,
|
||||
NM_MANAGER_ERROR,
|
||||
NM_MANAGER_ERROR_FAILED,
|
||||
"failed to determine interface name: error determine name for %s",
|
||||
nm_connection_get_connection_type (connection));
|
||||
}
|
||||
return iface;
|
||||
goto return_ifname_fom_connection;
|
||||
}
|
||||
|
||||
parent = find_parent_device_for_connection (self, connection, factory);
|
||||
|
|
@ -1177,6 +1174,17 @@ nm_manager_get_connection_iface (NMManager *self,
|
|||
if (out_parent)
|
||||
*out_parent = parent;
|
||||
return iface;
|
||||
|
||||
return_ifname_fom_connection:
|
||||
iface = g_strdup (nm_connection_get_interface_name (connection));
|
||||
if (!iface) {
|
||||
g_set_error (error,
|
||||
NM_MANAGER_ERROR,
|
||||
NM_MANAGER_ERROR_FAILED,
|
||||
"failed to determine interface name: error determine name for %s",
|
||||
nm_connection_get_connection_type (connection));
|
||||
}
|
||||
return iface;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue