diff options
author | Roshan Pius <rpius@google.com> | 2019-10-29 09:15:31 -0700 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2019-11-14 12:12:58 -0800 |
commit | a9ebe48227eb5befd221451a013cbd0a76eac999 (patch) | |
tree | 8bb3ec31fbb2e671d51aef48afdc9a1ed6b3fe8a | |
parent | 09621a42f86690346814c48cf1cdb1f123402e12 (diff) |
WifiConfigStore: Encrypt credentials for networks (4/4)
Add a setting to turn on/off encryption. This global setting will be
turned on for devices which require encrypted credentials.
We don't need to support flipping the global settings back n forth.
Only needs to support the one way toggle from off
to on once for the lifetime of the device.
Bug: 140485110
Test: atest com.android.server.wifi
Test: Manual verification
- Store a PSK network config on older build
- Upgrade to build with this CL
- adb shell settings put global niap_mode 1
- Ensured that the psk was read correctly on upgrade
- Ensured that the psk was encrypted when stored on disk after upgrade
Change-Id: Ibabe0814bfc42a7bf610d18e89a7b82bacfdfeed
Merged-In: Ibabe0814bfc42a7bf610d18e89a7b82bacfdfeed
16 files changed, 97 insertions, 65 deletions
diff --git a/service/java/com/android/server/wifi/DeletedEphemeralSsidsStoreData.java b/service/java/com/android/server/wifi/DeletedEphemeralSsidsStoreData.java index 3575ff254..b71d5a023 100644 --- a/service/java/com/android/server/wifi/DeletedEphemeralSsidsStoreData.java +++ b/service/java/com/android/server/wifi/DeletedEphemeralSsidsStoreData.java @@ -16,7 +16,7 @@ package com.android.server.wifi; -import android.annotation.NonNull; +import android.annotation.Nullable; import com.android.server.wifi.util.WifiConfigStoreEncryptionUtil; import com.android.server.wifi.util.XmlUtil; @@ -48,7 +48,7 @@ public class DeletedEphemeralSsidsStoreData implements WifiConfigStore.StoreData @Override public void serializeData(XmlSerializer out, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { if (mSsidToTimeMap != null) { XmlUtil.writeNextValue(out, XML_TAG_SSID_LIST, mSsidToTimeMap); @@ -58,7 +58,7 @@ public class DeletedEphemeralSsidsStoreData implements WifiConfigStore.StoreData @Override public void deserializeData(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { // Ignore empty reads. if (in == null) { diff --git a/service/java/com/android/server/wifi/FrameworkFacade.java b/service/java/com/android/server/wifi/FrameworkFacade.java index f3c5d4b3d..4fbe31867 100644 --- a/service/java/com/android/server/wifi/FrameworkFacade.java +++ b/service/java/com/android/server/wifi/FrameworkFacade.java @@ -45,6 +45,11 @@ import com.android.server.wifi.util.WifiAsyncChannel; */ public class FrameworkFacade { public static final String TAG = "FrameworkFacade"; + /** + * NIAP global settings flag. + * Note: This should be added to {@link android.provider.Settings.Global}. + */ + private static final String NIAP_MODE_SETTINGS_NAME = "niap_mode"; private ActivityManagerInternal mActivityManagerInternal; @@ -83,6 +88,13 @@ public class FrameworkFacade { } /** + * Returns whether the device is in NIAP mode or not. + */ + public boolean isNiapModeOn(Context context) { + return getIntegerSetting(context, NIAP_MODE_SETTINGS_NAME, 0) == 1; + } + + /** * Helper method for classes to register a ContentObserver * {@see ContentResolver#registerContentObserver(Uri,boolean,ContentObserver)}. * diff --git a/service/java/com/android/server/wifi/NetworkListStoreData.java b/service/java/com/android/server/wifi/NetworkListStoreData.java index 4f2f36b9b..52e655b1e 100644 --- a/service/java/com/android/server/wifi/NetworkListStoreData.java +++ b/service/java/com/android/server/wifi/NetworkListStoreData.java @@ -18,7 +18,7 @@ package com.android.server.wifi; import static com.android.server.wifi.WifiConfigStore.ENCRYPT_CREDENTIALS_CONFIG_STORE_DATA_VERSION; -import android.annotation.NonNull; +import android.annotation.Nullable; import android.content.Context; import android.net.IpConfiguration; import android.net.wifi.WifiConfiguration; @@ -71,7 +71,7 @@ public abstract class NetworkListStoreData implements WifiConfigStore.StoreData @Override public void serializeData(XmlSerializer out, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { serializeNetworkList(out, mConfigurations, encryptionUtil); } @@ -79,7 +79,7 @@ public abstract class NetworkListStoreData implements WifiConfigStore.StoreData @Override public void deserializeData(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { // Ignore empty reads. if (in == null) { @@ -130,7 +130,7 @@ public abstract class NetworkListStoreData implements WifiConfigStore.StoreData * @throws IOException */ private void serializeNetworkList(XmlSerializer out, List<WifiConfiguration> networkList, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { if (networkList == null) { return; @@ -150,7 +150,7 @@ public abstract class NetworkListStoreData implements WifiConfigStore.StoreData * @throws IOException */ private void serializeNetwork(XmlSerializer out, WifiConfiguration config, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { XmlUtil.writeNextSectionStart(out, XML_TAG_SECTION_HEADER_NETWORK); @@ -194,7 +194,7 @@ public abstract class NetworkListStoreData implements WifiConfigStore.StoreData */ private List<WifiConfiguration> parseNetworkList(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { List<WifiConfiguration> networkList = new ArrayList<>(); while (XmlUtil.gotoNextSectionWithNameOrEnd(in, XML_TAG_SECTION_HEADER_NETWORK, @@ -226,7 +226,7 @@ public abstract class NetworkListStoreData implements WifiConfigStore.StoreData */ private WifiConfiguration parseNetwork(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { Pair<String, WifiConfiguration> parsedConfig = null; NetworkSelectionStatus status = null; diff --git a/service/java/com/android/server/wifi/NetworkRequestStoreData.java b/service/java/com/android/server/wifi/NetworkRequestStoreData.java index 3a5143f56..7457079ae 100644 --- a/service/java/com/android/server/wifi/NetworkRequestStoreData.java +++ b/service/java/com/android/server/wifi/NetworkRequestStoreData.java @@ -16,7 +16,7 @@ package com.android.server.wifi; -import android.annotation.NonNull; +import android.annotation.Nullable; import android.net.MacAddress; import android.util.Log; @@ -90,7 +90,7 @@ public class NetworkRequestStoreData implements WifiConfigStore.StoreData { @Override public void serializeData(XmlSerializer out, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { serializeApprovedAccessPointsMap(out, mDataSource.toSerialize()); } @@ -98,7 +98,7 @@ public class NetworkRequestStoreData implements WifiConfigStore.StoreData { @Override public void deserializeData(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { // Ignore empty reads. if (in == null) { diff --git a/service/java/com/android/server/wifi/NetworkSuggestionStoreData.java b/service/java/com/android/server/wifi/NetworkSuggestionStoreData.java index fc0c55b5a..e973bdbe2 100644 --- a/service/java/com/android/server/wifi/NetworkSuggestionStoreData.java +++ b/service/java/com/android/server/wifi/NetworkSuggestionStoreData.java @@ -18,7 +18,7 @@ package com.android.server.wifi; import static com.android.server.wifi.WifiConfigStore.ENCRYPT_CREDENTIALS_CONFIG_STORE_DATA_VERSION; -import android.annotation.NonNull; +import android.annotation.Nullable; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiNetworkSuggestion; @@ -103,7 +103,7 @@ public class NetworkSuggestionStoreData implements WifiConfigStore.StoreData { @Override public void serializeData(XmlSerializer out, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { serializeNetworkSuggestionsMap(out, mDataSource.toSerialize(), encryptionUtil); } @@ -111,7 +111,7 @@ public class NetworkSuggestionStoreData implements WifiConfigStore.StoreData { @Override public void deserializeData(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { // Ignore empty reads. if (in == null) { @@ -149,7 +149,7 @@ public class NetworkSuggestionStoreData implements WifiConfigStore.StoreData { */ private void serializeNetworkSuggestionsMap( XmlSerializer out, final Map<String, PerAppInfo> networkSuggestionsMap, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { if (networkSuggestionsMap == null) { return; @@ -177,7 +177,7 @@ public class NetworkSuggestionStoreData implements WifiConfigStore.StoreData { */ private void serializeExtNetworkSuggestions( XmlSerializer out, final Set<ExtendedWifiNetworkSuggestion> extNetworkSuggestions, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { for (ExtendedWifiNetworkSuggestion extNetworkSuggestion : extNetworkSuggestions) { serializeNetworkSuggestion(out, extNetworkSuggestion.wns, encryptionUtil); @@ -192,7 +192,7 @@ public class NetworkSuggestionStoreData implements WifiConfigStore.StoreData { */ private void serializeNetworkSuggestion(XmlSerializer out, final WifiNetworkSuggestion suggestion, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { XmlUtil.writeNextSectionStart(out, XML_TAG_SECTION_HEADER_NETWORK_SUGGESTION); @@ -232,7 +232,7 @@ public class NetworkSuggestionStoreData implements WifiConfigStore.StoreData { */ private Map<String, PerAppInfo> parseNetworkSuggestionsMap(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { Map<String, PerAppInfo> networkSuggestionsMap = new HashMap<>(); while (XmlUtil.gotoNextSectionWithNameOrEnd( @@ -269,7 +269,7 @@ public class NetworkSuggestionStoreData implements WifiConfigStore.StoreData { */ private Set<ExtendedWifiNetworkSuggestion> parseExtNetworkSuggestions( XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil, PerAppInfo perAppInfo) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil, PerAppInfo perAppInfo) throws XmlPullParserException, IOException { Set<ExtendedWifiNetworkSuggestion> extNetworkSuggestions = new HashSet<>(); while (XmlUtil.gotoNextSectionWithNameOrEnd( @@ -297,7 +297,7 @@ public class NetworkSuggestionStoreData implements WifiConfigStore.StoreData { */ private WifiNetworkSuggestion parseNetworkSuggestion(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { Pair<String, WifiConfiguration> parsedConfig = null; WifiEnterpriseConfig enterpriseConfig = null; diff --git a/service/java/com/android/server/wifi/RandomizedMacStoreData.java b/service/java/com/android/server/wifi/RandomizedMacStoreData.java index 8e47ee7bf..ecbd7177f 100644 --- a/service/java/com/android/server/wifi/RandomizedMacStoreData.java +++ b/service/java/com/android/server/wifi/RandomizedMacStoreData.java @@ -16,7 +16,7 @@ package com.android.server.wifi; -import android.annotation.NonNull; +import android.annotation.Nullable; import com.android.server.wifi.util.WifiConfigStoreEncryptionUtil; import com.android.server.wifi.util.XmlUtil; @@ -44,7 +44,7 @@ public class RandomizedMacStoreData implements WifiConfigStore.StoreData { @Override public void serializeData(XmlSerializer out, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { if (mMacMapping != null) { XmlUtil.writeNextValue(out, XML_TAG_MAC_MAP, mMacMapping); @@ -54,7 +54,7 @@ public class RandomizedMacStoreData implements WifiConfigStore.StoreData { @Override public void deserializeData(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { // Ignore empty reads. if (in == null) { diff --git a/service/java/com/android/server/wifi/SsidSetStoreData.java b/service/java/com/android/server/wifi/SsidSetStoreData.java index 1339dae38..36b547cd2 100644 --- a/service/java/com/android/server/wifi/SsidSetStoreData.java +++ b/service/java/com/android/server/wifi/SsidSetStoreData.java @@ -16,7 +16,7 @@ package com.android.server.wifi; -import android.annotation.NonNull; +import android.annotation.Nullable; import android.text.TextUtils; import com.android.server.wifi.util.WifiConfigStoreEncryptionUtil; @@ -77,7 +77,7 @@ public class SsidSetStoreData implements WifiConfigStore.StoreData { @Override public void serializeData(XmlSerializer out, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { Set<String> ssidSet = mDataSource.getSsids(); if (ssidSet != null && !ssidSet.isEmpty()) { @@ -88,7 +88,7 @@ public class SsidSetStoreData implements WifiConfigStore.StoreData { @Override public void deserializeData(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { // Ignore empty reads. if (in == null) { diff --git a/service/java/com/android/server/wifi/WakeupConfigStoreData.java b/service/java/com/android/server/wifi/WakeupConfigStoreData.java index 1d146a0e1..847d8fbbc 100644 --- a/service/java/com/android/server/wifi/WakeupConfigStoreData.java +++ b/service/java/com/android/server/wifi/WakeupConfigStoreData.java @@ -16,7 +16,7 @@ package com.android.server.wifi; -import android.annotation.NonNull; +import android.annotation.Nullable; import android.util.ArraySet; import android.util.Log; @@ -97,7 +97,7 @@ public class WakeupConfigStoreData implements StoreData { @Override public void serializeData(XmlSerializer out, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { writeFeatureState(out); @@ -146,7 +146,7 @@ public class WakeupConfigStoreData implements StoreData { @Override public void deserializeData(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { if (!mHasBeenRead) { Log.d(TAG, "WifiWake user data has been read"); diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java index d1734d445..533155d0c 100644 --- a/service/java/com/android/server/wifi/WifiConfigManager.java +++ b/service/java/com/android/server/wifi/WifiConfigManager.java @@ -3131,7 +3131,8 @@ public class WifiConfigManager { if (mDeferredUserUnlockRead) { Log.i(TAG, "Handling user unlock before loading from store."); List<WifiConfigStore.StoreFile> userStoreFiles = - WifiConfigStore.createUserFiles(mCurrentUserId); + WifiConfigStore.createUserFiles( + mCurrentUserId, mFrameworkFacade.isNiapModeOn(mContext)); if (userStoreFiles == null) { Log.wtf(TAG, "Failed to create user store files"); return false; @@ -3170,7 +3171,8 @@ public class WifiConfigManager { private boolean loadFromUserStoreAfterUnlockOrSwitch(int userId) { try { List<WifiConfigStore.StoreFile> userStoreFiles = - WifiConfigStore.createUserFiles(userId); + WifiConfigStore.createUserFiles( + userId, mFrameworkFacade.isNiapModeOn(mContext)); if (userStoreFiles == null) { Log.e(TAG, "Failed to create user store files"); return false; @@ -3180,8 +3182,8 @@ public class WifiConfigManager { Log.wtf(TAG, "Reading from new store failed. All saved private networks are lost!", e); return false; } catch (XmlPullParserException e) { - Log.wtf(TAG, "XML deserialization of store failed. All saved private networks are" + - "lost!", e); + Log.wtf(TAG, "XML deserialization of store failed. All saved private networks are " + + "lost!", e); return false; } loadInternalDataFromUserStore(mNetworkListUserStoreData.getConfigurations(), diff --git a/service/java/com/android/server/wifi/WifiConfigStore.java b/service/java/com/android/server/wifi/WifiConfigStore.java index 350e8b52f..42d9f82cb 100644 --- a/service/java/com/android/server/wifi/WifiConfigStore.java +++ b/service/java/com/android/server/wifi/WifiConfigStore.java @@ -61,6 +61,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * This class provides a mechanism to save data to persistent store files {@link StoreFile}. @@ -287,9 +288,11 @@ public class WifiConfigStore { * @param storeBaseDir Base directory under which the store file is to be stored. The store file * will be at <storeBaseDir>/wifi/WifiConfigStore.xml. * @param fileId Identifier for the file. See {@link StoreFileId}. + * @param shouldEncryptCredentials Whether to encrypt credentials or not. * @return new instance of the store file or null if the directory cannot be created. */ - private static @Nullable StoreFile createFile(File storeBaseDir, @StoreFileId int fileId) { + private static @Nullable StoreFile createFile(File storeBaseDir, @StoreFileId int fileId, + boolean shouldEncryptCredentials) { File storeDir = new File(storeBaseDir, STORE_DIRECTORY_NAME); if (!storeDir.exists()) { if (!storeDir.mkdir()) { @@ -298,18 +301,22 @@ public class WifiConfigStore { } } File file = new File(storeDir, STORE_ID_TO_FILE_NAME.get(fileId)); - WifiConfigStoreEncryptionUtil encryptionUtil = - new WifiConfigStoreEncryptionUtil(file.getName()); + WifiConfigStoreEncryptionUtil encryptionUtil = null; + if (shouldEncryptCredentials) { + encryptionUtil = new WifiConfigStoreEncryptionUtil(file.getName()); + } return new StoreFile(file, fileId, encryptionUtil); } /** * Create a new instance of the shared store file. * + * @param shouldEncryptCredentials Whether to encrypt credentials or not. * @return new instance of the store file or null if the directory cannot be created. */ - public static @Nullable StoreFile createSharedFile() { - return createFile(Environment.getDataMiscDirectory(), STORE_FILE_SHARED_GENERAL); + public static @Nullable StoreFile createSharedFile(boolean shouldEncryptCredentials) { + return createFile(Environment.getDataMiscDirectory(), STORE_FILE_SHARED_GENERAL, + shouldEncryptCredentials); } /** @@ -317,14 +324,18 @@ public class WifiConfigStore { * The user store file is inside the user's encrypted data directory. * * @param userId userId corresponding to the currently logged-in user. + * @param shouldEncryptCredentials Whether to encrypt credentials or not. * @return List of new instances of the store files created or null if the directory cannot be * created. */ - public static @Nullable List<StoreFile> createUserFiles(int userId) { + public static @Nullable List<StoreFile> createUserFiles(int userId, + boolean shouldEncryptCredentials) { List<StoreFile> storeFiles = new ArrayList<>(); for (int fileId : Arrays.asList( STORE_FILE_USER_GENERAL, STORE_FILE_USER_NETWORK_SUGGESTIONS)) { - StoreFile storeFile = createFile(Environment.getDataMiscCeDirectory(userId), fileId); + StoreFile storeFile = + createFile(Environment.getDataMiscCeDirectory(userId), fileId, + shouldEncryptCredentials); if (storeFile == null) { return null; } @@ -669,6 +680,13 @@ public class WifiConfigStore { */ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("Dump of WifiConfigStore"); + pw.println("WifiConfigStore - Store File Begin ----"); + Stream.of(Arrays.asList(mSharedStore), mUserStores) + .flatMap(List::stream) + .forEach((storeFile) -> { + pw.print("Name: " + storeFile.mFileName); + pw.println(", Credentials encrypted: " + storeFile.getEncryptionUtil() != null); + }); pw.println("WifiConfigStore - Store Data Begin ----"); for (StoreData storeData : mStoreDataList) { pw.print("StoreData =>"); @@ -716,7 +734,7 @@ public class WifiConfigStore { private final WifiConfigStoreEncryptionUtil mEncryptionUtil; public StoreFile(File file, @StoreFileId int fileId, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) { + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) { mAtomicFile = new AtomicFile(file); mFileName = file.getAbsolutePath(); mFileId = fileId; @@ -735,7 +753,7 @@ public class WifiConfigStore { /** * @return Returns the encryption util used for this store file. */ - public @NonNull WifiConfigStoreEncryptionUtil getEncryptionUtil() { + public @Nullable WifiConfigStoreEncryptionUtil getEncryptionUtil() { return mEncryptionUtil; } @@ -813,7 +831,8 @@ public class WifiConfigStore { * @param out The output stream to serialize the data to * @param encryptionUtil Utility to help encrypt any credential data. */ - void serializeData(XmlSerializer out, @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + void serializeData(XmlSerializer out, + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException; /** @@ -829,7 +848,7 @@ public class WifiConfigStore { * in the store for them. */ void deserializeData(@Nullable XmlPullParser in, int outerTagDepth, @Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException; /** diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java index fe9ebea17..f7212ddfc 100644 --- a/service/java/com/android/server/wifi/WifiInjector.java +++ b/service/java/com/android/server/wifi/WifiInjector.java @@ -241,7 +241,7 @@ public class WifiInjector { mWifiKeyStore = new WifiKeyStore(mKeyStore); mWifiConfigStore = new WifiConfigStore( mContext, clientModeImplLooper, mClock, mWifiMetrics, - WifiConfigStore.createSharedFile()); + WifiConfigStore.createSharedFile(mFrameworkFacade.isNiapModeOn(mContext))); SubscriptionManager subscriptionManager = mContext.getSystemService(SubscriptionManager.class); // Config Manager diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointConfigSharedStoreData.java b/service/java/com/android/server/wifi/hotspot2/PasspointConfigSharedStoreData.java index 9abccb94b..7f5a6b408 100644 --- a/service/java/com/android/server/wifi/hotspot2/PasspointConfigSharedStoreData.java +++ b/service/java/com/android/server/wifi/hotspot2/PasspointConfigSharedStoreData.java @@ -16,7 +16,7 @@ package com.android.server.wifi.hotspot2; -import android.annotation.NonNull; +import android.annotation.Nullable; import com.android.server.wifi.WifiConfigStore; import com.android.server.wifi.util.WifiConfigStoreEncryptionUtil; @@ -76,7 +76,7 @@ public class PasspointConfigSharedStoreData implements WifiConfigStore.StoreData @Override public void serializeData(XmlSerializer out, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { serializeShareData(out); } @@ -84,7 +84,7 @@ public class PasspointConfigSharedStoreData implements WifiConfigStore.StoreData @Override public void deserializeData(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { // Ignore empty reads. if (in == null) { diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointConfigUserStoreData.java b/service/java/com/android/server/wifi/hotspot2/PasspointConfigUserStoreData.java index 1001b1189..123cf8982 100644 --- a/service/java/com/android/server/wifi/hotspot2/PasspointConfigUserStoreData.java +++ b/service/java/com/android/server/wifi/hotspot2/PasspointConfigUserStoreData.java @@ -16,7 +16,7 @@ package com.android.server.wifi.hotspot2; -import android.annotation.NonNull; +import android.annotation.Nullable; import android.net.wifi.hotspot2.PasspointConfiguration; import android.text.TextUtils; @@ -106,7 +106,7 @@ public class PasspointConfigUserStoreData implements WifiConfigStore.StoreData { @Override public void serializeData(XmlSerializer out, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { serializeUserData(out); } @@ -114,7 +114,7 @@ public class PasspointConfigUserStoreData implements WifiConfigStore.StoreData { @Override public void deserializeData(XmlPullParser in, int outerTagDepth, @WifiConfigStore.Version int version, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { // Ignore empty reads. if (in == null) { diff --git a/service/java/com/android/server/wifi/util/XmlUtil.java b/service/java/com/android/server/wifi/util/XmlUtil.java index 6128b0b4c..db0f4289b 100644 --- a/service/java/com/android/server/wifi/util/XmlUtil.java +++ b/service/java/com/android/server/wifi/util/XmlUtil.java @@ -16,7 +16,6 @@ package com.android.server.wifi.util; -import android.annotation.NonNull; import android.annotation.Nullable; import android.net.IpConfiguration; import android.net.IpConfiguration.IpAssignment; @@ -477,7 +476,7 @@ public class XmlUtil { */ public static void writeToXmlForConfigStore( XmlSerializer out, WifiConfiguration configuration, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { writeCommonElementsToXml(out, configuration, encryptionUtil); XmlUtil.writeNextValue(out, XML_TAG_STATUS, configuration.status); @@ -555,7 +554,7 @@ public class XmlUtil { */ public static Pair<String, WifiConfiguration> parseFromXml( XmlPullParser in, int outerTagDepth, boolean shouldExpectEncryptedCredentials, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { WifiConfiguration configuration = new WifiConfiguration(); String configKeyInData = null; @@ -715,7 +714,7 @@ public class XmlUtil { } switch (tagName) { case XML_TAG_PRE_SHARED_KEY: - if (!shouldExpectEncryptedCredentials) { + if (!shouldExpectEncryptedCredentials || encryptionUtil == null) { throw new XmlPullParserException( "Encrypted preSharedKey section not expected"); } @@ -1094,7 +1093,7 @@ public class XmlUtil { */ private static void writePasswordToXml( XmlSerializer out, String password, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { EncryptedData encryptedData = null; if (encryptionUtil != null) { @@ -1124,7 +1123,7 @@ public class XmlUtil { * @param encryptionUtil Instance of {@link EncryptedDataXmlUtil}. */ public static void writeToXml(XmlSerializer out, WifiEnterpriseConfig enterpriseConfig, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { XmlUtil.writeNextValue(out, XML_TAG_IDENTITY, enterpriseConfig.getFieldValue(WifiEnterpriseConfig.IDENTITY_KEY)); @@ -1168,7 +1167,7 @@ public class XmlUtil { */ public static WifiEnterpriseConfig parseFromXml(XmlPullParser in, int outerTagDepth, boolean shouldExpectEncryptedCredentials, - @NonNull WifiConfigStoreEncryptionUtil encryptionUtil) + @Nullable WifiConfigStoreEncryptionUtil encryptionUtil) throws XmlPullParserException, IOException { WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); @@ -1260,7 +1259,7 @@ public class XmlUtil { } switch (tagName) { case XML_TAG_PASSWORD: - if (!shouldExpectEncryptedCredentials) { + if (!shouldExpectEncryptedCredentials || encryptionUtil == null) { throw new XmlPullParserException( "encrypted password section not expected"); } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java index 0badc6fbd..c4cbc6e50 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java @@ -234,7 +234,7 @@ public class WifiConfigManagerTest { .spyStatic(WifiConfigurationUtil.class) .strictness(Strictness.LENIENT) .startMocking(); - when(WifiConfigStore.createUserFiles(anyInt())).thenReturn(mock(List.class)); + when(WifiConfigStore.createUserFiles(anyInt(), anyBoolean())).thenReturn(mock(List.class)); when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mDataTelephonyManager); when(WifiConfigurationUtil.calculatePersistentMacForConfiguration(any(), any())) .thenReturn(TEST_RANDOMIZED_MAC); diff --git a/tests/wifitests/src/com/android/server/wifi/util/XmlUtilTest.java b/tests/wifitests/src/com/android/server/wifi/util/XmlUtilTest.java index 66534d247..8f96bc106 100644 --- a/tests/wifitests/src/com/android/server/wifi/util/XmlUtilTest.java +++ b/tests/wifitests/src/com/android/server/wifi/util/XmlUtilTest.java @@ -37,8 +37,6 @@ import com.android.server.wifi.util.XmlUtil.WifiEnterpriseConfigXmlUtil; import org.junit.Before; import org.junit.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -77,7 +75,7 @@ public class XmlUtilTest { private static final int TEST_PHASE2_METHOD = WifiEnterpriseConfig.Phase2.MSCHAPV2; private final String mXmlDocHeader = "XmlUtilTest"; - @Mock private WifiConfigStoreEncryptionUtil mWifiConfigStoreEncryptionUtil; + private WifiConfigStoreEncryptionUtil mWifiConfigStoreEncryptionUtil = null; @Before public void setUp() throws Exception { @@ -117,6 +115,7 @@ public class XmlUtilTest { @Test public void testPskWifiConfigurationSerializeDeserializeWithEncryption() throws IOException, XmlPullParserException { + mWifiConfigStoreEncryptionUtil = mock(WifiConfigStoreEncryptionUtil.class); WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); EncryptedData encryptedData = new EncryptedData(new byte[0], new byte[0]); when(mWifiConfigStoreEncryptionUtil.encrypt(pskNetwork.preSharedKey.getBytes())) @@ -429,6 +428,7 @@ public class XmlUtilTest { config.setEapMethod(TEST_EAP_METHOD); config.setPhase2Method(TEST_PHASE2_METHOD); + mWifiConfigStoreEncryptionUtil = mock(WifiConfigStoreEncryptionUtil.class); EncryptedData encryptedData = new EncryptedData(new byte[0], new byte[0]); when(mWifiConfigStoreEncryptionUtil.encrypt(TEST_PASSWORD.getBytes())) .thenReturn(encryptedData); |