Don't overwrite security params when editing saved config

WifiConfigController2 sets the security params of a saved config, which
may overwrite @hide fields like SecurityParams#mIsAddedByAutoUpgrade. To
prevent this, only set the security params for a new config, and use the
existing security params for existing configs.

Bug: 262312532
Test: atest WifiConfigController2Test
Change-Id: I9ef5eb8ce2b4208e1fad27bd68fc4f0fad7d1008
This commit is contained in:
Quang Luong
2023-04-04 00:19:52 +00:00
parent 17e504f6a8
commit d6d560ff6e
2 changed files with 37 additions and 23 deletions

View File

@@ -592,28 +592,32 @@ public class WifiConfigController2 implements TextWatcher,
return null;
}
WifiConfiguration config = new WifiConfiguration();
WifiConfiguration config;
if (mWifiEntry == null) {
config = new WifiConfiguration();
config.SSID = "\"" + mSsidView.getText().toString() + "\"";
// If the user adds a network manually, assume that it is hidden.
config.hiddenSSID = mHiddenSettingsSpinner.getSelectedItemPosition() == HIDDEN_NETWORK;
} else if (!mWifiEntry.isSaved()) {
config.SSID = "\"" + mWifiEntry.getTitle() + "\"";
} else if (mWifiEntry.isSaved()) {
config = new WifiConfiguration(mWifiEntry.getWifiConfiguration());
} else {
config.networkId = mWifiEntry.getWifiConfiguration().networkId;
config.hiddenSSID = mWifiEntry.getWifiConfiguration().hiddenSSID;
config = new WifiConfiguration();
config.SSID = "\"" + mWifiEntry.getTitle() + "\"";
}
config.shared = mSharedCheckBox.isChecked();
switch (mWifiEntrySecurity) {
case WifiEntry.SECURITY_NONE:
if (mWifiEntry == null || !mWifiEntry.isSaved()) {
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
}
break;
case WifiEntry.SECURITY_WEP:
if (mWifiEntry == null || !mWifiEntry.isSaved()) {
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_WEP);
}
if (mPasswordView.length() != 0) {
int length = mPasswordView.length();
String password = mPasswordView.getText().toString();
@@ -628,7 +632,9 @@ public class WifiConfigController2 implements TextWatcher,
break;
case WifiEntry.SECURITY_PSK:
if (mWifiEntry == null || !mWifiEntry.isSaved()) {
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
}
if (mPasswordView.length() != 0) {
String password = mPasswordView.getText().toString();
if (password.matches("[0-9A-Fa-f]{64}")) {
@@ -642,14 +648,17 @@ public class WifiConfigController2 implements TextWatcher,
case WifiEntry.SECURITY_EAP:
case WifiEntry.SECURITY_EAP_WPA3_ENTERPRISE:
case WifiEntry.SECURITY_EAP_SUITE_B:
if (mWifiEntry == null || !mWifiEntry.isSaved()) {
if (mWifiEntrySecurity == WifiEntry.SECURITY_EAP_SUITE_B) {
// allowedSuiteBCiphers will be set according to certificate type
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP_SUITE_B);
} else if (mWifiEntrySecurity == WifiEntry.SECURITY_EAP_WPA3_ENTERPRISE) {
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP_WPA3_ENTERPRISE);
config.setSecurityParams(
WifiConfiguration.SECURITY_TYPE_EAP_WPA3_ENTERPRISE);
} else {
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
}
}
config.enterpriseConfig = new WifiEnterpriseConfig();
int eapMethod = mEapMethodSpinner.getSelectedItemPosition();
int phase2Method = mPhase2Spinner.getSelectedItemPosition();
@@ -790,7 +799,9 @@ public class WifiConfigController2 implements TextWatcher,
}
break;
case WifiEntry.SECURITY_SAE:
if (mWifiEntry == null || !mWifiEntry.isSaved()) {
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
}
if (mPasswordView.length() != 0) {
String password = mPasswordView.getText().toString();
config.preSharedKey = '"' + password + '"';
@@ -798,7 +809,9 @@ public class WifiConfigController2 implements TextWatcher,
break;
case WifiEntry.SECURITY_OWE:
if (mWifiEntry == null || !mWifiEntry.isSaved()) {
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);
}
break;
default:

View File

@@ -470,7 +470,7 @@ public class WifiConfigController2Test {
private void checkSavedMacRandomizedValue(int macRandomizedValue) {
when(mWifiEntry.isSaved()).thenReturn(true);
final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class);
final WifiConfiguration mockWifiConfig = spy(new WifiConfiguration());
when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class));
when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig);
mockWifiConfig.macRandomizationSetting = macRandomizedValue;
@@ -809,9 +809,10 @@ public class WifiConfigController2Test {
private void setUpModifyingSavedPeapConfigController() {
when(mWifiEntry.isSaved()).thenReturn(true);
when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP);
final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class);
final WifiConfiguration mockWifiConfig = spy(new WifiConfiguration());
mockWifiConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class));
final WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
final WifiEnterpriseConfig mockWifiEnterpriseConfig = spy(new WifiEnterpriseConfig());
when(mockWifiEnterpriseConfig.getEapMethod()).thenReturn(Eap.PEAP);
mockWifiConfig.enterpriseConfig = mockWifiEnterpriseConfig;
when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig);
@@ -980,8 +981,8 @@ public class WifiConfigController2Test {
private void setUpModifyingSavedCertificateConfigController(String savedCaCertificate,
String savedUserCertificate) {
final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class);
final WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
final WifiConfiguration mockWifiConfig = spy(new WifiConfiguration());
final WifiEnterpriseConfig mockWifiEnterpriseConfig = spy(new WifiEnterpriseConfig());
mockWifiConfig.enterpriseConfig = mockWifiEnterpriseConfig;
when(mWifiEntry.isSaved()).thenReturn(true);