summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorRebecca Silberstein <silberst@google.com>2017-03-01 14:21:13 -0800
committerRebecca Silberstein <silberst@google.com>2017-03-09 18:23:12 +0000
commit835e781643b79c30fabbab5595770cf01b5861fb (patch)
tree5a7570660631b8fa83efcaac761660ad6a9a1483 /service
parenta9f4a722ac91fe87352f2e0cfec72fdfbb35ba5d (diff)
WifiPermissionsUtil: add checkConfigOverride
Add a helper method to allow callers to check the calling UID for the override config permission. This CL moves the call from WifiConfigManager to the util/WifiPermissionsUtil class and adds tests. Bug: 35870086 Test: frameworks/opt/net/wifi/tests/wifitests/runtests.sh Test: frameworks/base/wifi/tests/runtests.sh Change-Id: I5aa1bbc82eb86408272564365d45b7ddbf7cc661
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/WifiConfigManager.java36
-rw-r--r--service/java/com/android/server/wifi/WifiInjector.java7
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java5
-rw-r--r--service/java/com/android/server/wifi/util/WifiPermissionsUtil.java17
-rw-r--r--service/java/com/android/server/wifi/util/WifiPermissionsWrapper.java14
5 files changed, 49 insertions, 30 deletions
diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java
index cd10bda67..7c8cddae8 100644
--- a/service/java/com/android/server/wifi/WifiConfigManager.java
+++ b/service/java/com/android/server/wifi/WifiConfigManager.java
@@ -35,7 +35,6 @@ import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiScanner;
import android.os.Process;
-import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
@@ -52,6 +51,7 @@ import com.android.server.wifi.WifiConfigStoreLegacy.WifiConfigStoreDataLegacy;
import com.android.server.wifi.hotspot2.PasspointManager;
import com.android.server.wifi.util.ScanResultUtil;
import com.android.server.wifi.util.TelephonyUtil;
+import com.android.server.wifi.util.WifiPermissionsUtil;
import com.android.server.wifi.util.WifiPermissionsWrapper;
import org.xmlpull.v1.XmlPullParserException;
@@ -211,7 +211,6 @@ public class WifiConfigManager {
* List of external dependencies for WifiConfigManager.
*/
private final Context mContext;
- private final FrameworkFacade mFacade;
private final Clock mClock;
private final UserManager mUserManager;
private final BackupManagerProxy mBackupManagerProxy;
@@ -219,6 +218,7 @@ public class WifiConfigManager {
private final WifiKeyStore mWifiKeyStore;
private final WifiConfigStore mWifiConfigStore;
private final WifiConfigStoreLegacy mWifiConfigStoreLegacy;
+ private final WifiPermissionsUtil mWifiPermissionsUtil;
private final WifiPermissionsWrapper mWifiPermissionsWrapper;
/**
* Local log used for debugging any WifiConfigManager issues.
@@ -302,14 +302,14 @@ public class WifiConfigManager {
* Create new instance of WifiConfigManager.
*/
WifiConfigManager(
- Context context, FrameworkFacade facade, Clock clock, UserManager userManager,
+ Context context, Clock clock, UserManager userManager,
TelephonyManager telephonyManager, WifiKeyStore wifiKeyStore,
WifiConfigStore wifiConfigStore, WifiConfigStoreLegacy wifiConfigStoreLegacy,
+ WifiPermissionsUtil wifiPermissionsUtil,
WifiPermissionsWrapper wifiPermissionsWrapper,
NetworkListStoreData networkListStoreData,
DeletedEphemeralSsidsStoreData deletedEphemeralSsidsStoreData) {
mContext = context;
- mFacade = facade;
mClock = clock;
mUserManager = userManager;
mBackupManagerProxy = new BackupManagerProxy();
@@ -317,6 +317,7 @@ public class WifiConfigManager {
mWifiKeyStore = wifiKeyStore;
mWifiConfigStore = wifiConfigStore;
mWifiConfigStoreLegacy = wifiConfigStoreLegacy;
+ mWifiPermissionsUtil = wifiPermissionsUtil;
mWifiPermissionsWrapper = wifiPermissionsWrapper;
mConfiguredNetworks = new ConfigurationMap(userManager);
@@ -606,24 +607,6 @@ public class WifiConfigManager {
}
/**
- * Checks if the app has the permission to override Wi-Fi network configuration or not.
- *
- * @param uid uid of the app.
- * @return true if the app does have the permission, false otherwise.
- */
- public boolean checkConfigOverridePermission(int uid) {
- try {
- int permission =
- mFacade.checkUidPermission(
- android.Manifest.permission.OVERRIDE_WIFI_CONFIG, uid);
- return (permission == PackageManager.PERMISSION_GRANTED);
- } catch (RemoteException e) {
- Log.e(TAG, "Error checking for permission " + e);
- return false;
- }
- }
-
- /**
* Checks if |uid| has permission to modify the provided configuration.
*
* @param config WifiConfiguration object corresponding to the network to be modified.
@@ -647,7 +630,7 @@ public class WifiConfigManager {
// Check if the |uid| holds the |OVERRIDE_CONFIG_WIFI| permission if the caller asks us to
// bypass the lockdown checks.
if (ignoreLockdown) {
- return checkConfigOverridePermission(uid);
+ return mWifiPermissionsUtil.checkConfigOverridePermission(uid);
}
// Check if device has DPM capability. If it has and |dpmi| is still null, then we
@@ -662,13 +645,13 @@ public class WifiConfigManager {
final boolean isConfigEligibleForLockdown = dpmi != null && dpmi.isActiveAdminWithPolicy(
config.creatorUid, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
if (!isConfigEligibleForLockdown) {
- return isCreator || checkConfigOverridePermission(uid);
+ return isCreator || mWifiPermissionsUtil.checkConfigOverridePermission(uid);
}
final ContentResolver resolver = mContext.getContentResolver();
final boolean isLockdownFeatureEnabled = Settings.Global.getInt(resolver,
Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 0) != 0;
- return !isLockdownFeatureEnabled && checkConfigOverridePermission(uid);
+ return !isLockdownFeatureEnabled && mWifiPermissionsUtil.checkConfigOverridePermission(uid);
}
/**
@@ -2777,7 +2760,8 @@ public class WifiConfigManager {
DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
final boolean isUidDeviceOwner = dpmi != null && dpmi.isActiveAdminWithPolicy(uid,
DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
- final boolean hasConfigOverridePermission = checkConfigOverridePermission(uid);
+ final boolean hasConfigOverridePermission =
+ mWifiPermissionsUtil.checkConfigOverridePermission(uid);
// If |uid| corresponds to the device owner, allow all modifications.
if (isUidDeviceOwner || isUidProfileOwner || hasConfigOverridePermission) {
return true;
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java
index 59c1a5ac3..f41f5f90b 100644
--- a/service/java/com/android/server/wifi/WifiInjector.java
+++ b/service/java/com/android/server/wifi/WifiInjector.java
@@ -190,10 +190,11 @@ public class WifiInjector {
mWifiNetworkHistory, mWifiNative, mIpConfigStore,
new LegacyPasspointConfigParser());
// Config Manager
- mWifiConfigManager = new WifiConfigManager(mContext, mFrameworkFacade, mClock,
+ mWifiConfigManager = new WifiConfigManager(mContext, mClock,
UserManager.get(mContext), TelephonyManager.from(mContext),
- mWifiKeyStore, mWifiConfigStore, mWifiConfigStoreLegacy, mWifiPermissionsWrapper,
- new NetworkListStoreData(), new DeletedEphemeralSsidsStoreData());
+ mWifiKeyStore, mWifiConfigStore, mWifiConfigStoreLegacy, mWifiPermissionsUtil,
+ mWifiPermissionsWrapper, new NetworkListStoreData(),
+ new DeletedEphemeralSsidsStoreData());
mWifiNetworkSelector = new WifiNetworkSelector(mContext, mWifiConfigManager, mClock);
LocalLog localLog = mWifiNetworkSelector.getLocalLog();
mSavedNetworkEvaluator = new SavedNetworkEvaluator(mContext,
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index 10f38aa88..ccbc8e811 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -118,6 +118,7 @@ import com.android.server.wifi.util.NativeUtil;
import com.android.server.wifi.util.TelephonyUtil;
import com.android.server.wifi.util.TelephonyUtil.SimAuthRequestData;
import com.android.server.wifi.util.TelephonyUtil.SimAuthResponseData;
+import com.android.server.wifi.util.WifiPermissionsUtil;
import java.io.BufferedReader;
import java.io.FileDescriptor;
@@ -198,6 +199,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss
private WifiInjector mWifiInjector;
private WifiMonitor mWifiMonitor;
private WifiNative mWifiNative;
+ private WifiPermissionsUtil mWifiPermissionsUtil;
private WifiConfigManager mWifiConfigManager;
private WifiConnectivityManager mWifiConnectivityManager;
private WifiNetworkSelector mWifiNetworkSelector;
@@ -885,6 +887,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss
mP2pSupported = mContext.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_WIFI_DIRECT);
+ mWifiPermissionsUtil = mWifiInjector.getWifiPermissionsUtil();
mWifiConfigManager = mWifiInjector.getWifiConfigManager();
mWifiApConfigStore = mWifiInjector.getWifiApConfigStore();
mWifiNative.setSystemSupportsFastBssTransition(
@@ -5852,7 +5855,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss
WifiConfiguration config = getCurrentWifiConfiguration();
if (mWifiConfigManager.getLastSelectedNetwork() == config.networkId) {
boolean prompt =
- mWifiConfigManager.checkConfigOverridePermission(config.lastConnectUid);
+ mWifiPermissionsUtil.checkConfigOverridePermission(config.lastConnectUid);
if (mVerboseLoggingEnabled) {
log("Network selected by UID " + config.lastConnectUid + " prompt=" + prompt);
}
diff --git a/service/java/com/android/server/wifi/util/WifiPermissionsUtil.java b/service/java/com/android/server/wifi/util/WifiPermissionsUtil.java
index 3d473d44f..2010dcfa7 100644
--- a/service/java/com/android/server/wifi/util/WifiPermissionsUtil.java
+++ b/service/java/com/android/server/wifi/util/WifiPermissionsUtil.java
@@ -22,6 +22,7 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.net.NetworkScoreManager;
+import android.os.RemoteException;
import android.os.UserManager;
import android.provider.Settings;
@@ -58,6 +59,22 @@ public class WifiPermissionsUtil {
}
/**
+ * Checks if the app has the permission to override Wi-Fi network configuration or not.
+ *
+ * @param uid uid of the app.
+ * @return true if the app does have the permission, false otherwise.
+ */
+ public boolean checkConfigOverridePermission(int uid) {
+ try {
+ int permission = mWifiPermissionsWrapper.getOverrideWifiConfigPermission(uid);
+ return (permission == PackageManager.PERMISSION_GRANTED);
+ } catch (RemoteException e) {
+ mLog.err("Error checking for permission: %").r(e.getMessage()).flush();
+ return false;
+ }
+ }
+
+ /**
* API to determine if the caller has permissions to get
* scan results.
* @param pkgName Packagename of the application requesting access
diff --git a/service/java/com/android/server/wifi/util/WifiPermissionsWrapper.java b/service/java/com/android/server/wifi/util/WifiPermissionsWrapper.java
index 72c439d47..6ca2f0291 100644
--- a/service/java/com/android/server/wifi/util/WifiPermissionsWrapper.java
+++ b/service/java/com/android/server/wifi/util/WifiPermissionsWrapper.java
@@ -17,8 +17,10 @@
package com.android.server.wifi.util;
import android.app.ActivityManager;
+import android.app.AppGlobals;
import android.app.admin.DevicePolicyManagerInternal;
import android.content.Context;
+import android.os.RemoteException;
import android.os.UserHandle;
import com.android.server.LocalServices;
@@ -81,4 +83,16 @@ public class WifiPermissionsWrapper {
public DevicePolicyManagerInternal getDevicePolicyManagerInternal() {
return LocalServices.getService(DevicePolicyManagerInternal.class);
}
+
+ /**
+ * Determines if the caller has the override wifi config permission.
+ *
+ * @param uid to check the permission for
+ * @return int representation of success or denied
+ * @throws RemoteException
+ */
+ public int getOverrideWifiConfigPermission(int uid) throws RemoteException {
+ return AppGlobals.getPackageManager().checkUidPermission(
+ android.Manifest.permission.OVERRIDE_WIFI_CONFIG, uid);
+ }
}