summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2019-03-29 14:29:36 -0700
committerRoshan Pius <rpius@google.com>2019-04-02 07:11:03 -0700
commitc2f909d87ad83b654dba9c1b381ec6d9c5a05366 (patch)
treee413346ce9da6a442f1f2fa08601f1547e50fbd1 /service
parentb67ef4023640cc81603bc750c8a448723b1cd0cc (diff)
WifiService: setWifiEnabled bypass for older apps
For apps targeting older SDK (<Q), preserve the old behavior for setWifiEnabled. Bug: 129549163 Test: atest com.android.server.wifi.WifiServiceImplTest Change-Id: I2ebfcc10ff7ba61b759307085a6e91d87eafaa48
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java23
1 files changed, 19 insertions, 4 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index a7d6f4b85..815581828 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -866,16 +866,31 @@ public class WifiServiceImpl extends BaseWifiService {
*/
@Override
public synchronized boolean setWifiEnabled(String packageName, boolean enable) {
- mContext.enforceCallingOrSelfPermission(android.Manifest.permission.CHANGE_WIFI_STATE,
- "WifiService");
- // only privileged apps like settings, setup wizard, etc can toggle wifi.
- if (!isPrivileged(Binder.getCallingPid(), Binder.getCallingUid())
+ if (enforceChangePermission(packageName) != MODE_ALLOWED) {
+ return false;
+ }
+ boolean isPrivileged = isPrivileged(Binder.getCallingPid(), Binder.getCallingUid());
+ if (!isPrivileged
+ && !mWifiPermissionsUtil.isTargetSdkLessThan(packageName, Build.VERSION_CODES.Q)
// Default car dock app is allowed to turn on wifi (but, cannot turn off)
&& !(isDefaultCarDock(packageName) && enable)) {
mLog.info("setWifiEnabled not allowed for uid=%")
.c(Binder.getCallingUid()).flush();
return false;
}
+ // If Airplane mode is enabled, only privileged apps are allowed to toggle Wifi
+ if (mSettingsStore.isAirplaneModeOn() && !isPrivileged) {
+ mLog.err("setWifiEnabled in Airplane mode: only Settings can toggle wifi").flush();
+ return false;
+ }
+
+ // If SoftAp is enabled, only privileged apps are allowed to toggle wifi
+ boolean apEnabled = mWifiApState == WifiManager.WIFI_AP_STATE_ENABLED;
+ if (apEnabled && !isPrivileged) {
+ mLog.err("setWifiEnabled SoftAp enabled: only Settings can toggle wifi").flush();
+ return false;
+ }
+
mLog.info("setWifiEnabled package=% uid=% enable=%").c(packageName)
.c(Binder.getCallingUid()).c(enable).flush();
long ident = Binder.clearCallingIdentity();