From e97e21f1f14e4ef16dd5d675b17615aef3a80301 Mon Sep 17 00:00:00 2001 From: Peter Qiu Date: Thu, 27 Jul 2017 14:41:36 -0700 Subject: Re-add network to supplicant when EAP identities changes Update WifiConfigurationUtil#isSameNetwork to check changes in both EAP identity and anonymous identity. So that the network parameters in wpa_supplicant will get reloaded when the EAP identities changed. Bug: 63979263 Test: frameworks/opt/net/wifi/tests/wifitests/runtests.sh Test: Verify connection to a EAP-SIM network will fail after SIM card is replaced Change-Id: I592018de52c2515dbd64aea0138b5bc88b70fec7 (cherry picked from commit 8e08c5d97b1608e1b173867998dd82e6f44d1d13) --- .../android/server/wifi/WifiConfigurationUtil.java | 7 ++++++ .../server/wifi/WifiConfigurationUtilTest.java | 25 ++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/service/java/com/android/server/wifi/WifiConfigurationUtil.java b/service/java/com/android/server/wifi/WifiConfigurationUtil.java index f706c4e1f..fef78aade 100644 --- a/service/java/com/android/server/wifi/WifiConfigurationUtil.java +++ b/service/java/com/android/server/wifi/WifiConfigurationUtil.java @@ -23,6 +23,7 @@ import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiScanner; import android.os.UserHandle; +import android.text.TextUtils; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; @@ -192,6 +193,12 @@ public class WifiConfigurationUtil { != newEnterpriseConfig.getPhase2Method()) { return true; } + if (!TextUtils.equals(existingEnterpriseConfig.getIdentity(), + newEnterpriseConfig.getIdentity()) + || !TextUtils.equals(existingEnterpriseConfig.getAnonymousIdentity(), + newEnterpriseConfig.getAnonymousIdentity())) { + return true; + } X509Certificate[] existingCaCerts = existingEnterpriseConfig.getCaCertificates(); X509Certificate[] newCaCerts = newEnterpriseConfig.getCaCertificates(); if (!Arrays.equals(existingCaCerts, newCaCerts)) { diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java index 376d686a4..2925273de 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java @@ -495,6 +495,31 @@ public class WifiConfigurationUtilTest { assertFalse(WifiConfigurationUtil.isSameNetwork(network, network1)); } + /** + * Verify that WifiConfigurationUtil.isSameNetwork returns false when two WifiConfiguration + * objects have the different EAP identity. + */ + @Test + public void testIsSameNetworkReturnsFalseOnDifferentEapIdentity() { + WifiConfiguration network1 = WifiConfigurationTestUtil.createEapNetwork(TEST_SSID); + WifiConfiguration network2 = WifiConfigurationTestUtil.createEapNetwork(TEST_SSID); + network1.enterpriseConfig.setIdentity("Identity1"); + network2.enterpriseConfig.setIdentity("Identity2"); + assertFalse(WifiConfigurationUtil.isSameNetwork(network1, network2)); + } + + /** + * Verify that WifiConfigurationUtil.isSameNetwork returns false when two WifiConfiguration + * objects have the different EAP anonymous identity. + */ + @Test + public void testIsSameNetworkReturnsFalseOnDifferentEapAnonymousIdentity() { + WifiConfiguration network1 = WifiConfigurationTestUtil.createEapNetwork(TEST_SSID); + WifiConfiguration network2 = WifiConfigurationTestUtil.createEapNetwork(TEST_SSID); + network1.enterpriseConfig.setAnonymousIdentity("Identity1"); + network2.enterpriseConfig.setAnonymousIdentity("Identity2"); + assertFalse(WifiConfigurationUtil.isSameNetwork(network1, network2)); + } /** * Verify the instance of {@link android.net.wifi.WifiScanner.PnoSettings.PnoNetwork} created -- cgit v1.2.3