ifcfg-rh: fix interpreting missing MAC_ADDRESS_RANDOMIZATION as permanent address

With commit 4f6c91d696, we aimed to
enable mac-address-randomization by default for Wi-Fi. That however
is not possible by default because it breaks various scenarios.
Also, later wifi.mac-address-randomization was deprecated in favor
of wifi.cloned-mac-address setting.

Both wifi.mac-address-randomization and wifi.cloned-mac-address support
global default values, so it is wrong to read a missing
MAC_ADDRESS_RANDOMIZATION setting as "NEVER" -- which due to
normalization also results in cloned-mac-address=permanent.

See also commit 46d53e1101 which does
something similar for keyfile.

This bug also prevents a user from clearing the cloned-mac-address:

  $ nmcli connection show "$CONN"
  ...
  802-11-wireless.cloned-mac-address:        permanent
  802-11-wireless.mac-address-randomization: never
  ...
  $ nmcli connection modify "$CONN: wifi.cloned-mac-address ''
  # ^ takes no effect

As workaround, you also need to clear mac-address-randomization:

  $ nmcli connection modify "$CONN: wifi.cloned-mac-address '' \
          wifi.mac-address-randomization default

https://mail.gnome.org/archives/networkmanager-list/2017-January/msg00060.html
This commit is contained in:
Thomas Haller 2017-01-28 15:53:47 +01:00
parent dbd365c3f9
commit 27cba47957
3 changed files with 7 additions and 8 deletions

View file

@ -3387,7 +3387,7 @@ make_wireless_setting (shvarFile *ifcfg,
const char *cvalue;
char *value = NULL;
gint64 chan = 0;
NMSettingMacRandomization mac_randomization = NM_SETTING_MAC_RANDOMIZATION_NEVER;
NMSettingMacRandomization mac_randomization;
NMSettingWirelessPowersave powersave = NM_SETTING_WIRELESS_POWERSAVE_DEFAULT;
s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
@ -3587,7 +3587,7 @@ make_wireless_setting (shvarFile *ifcfg,
}
g_free (value);
} else
mac_randomization = NM_SETTING_MAC_RANDOMIZATION_NEVER;
mac_randomization = NM_SETTING_MAC_RANDOMIZATION_DEFAULT;
g_object_set (s_wireless,
NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION,

View file

@ -941,17 +941,16 @@ write_wireless_setting (NMConnection *connection,
break;
}
svUnsetValue (ifcfg, "MAC_ADDRESS_RANDOMIZATION");
switch (nm_setting_wireless_get_mac_address_randomization (s_wireless)) {
case NM_SETTING_MAC_RANDOMIZATION_DEFAULT:
svSetValueString (ifcfg, "MAC_ADDRESS_RANDOMIZATION", "default");
case NM_SETTING_MAC_RANDOMIZATION_NEVER:
svSetValueString (ifcfg, "MAC_ADDRESS_RANDOMIZATION", "never");
break;
case NM_SETTING_MAC_RANDOMIZATION_ALWAYS:
svSetValueString (ifcfg, "MAC_ADDRESS_RANDOMIZATION", "always");
break;
case NM_SETTING_MAC_RANDOMIZATION_DEFAULT:
default:
case NM_SETTING_MAC_RANDOMIZATION_NEVER:
svSetValueString (ifcfg, "MAC_ADDRESS_RANDOMIZATION", "never");
svSetValueString (ifcfg, "MAC_ADDRESS_RANDOMIZATION", "default");
break;
}

View file

@ -8998,7 +8998,7 @@ int main (int argc, char **argv)
nmtst_add_test_func (TPATH "wifi/read-mac-random-always", test_read_wifi_mac_random, "always", GINT_TO_POINTER (NM_SETTING_MAC_RANDOMIZATION_ALWAYS));
nmtst_add_test_func (TPATH "wifi/read-mac-random-never", test_read_wifi_mac_random, "never", GINT_TO_POINTER (NM_SETTING_MAC_RANDOMIZATION_NEVER));
nmtst_add_test_func (TPATH "wifi/read-mac-random-default", test_read_wifi_mac_random, "default", GINT_TO_POINTER (NM_SETTING_MAC_RANDOMIZATION_DEFAULT));
nmtst_add_test_func (TPATH "wifi/read-mac-random-missing", test_read_wifi_mac_random, "missing", GINT_TO_POINTER (NM_SETTING_MAC_RANDOMIZATION_NEVER));
nmtst_add_test_func (TPATH "wifi/read-mac-random-missing", test_read_wifi_mac_random, "missing", GINT_TO_POINTER (NM_SETTING_MAC_RANDOMIZATION_DEFAULT));
nmtst_add_test_func (TPATH "wifi/write-mac-random-always", test_write_wifi_mac_random, "always", GINT_TO_POINTER (NM_SETTING_MAC_RANDOMIZATION_ALWAYS), "always");
nmtst_add_test_func (TPATH "wifi/write-mac-random-never", test_write_wifi_mac_random, "never", GINT_TO_POINTER (NM_SETTING_MAC_RANDOMIZATION_NEVER), "never");