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

Commit 41916d49 authored by Nicolas Prevot's avatar Nicolas Prevot
Browse files

Fail silently when changing BLUETOOTH_ON/WIFI_ON directly

If the device owner tries to change BLUETOOTH_ON or WIFI_ON via
DevicePolicyManager.setGlobalSetting, fail silently.

There was not much point for the device owner to do it since it can
also change bluetooth/wifi state via normal bluetooth and wifi apis.

BUG:19311992

Change-Id: Ifba163800aa413865b8a2877cb21aacfa5cfc6c8
parent 08238bb6
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -3360,13 +3360,18 @@ public class DevicePolicyManager {
     * <li>{@link Settings.Global#ADB_ENABLED}</li>
     * <li>{@link Settings.Global#AUTO_TIME}</li>
     * <li>{@link Settings.Global#AUTO_TIME_ZONE}</li>
     * <li>{@link Settings.Global#BLUETOOTH_ON}</li>
     * <li>{@link Settings.Global#BLUETOOTH_ON}
     * Changing this setting has not effect as of {@link android.os.Build.VERSION_CODES#MNC}. Use
     * {@link android.bluetooth.BluetoothAdapter#enable()} and
     * {@link android.bluetooth.BluetoothAdapter#disable()} instead.</li>
     * <li>{@link Settings.Global#DATA_ROAMING}</li>
     * <li>{@link Settings.Global#DEVELOPMENT_SETTINGS_ENABLED}</li>
     * <li>{@link Settings.Global#MODE_RINGER}</li>
     * <li>{@link Settings.Global#NETWORK_PREFERENCE}</li>
     * <li>{@link Settings.Global#USB_MASS_STORAGE_ENABLED}</li>
     * <li>{@link Settings.Global#WIFI_ON}</li>
     * <li>{@link Settings.Global#WIFI_ON}
     * Changing this setting has not effect as of {@link android.os.Build.VERSION_CODES#MNC}. Use
     * {@link android.net.wifi.WifiManager#setWifiEnabled(boolean)} instead.</li>
     * <li>{@link Settings.Global#WIFI_SLEEP_POLICY}</li>
     * </ul>
     *
+7 −4
Original line number Diff line number Diff line
@@ -196,13 +196,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.ADB_ENABLED);
        GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.AUTO_TIME);
        GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.AUTO_TIME_ZONE);
        GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.BLUETOOTH_ON);
        GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.DATA_ROAMING);
        GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.DEVELOPMENT_SETTINGS_ENABLED);
        GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.MODE_RINGER);
        GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.NETWORK_PREFERENCE);
        GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.USB_MASS_STORAGE_ENABLED);
        GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.WIFI_ON);
        GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.WIFI_SLEEP_POLICY);
    }

@@ -5267,9 +5265,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);

            if (!GLOBAL_SETTINGS_WHITELIST.contains(setting)) {
                // BLUETOOTH_ON and WIFI_ON used to be supported but not any more. We do not want to
                // throw a SecurityException not to break apps.
                if (!Settings.Global.BLUETOOTH_ON.equals(setting)
                        && !Settings.Global.WIFI_ON.equals(setting)) {
                    throw new SecurityException(String.format(
                            "Permission denial: device owners cannot update %1$s", setting));
                }
            }

            long id = Binder.clearCallingIdentity();
            try {