summaryrefslogtreecommitdiffstats
path: root/services/devicepolicy
diff options
context:
space:
mode:
authorEsteban Talavera <etalavera@google.com>2015-06-24 15:23:42 +0100
committerEsteban Talavera <etalavera@google.com>2015-06-24 17:19:19 +0100
commit28b9570d0235eca305dc76c006a54c8a85cf5db8 (patch)
tree083b105955af757896615039a086697e1e63db51 /services/devicepolicy
parent2e5615467e40856e758631cea542da804de01a7d (diff)
downloadframeworks_base-28b9570d0235eca305dc76c006a54c8a85cf5db8.zip
frameworks_base-28b9570d0235eca305dc76c006a54c8a85cf5db8.tar.gz
frameworks_base-28b9570d0235eca305dc76c006a54c8a85cf5db8.tar.bz2
Reset permission policy to default when device owner goes away
Otherwise after the Device Owner is gone, runtime permissions might still be auto granted/denied. I understand that there are many other policies that we don't reset after the device/profile owner goes away (e.g. keyguard enabled/disabled). At least now we have a single method when we could clear the ones that we care about. Bug: 21889278 Change-Id: I6997655e6ef6d474bd25ae1c323eca5b17944b16
Diffstat (limited to 'services/devicepolicy')
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java66
1 files changed, 31 insertions, 35 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index e44a7ab..491b412 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -4214,20 +4214,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
throw new SecurityException("clearDeviceOwner can only be called by the device owner");
}
synchronized (this) {
- long ident = Binder.clearCallingIdentity();
- try {
- clearUserRestrictions(new UserHandle(UserHandle.USER_OWNER));
- AppGlobals.getPackageManager().updatePermissionFlagsForAllApps(
- PackageManager.FLAG_PERMISSION_POLICY_FIXED,
- 0, UserHandle.USER_OWNER);
- if (mDeviceOwner != null) {
- mDeviceOwner.clearDeviceOwner();
- mDeviceOwner.writeOwnerFile();
- updateDeviceOwnerLocked();
- }
- } catch (RemoteException re) {
- } finally {
- Binder.restoreCallingIdentity(ident);
+ clearUserPoliciesLocked(new UserHandle(UserHandle.USER_OWNER));
+ if (mDeviceOwner != null) {
+ mDeviceOwner.clearDeviceOwner();
+ mDeviceOwner.writeOwnerFile();
+ updateDeviceOwnerLocked();
}
}
}
@@ -4378,34 +4369,39 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
return;
}
UserHandle callingUser = Binder.getCallingUserHandle();
- int userId = callingUser.getIdentifier();
// Check if this is the profile owner who is calling
getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
synchronized (this) {
- // Reset some of the profile-owner policies
- DevicePolicyData policy = getUserData(userId);
- policy.mPermissionPolicy = DevicePolicyManager.PERMISSION_POLICY_PROMPT;
- policy.mDelegatedCertInstallerPackage = null;
- policy.mStatusBarDisabled = false;
- saveSettingsLocked(userId);
-
- long ident = Binder.clearCallingIdentity();
- try {
- clearUserRestrictions(callingUser);
- AppGlobals.getPackageManager().updatePermissionFlagsForAllApps(
- PackageManager.FLAG_PERMISSION_POLICY_FIXED,
- 0, callingUser.getIdentifier());
- if (mDeviceOwner != null) {
- mDeviceOwner.removeProfileOwner(userId);
- mDeviceOwner.writeOwnerFile();
- }
- } catch (RemoteException re) {
- } finally {
- Binder.restoreCallingIdentity(ident);
+ clearUserPoliciesLocked(callingUser);
+ if (mDeviceOwner != null) {
+ mDeviceOwner.removeProfileOwner(callingUser.getIdentifier());
+ mDeviceOwner.writeOwnerFile();
}
}
}
+ private void clearUserPoliciesLocked(UserHandle userHandle) {
+ int userId = userHandle.getIdentifier();
+ // Reset some of the user-specific policies
+ DevicePolicyData policy = getUserData(userId);
+ policy.mPermissionPolicy = DevicePolicyManager.PERMISSION_POLICY_PROMPT;
+ policy.mDelegatedCertInstallerPackage = null;
+ policy.mStatusBarDisabled = false;
+ saveSettingsLocked(userId);
+
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ clearUserRestrictions(userHandle);
+ AppGlobals.getPackageManager().updatePermissionFlagsForAllApps(
+ PackageManager.FLAG_PERMISSION_POLICY_FIXED,
+ 0 /* flagValues */, userHandle.getIdentifier());
+ } catch (RemoteException re) {
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+
private void clearUserRestrictions(UserHandle userHandle) {
AudioManager audioManager =
(AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);