From 491ccd9d64b2ea16f2d399b42454bee9c1c7bac1 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Sat, 28 Jan 2017 15:53:47 +0100 Subject: [PATCH] ifcfg-rh: fix interpreting missing MAC_ADDRESS_RANDOMIZATION as permanent address With commit 4f6c91d6962cc031f07e52bb31adde560ad70fac, 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 46d53e11012c047e09d04f663c1c36e6c47dc298 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 (cherry picked from commit 27cba47957630a89e3b1e3a06aa44a525270cec1) --- src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 4 ++-- src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c | 9 ++++----- src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c index b64cad3576..46bd2de17f 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -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, diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c index 90a8e7acd8..fa8013b024 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c @@ -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; } diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index 1a8439f6ce..f467d864cc 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -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");