diff options
Diffstat (limited to 'src/libnm-core-impl/nm-connection.c')
| -rw-r--r-- | src/libnm-core-impl/nm-connection.c | 75 |
1 files changed, 34 insertions, 41 deletions
diff --git a/src/libnm-core-impl/nm-connection.c b/src/libnm-core-impl/nm-connection.c index 6ffc750a..a23dc113 100644 --- a/src/libnm-core-impl/nm-connection.c +++ b/src/libnm-core-impl/nm-connection.c @@ -908,7 +908,7 @@ _nm_setting_connection_verify_secondaries(GArray *secondaries, GError **error) * Now, when we find any invalid/non-normalized values, we reject/normalize * them. We also filter out duplicates. */ - strv = nm_strvarray_get_strv_non_empty(secondaries, NULL); + strv = nm_strvarray_get_strv_notempty(secondaries, NULL); for (i = 0; i < len; i++) { const char *uuid = strv[i]; @@ -977,7 +977,7 @@ _normalize_connection_secondaries(NMConnection *self) if (_nm_setting_connection_verify_secondaries(secondaries, NULL)) return FALSE; - strv = nm_strvarray_get_strv_non_empty_dup(secondaries, NULL); + strv = nm_strvarray_get_strv_notempty_dup(secondaries, NULL); for (i = 0, j = 0; strv[i]; i++) { gs_free char *s = g_steal_pointer(&strv[i]); char uuid_normalized[37]; @@ -986,7 +986,7 @@ _normalize_connection_secondaries(NMConnection *self) if (!nm_uuid_is_valid_nm(s, &uuid_is_normalized, uuid_normalized)) continue; - if (nm_strv_find_first(strv, j, uuid_is_normalized ? uuid_normalized : s) >= 0) + if (nm_strv_contains(strv, j, uuid_is_normalized ? uuid_normalized : s)) continue; strv[j++] = uuid_is_normalized ? g_strdup(uuid_normalized) : g_steal_pointer(&s); @@ -1096,7 +1096,7 @@ _normalize_connection_slave_type(NMConnection *self) if (!nm_setting_connection_get_master(s_con)) return FALSE; - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (slave_type) { if (_nm_setting_slave_type_is_valid(slave_type, &port_type) && port_type) { NMSetting *s_port; @@ -1112,7 +1112,7 @@ _normalize_connection_slave_type(NMConnection *self) } } else { if ((slave_type = _nm_connection_detect_slave_type(self, NULL))) { - g_object_set(s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, slave_type, NULL); + g_object_set(s_con, NM_SETTING_CONNECTION_PORT_TYPE, slave_type, NULL); return TRUE; } } @@ -1172,7 +1172,7 @@ _supports_addr_family(NMConnection *self, int family) if (strcmp(connection_type, NM_SETTING_6LOWPAN_SETTING_NAME) == 0) return family == AF_INET6 || family == AF_UNSPEC; if ((s_con = nm_connection_get_setting_connection(self)) - && (nm_streq0(nm_setting_connection_get_slave_type(s_con), NM_SETTING_VRF_SETTING_NAME))) + && (nm_streq0(nm_setting_connection_get_port_type(s_con), NM_SETTING_VRF_SETTING_NAME))) return TRUE; return !nm_setting_connection_get_master(nm_connection_get_setting_connection(self)); @@ -1430,52 +1430,42 @@ again: } static gboolean -_normalize_wireless_mac_address_randomization(NMConnection *self) +_normalize_wireless_mac_address_randomization(NMSettingWireless *s_wifi) { - NMSettingWireless *s_wifi = nm_connection_get_setting_wireless(self); + const char *desired_cloned_mac_address; const char *cloned_mac_address; + NMSettingMacRandomization desired_mac_address_randomization; NMSettingMacRandomization mac_address_randomization; + gboolean changed = FALSE; - if (!s_wifi) - return FALSE; + _nm_setting_wireless_normalize_mac_address_randomization(s_wifi, + &desired_cloned_mac_address, + &desired_mac_address_randomization); mac_address_randomization = nm_setting_wireless_get_mac_address_randomization(s_wifi); - if (!NM_IN_SET(mac_address_randomization, - NM_SETTING_MAC_RANDOMIZATION_DEFAULT, - NM_SETTING_MAC_RANDOMIZATION_NEVER, - NM_SETTING_MAC_RANDOMIZATION_ALWAYS)) - return FALSE; + cloned_mac_address = nm_setting_wireless_get_cloned_mac_address(s_wifi); - cloned_mac_address = nm_setting_wireless_get_cloned_mac_address(s_wifi); - if (cloned_mac_address) { - if (nm_streq(cloned_mac_address, "random")) { - if (mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_ALWAYS) - return FALSE; - mac_address_randomization = NM_SETTING_MAC_RANDOMIZATION_ALWAYS; - } else if (nm_streq(cloned_mac_address, "permanent")) { - if (mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_NEVER) - return FALSE; - mac_address_randomization = NM_SETTING_MAC_RANDOMIZATION_NEVER; - } else { - if (mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_DEFAULT) - return FALSE; - mac_address_randomization = NM_SETTING_MAC_RANDOMIZATION_DEFAULT; - } + /* Note that "mac_address_randomization" is possibly the string owned by + * "s_wifi". We must be careful that modifying "s_wifi" might invalidate + * the string. */ + + if (!nm_streq0(cloned_mac_address, desired_cloned_mac_address)) { g_object_set(s_wifi, - NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION, - mac_address_randomization, + NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, + desired_cloned_mac_address, NULL); - return TRUE; + changed = TRUE; } - if (mac_address_randomization != NM_SETTING_MAC_RANDOMIZATION_DEFAULT) { + + if (mac_address_randomization != desired_mac_address_randomization) { g_object_set(s_wifi, - NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, - mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_ALWAYS ? "random" - : "permanent", + NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION, + (guint) desired_mac_address_randomization, NULL); - return TRUE; + changed = TRUE; } - return FALSE; + + return changed; } static gboolean @@ -1497,6 +1487,9 @@ _normalize_wireless(NMConnection *self) changed = TRUE; } + if (_normalize_wireless_mac_address_randomization(s_wifi)) + changed = TRUE; + return changed; } @@ -1775,7 +1768,7 @@ _normalize_invalid_slave_port_settings(NMConnection *self) const char *slave_type; gboolean changed = FALSE; - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (!nm_streq0(slave_type, NM_SETTING_BRIDGE_SETTING_NAME) && _nm_connection_remove_setting(self, NM_TYPE_SETTING_BRIDGE_PORT)) @@ -2043,7 +2036,6 @@ _connection_normalize(NMConnection *connection, was_modified |= _normalize_infiniband(connection); was_modified |= _normalize_bond_mode(connection); was_modified |= _normalize_bond_options(connection); - was_modified |= _normalize_wireless_mac_address_randomization(connection); was_modified |= _normalize_wireless(connection); was_modified |= _normalize_macsec(connection); was_modified |= _normalize_team_config(connection); @@ -3182,6 +3174,7 @@ nm_connection_is_virtual(NMConnection *connection) NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BRIDGE_SETTING_NAME, NM_SETTING_DUMMY_SETTING_NAME, + NM_SETTING_HSR_SETTING_NAME, NM_SETTING_IP_TUNNEL_SETTING_NAME, NM_SETTING_MACSEC_SETTING_NAME, NM_SETTING_MACVLAN_SETTING_NAME, |