From e4cb48546eff7305a98b11646fd991d213345630 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Mon, 19 Aug 2019 14:32:09 -0700 Subject: Add carrier ID field for WifiConfiguration and PasspointConfiguration. This is only for the load and save carrier ID field. Bug: 130875004 Test: build, boot up, unit test. Change-Id: Ie190fc331862a61df29a7ad4a01b818a016122bf --- .../server/wifi/WifiNetworkSuggestionsManager.java | 21 ++++++++ .../server/wifi/hotspot2/PasspointXmlUtils.java | 5 ++ .../java/com/android/server/wifi/util/XmlUtil.java | 5 ++ .../server/wifi/NetworkListStoreDataTest.java | 2 + .../android/server/wifi/WifiConfigStoreTest.java | 1 + .../wifi/WifiNetworkSuggestionsManagerTest.java | 59 ++++++++++++++++++++-- 6 files changed, 90 insertions(+), 3 deletions(-) diff --git a/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java b/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java index d530cdbfc..a16d9684d 100644 --- a/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java +++ b/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java @@ -40,6 +40,7 @@ import android.net.wifi.WifiNetworkSuggestion; import android.net.wifi.WifiScanner; import android.os.Handler; import android.os.UserHandle; +import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; import android.util.Pair; @@ -599,6 +600,9 @@ public class WifiNetworkSuggestionsManager { Log.w(TAG, "Empty list of network suggestions for " + packageName + ". Ignoring"); return WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS; } + if (!validateNetworkSuggestions(networkSuggestions, uid, packageName)) { + return WifiManager.STATUS_NETWORK_SUGGESTIONS_ERROR_APP_DISALLOWED; + } PerAppInfo perAppInfo = mActiveNetworkSuggestionsPerApp.get(packageName); if (perAppInfo == null) { perAppInfo = new PerAppInfo(packageName); @@ -654,6 +658,23 @@ public class WifiNetworkSuggestionsManager { return WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS; } + private boolean validateNetworkSuggestions( + List networkSuggestions, int uid, String packageName) { + if (mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(uid)) { + return true; + } + for (WifiNetworkSuggestion suggestion : networkSuggestions) { + WifiConfiguration config = suggestion.wifiConfiguration; + if (config != null + && config.carrierId != TelephonyManager.UNKNOWN_CARRIER_ID) { + Log.e(TAG, "bad wifi suggestion from app: " + packageName); + return false; + } + } + + return true; + } + private void stopTrackingAppOpsChange(@NonNull String packageName) { AppOpsChangedListener appOpsChangedListener = mAppOpsChangedListenerPerApp.remove(packageName); diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointXmlUtils.java b/service/java/com/android/server/wifi/hotspot2/PasspointXmlUtils.java index 683728dc5..71eba0908 100644 --- a/service/java/com/android/server/wifi/hotspot2/PasspointXmlUtils.java +++ b/service/java/com/android/server/wifi/hotspot2/PasspointXmlUtils.java @@ -110,6 +110,7 @@ public class PasspointXmlUtils { private static final String XML_TAG_USAGE_LIMIT_START_TIME = "UsageLimitStartTime"; private static final String XML_TAG_USAGE_LIMIT_DATA_LIMIT = "UsageLimitDataLimit"; private static final String XML_TAG_USAGE_LIMIT_TIME_LIMIT = "UsageLimitTimeLimit"; + private static final String XML_TAG_CARRIER_ID = "CarrierId"; /** * Serialize a {@link PasspointConfiguration} to the output stream as a XML block. @@ -146,6 +147,7 @@ public class PasspointXmlUtils { XmlUtil.writeNextValue(out, XML_TAG_FRIENDLY_NAME_LIST, config.getServiceFriendlyNames()); } + XmlUtil.writeNextValue(out, XML_TAG_CARRIER_ID, config.getCarrierId()); } /** @@ -199,6 +201,9 @@ public class PasspointXmlUtils { case XML_TAG_FRIENDLY_NAME_LIST: config.setServiceFriendlyNames((Map) value); break; + case XML_TAG_CARRIER_ID: + config.setCarrierId((int) value); + break; default: throw new XmlPullParserException("Unknown value under " + "PasspointConfiguration: " + in.getName()); diff --git a/service/java/com/android/server/wifi/util/XmlUtil.java b/service/java/com/android/server/wifi/util/XmlUtil.java index e1c48785a..f73b9974d 100644 --- a/service/java/com/android/server/wifi/util/XmlUtil.java +++ b/service/java/com/android/server/wifi/util/XmlUtil.java @@ -349,6 +349,7 @@ public class XmlUtil { public static final String XML_TAG_RANDOMIZED_MAC_ADDRESS = "RandomizedMacAddress"; public static final String XML_TAG_MAC_RANDOMIZATION_SETTING = "MacRandomizationSetting"; public static final String XML_TAG_SAE_PASSWORD_ID_KEY = "SaePasswordId"; + public static final String XML_TAG_CARRIER_ID = "CarrierId"; /** * Write WepKeys to the XML stream. @@ -479,6 +480,7 @@ public class XmlUtil { configuration.getRandomizedMacAddress().toString()); XmlUtil.writeNextValue(out, XML_TAG_MAC_RANDOMIZATION_SETTING, configuration.macRandomizationSetting); + XmlUtil.writeNextValue(out, XML_TAG_CARRIER_ID, configuration.carrierId); } /** @@ -666,6 +668,9 @@ public class XmlUtil { configuration.macRandomizationSetting = (int) value; macRandomizationSettingExists = true; break; + case XML_TAG_CARRIER_ID: + configuration.carrierId = (int) value; + break; default: throw new XmlPullParserException( "Unknown value name found: " + valueName[0]); diff --git a/tests/wifitests/src/com/android/server/wifi/NetworkListStoreDataTest.java b/tests/wifitests/src/com/android/server/wifi/NetworkListStoreDataTest.java index 6032680b6..d9b565494 100644 --- a/tests/wifitests/src/com/android/server/wifi/NetworkListStoreDataTest.java +++ b/tests/wifitests/src/com/android/server/wifi/NetworkListStoreDataTest.java @@ -103,6 +103,7 @@ public class NetworkListStoreDataTest extends WifiBaseTest { + "\n" + "%s\n" + "\n" + + "\n" + "\n" + "\n" + "NETWORK_SELECTION_ENABLED\n" @@ -159,6 +160,7 @@ public class NetworkListStoreDataTest extends WifiBaseTest { + "\n" + "%s\n" + "\n" + + "\n" + "\n" + "\n" + "NETWORK_SELECTION_ENABLED\n" diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigStoreTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigStoreTest.java index 799ad70f0..5eba36461 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConfigStoreTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigStoreTest.java @@ -123,6 +123,7 @@ public class WifiConfigStoreTest extends WifiBaseTest { + "\n" + "%s\n" + "\n" + + "\n" + "\n" + "\n" + "NETWORK_SELECTION_ENABLED\n" diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java index 0726514bb..5755c5858 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java @@ -91,6 +91,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { private static final String TEST_FQDN = "FQDN"; private static final int TEST_UID_1 = 5667; private static final int TEST_UID_2 = 4537; + private static final int VALID_CARRIER_ID = 1; private @Mock Context mContext; private @Mock Resources mResources; @@ -1137,7 +1138,6 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, mWifiNetworkSuggestionsManager.add(networkSuggestionList, TEST_UID_1, TEST_PACKAGE_1)); - verify(mWifiPermissionsUtil).checkNetworkCarrierProvisioningPermission(TEST_UID_1); assertFalse(mWifiNetworkSuggestionsManager.hasUserApprovedForApp(TEST_PACKAGE_1)); WifiConfiguration connectNetwork = @@ -1176,7 +1176,6 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, mWifiNetworkSuggestionsManager.add(networkSuggestionList, TEST_UID_1, TEST_PACKAGE_1)); - verify(mWifiPermissionsUtil).checkNetworkCarrierProvisioningPermission(TEST_UID_1); mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); WifiConfiguration connectNetwork = @@ -1215,7 +1214,6 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, mWifiNetworkSuggestionsManager.add(networkSuggestionList, TEST_UID_1, TEST_PACKAGE_1)); - verify(mWifiPermissionsUtil).checkNetworkCarrierProvisioningPermission(TEST_UID_1); mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); doThrow(new SecurityException()) @@ -2400,4 +2398,59 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { assertNotNull(mBroadcastReceiverCaptor.getValue()); mBroadcastReceiverCaptor.getValue().onReceive(mContext, intent); } + + @Test + public void testAddSuggestionWithValidCarrierIdWithCarrierProvisionPermission() { + WifiConfiguration config = WifiConfigurationTestUtil.createOpenNetwork(); + config.carrierId = VALID_CARRIER_ID; + WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( + config, null, true, false, TEST_UID_1, + TEST_PACKAGE_1); + List networkSuggestionList = new ArrayList<>(); + networkSuggestionList.add(networkSuggestion); + when(mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(TEST_UID_1)) + .thenReturn(true); + + int status = mWifiNetworkSuggestionsManager + .add(networkSuggestionList, TEST_UID_1, TEST_APP_NAME_1); + + assertEquals(status, WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS); + + } + + @Test + public void testAddSuggestionWithValidCarrierIdWithoutCarrierProvisionPermission() { + WifiConfiguration config = WifiConfigurationTestUtil.createOpenNetwork(); + config.carrierId = VALID_CARRIER_ID; + WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( + config, null, true, false, TEST_UID_1, + TEST_PACKAGE_1); + List networkSuggestionList = new ArrayList<>(); + networkSuggestionList.add(networkSuggestion); + when(mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(TEST_UID_1)) + .thenReturn(false); + + int status = mWifiNetworkSuggestionsManager + .add(networkSuggestionList, TEST_UID_1, TEST_APP_NAME_1); + + assertEquals(status, + WifiManager.STATUS_NETWORK_SUGGESTIONS_ERROR_APP_DISALLOWED); + } + + @Test + public void testAddSuggestionWithDefaultCarrierIdWithoutCarrierProvisionPermission() { + WifiConfiguration config = WifiConfigurationTestUtil.createOpenNetwork(); + WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( + config, null, true, false, TEST_UID_1, + TEST_PACKAGE_1); + List networkSuggestionList = new ArrayList<>(); + networkSuggestionList.add(networkSuggestion); + when(mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(TEST_UID_1)) + .thenReturn(false); + + int status = mWifiNetworkSuggestionsManager + .add(networkSuggestionList, TEST_UID_1, TEST_APP_NAME_1); + + assertEquals(status, WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS); + } } -- cgit v1.2.3