summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hai Shalom <haishalom@google.com> 2020-09-29 16:50:22 -0700
committer Hai Shalom <haishalom@google.com> 2020-09-29 16:50:22 -0700
commit452d4ff8ff1bf896fecb70744f5396f8951981b2 (patch)
tree5cfab0aaa60a0ceb415472332d7b609dab14fff9
parentde615155932f01c69b034677ad88585059bdf967 (diff)
Fix WifiConfiguration#getAuthType
Fix WifiConfiguration#getAuthType and add unit tests. The root cause for the crash is due to the outdated implementation of this method. When adding a suggestion of a WPA2/3-Enterprise network via the the ACTION_WIFI_ADD_NETWORKS action, Settings calls this method. WPA2/3-Enterprise networks have more than 1 bit set in the allowedKeyManagement bitset which the old implementation treated as an error and threw an exception. Bug: 169626258 Test: atest WifiConfigurationTest Merged-In: I85796299f119b84781148c949d701d10da506dc2 Change-Id: I00e112388b392868b0aa9e0ccb8a9b72236bfa2c
-rw-r--r--wifi/java/android/net/wifi/WifiConfiguration.java13
-rw-r--r--wifi/tests/src/android/net/wifi/WifiConfigurationTest.java49
2 files changed, 61 insertions, 1 deletions
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 71f0ab8087ab..7352dae06af9 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -2491,7 +2491,18 @@ public class WifiConfiguration implements Parcelable {
@KeyMgmt.KeyMgmtScheme
public int getAuthType() {
if (allowedKeyManagement.cardinality() > 1) {
- throw new IllegalStateException("More than one auth type set");
+ if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) {
+ if (allowedKeyManagement.cardinality() == 2
+ && allowedKeyManagement.get(KeyMgmt.IEEE8021X)) {
+ return KeyMgmt.WPA_EAP;
+ }
+ if (allowedKeyManagement.cardinality() == 3
+ && allowedKeyManagement.get(KeyMgmt.IEEE8021X)
+ && allowedKeyManagement.get(KeyMgmt.SUITE_B_192)) {
+ return KeyMgmt.SUITE_B_192;
+ }
+ }
+ throw new IllegalStateException("Invalid auth type set: " + allowedKeyManagement);
}
if (allowedKeyManagement.get(KeyMgmt.WPA_PSK)) {
return KeyMgmt.WPA_PSK;
diff --git a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
index a7b6765e886a..62220a6237b1 100644
--- a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
@@ -22,6 +22,7 @@ import static android.net.wifi.WifiConfiguration.SECURITY_TYPE_OPEN;
import static android.net.wifi.WifiConfiguration.SECURITY_TYPE_OWE;
import static android.net.wifi.WifiConfiguration.SECURITY_TYPE_PSK;
import static android.net.wifi.WifiConfiguration.SECURITY_TYPE_SAE;
+import static android.net.wifi.WifiConfiguration.SECURITY_TYPE_WAPI_CERT;
import static android.net.wifi.WifiConfiguration.SECURITY_TYPE_WAPI_PSK;
import static org.junit.Assert.assertArrayEquals;
@@ -537,4 +538,52 @@ public class WifiConfigurationTest {
configuration.setSecurityParams(SECURITY_TYPE_EAP_SUITE_B);
assertFalse(configuration.needsPreSharedKey());
}
+
+ @Test
+ public void testGetAuthType() throws Exception {
+ WifiConfiguration configuration = new WifiConfiguration();
+
+ configuration.setSecurityParams(SECURITY_TYPE_PSK);
+ assertEquals(KeyMgmt.WPA_PSK, configuration.getAuthType());
+
+ configuration.setSecurityParams(SECURITY_TYPE_SAE);
+ assertEquals(KeyMgmt.SAE, configuration.getAuthType());
+
+ configuration.setSecurityParams(SECURITY_TYPE_WAPI_PSK);
+ assertEquals(KeyMgmt.WAPI_PSK, configuration.getAuthType());
+
+ configuration.setSecurityParams(SECURITY_TYPE_OPEN);
+ assertEquals(KeyMgmt.NONE, configuration.getAuthType());
+
+ configuration.setSecurityParams(SECURITY_TYPE_OWE);
+ assertEquals(KeyMgmt.OWE, configuration.getAuthType());
+
+ configuration.setSecurityParams(SECURITY_TYPE_EAP);
+ assertEquals(KeyMgmt.WPA_EAP, configuration.getAuthType());
+
+ configuration.setSecurityParams(SECURITY_TYPE_EAP_SUITE_B);
+ assertEquals(KeyMgmt.SUITE_B_192, configuration.getAuthType());
+
+ configuration.setSecurityParams(SECURITY_TYPE_WAPI_CERT);
+ assertEquals(KeyMgmt.WAPI_CERT, configuration.getAuthType());
+ }
+
+ @Test (expected = IllegalStateException.class)
+ public void testGetAuthTypeFailure1() throws Exception {
+ WifiConfiguration configuration = new WifiConfiguration();
+
+ configuration.setSecurityParams(SECURITY_TYPE_PSK);
+ configuration.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
+ configuration.getAuthType();
+ }
+
+ @Test (expected = IllegalStateException.class)
+ public void testGetAuthTypeFailure2() throws Exception {
+ WifiConfiguration configuration = new WifiConfiguration();
+
+ configuration.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
+ configuration.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
+ configuration.allowedKeyManagement.set(KeyMgmt.SAE);
+ configuration.getAuthType();
+ }
}