Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d6d560ff authored by Quang Luong's avatar Quang Luong
Browse files

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
parent 17e504f6
Loading
Loading
Loading
Loading
+31 −18
Original line number Diff line number Diff line
@@ -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:
+6 −5
Original line number Diff line number Diff line
@@ -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);