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
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user