From a4284cb2926b1ce2369413c3a6bc044b33cba297 Mon Sep 17 00:00:00 2001 From: Hai Shalom Date: Thu, 21 Nov 2019 19:23:15 +0000 Subject: [PATCH] Revert submission Reason for revert: Incomplete fix that causes additional issues which were not anticipated earlier. Change-Id: I383273509797ed95a7f9ece780ec52abb1341292 Merged-In: Iff36d5a10e6c8ee8978a5842af8f19efc10c0a91 --- .../android/settingslib/wifi/AccessPoint.java | 59 +++++++++++++++---- .../android/net/wifi/WifiConfiguration.java | 20 ++----- 2 files changed, 51 insertions(+), 28 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index bf31f816e61c8..6b1ceae4bed86 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -718,7 +718,20 @@ public class AccessPoint implements Comparable { || (mConfig != null && mConfig.shared != config.shared)) { return false; } - return security == getSecurity(config); + + final int configSecurity = getSecurity(config); + final WifiManager wifiManager = getWifiManager(); + switch (security) { + case SECURITY_PSK_SAE_TRANSITION: + return configSecurity == SECURITY_PSK + || (wifiManager.isWpa3SaeSupported() && configSecurity == SECURITY_SAE); + case SECURITY_OWE_TRANSITION: + return configSecurity == SECURITY_NONE + || (wifiManager.isEnhancedOpenSupported() + && configSecurity == SECURITY_OWE); + default: + return security == configSecurity; + } } public WifiConfiguration getConfig() { @@ -1257,10 +1270,34 @@ public class AccessPoint implements Comparable { mAccessPointListener = listener; } + private static final String sPskSuffix = "," + String.valueOf(SECURITY_PSK); + private static final String sSaeSuffix = "," + String.valueOf(SECURITY_SAE); + private static final String sPskSaeSuffix = "," + String.valueOf(SECURITY_PSK_SAE_TRANSITION); + private static final String sOweSuffix = "," + String.valueOf(SECURITY_OWE); + private static final String sOpenSuffix = "," + String.valueOf(SECURITY_NONE); + private static final String sOweTransSuffix = "," + String.valueOf(SECURITY_OWE_TRANSITION); + private boolean isKeyEqual(String compareTo) { if (mKey == null) { return false; } + + if (compareTo.endsWith(sPskSuffix) || compareTo.endsWith(sSaeSuffix)) { + if (mKey.endsWith(sPskSaeSuffix)) { + // Special handling for PSK-SAE transition mode. If the AP has advertised both, + // we compare the key with both PSK and SAE for a match. + return TextUtils.equals(mKey.substring(0, mKey.lastIndexOf(',')), + compareTo.substring(0, compareTo.lastIndexOf(','))); + } + } + if (compareTo.endsWith(sOpenSuffix) || compareTo.endsWith(sOweSuffix)) { + if (mKey.endsWith(sOweTransSuffix)) { + // Special handling for OWE/Open networks. If AP advertises OWE in transition mode + // and we have an Open network saved, allow this connection to be established. + return TextUtils.equals(mKey.substring(0, mKey.lastIndexOf(',')), + compareTo.substring(0, compareTo.lastIndexOf(','))); + } + } return mKey.equals(compareTo); } @@ -1591,6 +1628,8 @@ public class AccessPoint implements Comparable { private static int getSecurity(ScanResult result) { if (result.capabilities.contains("WEP")) { return SECURITY_WEP; + } else if (result.capabilities.contains("PSK+SAE")) { + return SECURITY_PSK_SAE_TRANSITION; } else if (result.capabilities.contains("SAE")) { return SECURITY_SAE; } else if (result.capabilities.contains("PSK")) { @@ -1599,6 +1638,8 @@ public class AccessPoint implements Comparable { return SECURITY_EAP_SUITE_B; } else if (result.capabilities.contains("EAP")) { return SECURITY_EAP; + } else if (result.capabilities.contains("OWE_TRANSITION")) { + return SECURITY_OWE_TRANSITION; } else if (result.capabilities.contains("OWE")) { return SECURITY_OWE; } @@ -1645,6 +1686,10 @@ public class AccessPoint implements Comparable { return "SUITE_B"; } else if (security == SECURITY_OWE) { return "OWE"; + } else if (security == SECURITY_PSK_SAE_TRANSITION) { + return "PSK+SAE"; + } else if (security == SECURITY_OWE_TRANSITION) { + return "OWE_TRANSITION"; } return "NONE"; } @@ -1814,16 +1859,4 @@ public class AccessPoint implements Comparable { } } } - - /** - * Lets the caller know if the network was cloned from another network - * - * @return true if the network is cloned - */ - public boolean isCloned() { - if (mConfig == null) { - return false; - } - return mConfig.clonedNetworkConfigKey != null; - } } diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index 822eee3f14cf4..ed416429a2792 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -382,7 +382,12 @@ public class WifiConfiguration implements Parcelable { public void setSecurityParams(@SecurityType int securityType) { // Clear all the bitsets. allowedKeyManagement.clear(); + allowedProtocols.clear(); allowedAuthAlgorithms.clear(); + allowedPairwiseCiphers.clear(); + allowedGroupCiphers.clear(); + allowedGroupManagementCiphers.clear(); + allowedSuiteBCiphers.clear(); switch (securityType) { case SECURITY_TYPE_OPEN: @@ -405,9 +410,6 @@ public class WifiConfiguration implements Parcelable { requirePMF = true; break; case SECURITY_TYPE_EAP_SUITE_B: - allowedGroupCiphers.clear(); - allowedGroupManagementCiphers.clear(); - allowedSuiteBCiphers.clear(); allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SUITE_B_192); allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256); allowedGroupManagementCiphers.set(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256); @@ -920,12 +922,6 @@ public class WifiConfiguration implements Parcelable { */ public int meteredOverride = METERED_OVERRIDE_NONE; - /** - * This Wifi configuration is a clone of another network with lower security - * @hide - */ - public String clonedNetworkConfigKey; - /** * Blend together all the various opinions to decide if the given network * should be considered metered or not. @@ -1797,7 +1793,6 @@ public class WifiConfiguration implements Parcelable { shared = true; dtimInterval = 0; mRandomizedMacAddress = MacAddress.fromString(WifiInfo.DEFAULT_MAC_ADDRESS); - clonedNetworkConfigKey = null; } /** @@ -2357,7 +2352,6 @@ public class WifiConfiguration implements Parcelable { /** copy constructor {@hide} */ @UnsupportedAppUsage - public WifiConfiguration(WifiConfiguration source) { if (source != null) { networkId = source.networkId; @@ -2437,7 +2431,6 @@ public class WifiConfiguration implements Parcelable { macRandomizationSetting = source.macRandomizationSetting; requirePMF = source.requirePMF; updateIdentifier = source.updateIdentifier; - clonedNetworkConfigKey = source.clonedNetworkConfigKey; } } @@ -2509,7 +2502,6 @@ public class WifiConfiguration implements Parcelable { dest.writeParcelable(mRandomizedMacAddress, flags); dest.writeInt(macRandomizationSetting); dest.writeInt(osu ? 1 : 0); - dest.writeString(clonedNetworkConfigKey); } /** Implement the Parcelable interface {@hide} */ @@ -2583,8 +2575,6 @@ public class WifiConfiguration implements Parcelable { config.mRandomizedMacAddress = in.readParcelable(null); config.macRandomizationSetting = in.readInt(); config.osu = in.readInt() != 0; - config.clonedNetworkConfigKey = in.readString(); - return config; }