summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/pm/UserManagerService.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/java/com/android/server/pm/UserManagerService.java')
-rw-r--r--services/java/com/android/server/pm/UserManagerService.java25
1 files changed, 25 insertions, 0 deletions
diff --git a/services/java/com/android/server/pm/UserManagerService.java b/services/java/com/android/server/pm/UserManagerService.java
index d86f2c75c08e..29012127b04e 100644
--- a/services/java/com/android/server/pm/UserManagerService.java
+++ b/services/java/com/android/server/pm/UserManagerService.java
@@ -822,6 +822,11 @@ public class UserManagerService extends IUserManager.Stub {
pinState.failedAttempts = failedAttempts;
pinState.lastAttemptTime = lastAttemptTime;
}
+ // If this is not a restricted profile and there is no restrictions pin, clean up
+ // any restrictions files that might have been left behind.
+ if (!userInfo.isRestricted() && salt == 0) {
+ cleanAppRestrictions(id);
+ }
return userInfo;
} catch (IOException ioe) {
@@ -873,6 +878,26 @@ public class UserManagerService extends IUserManager.Stub {
}
}
+ /**
+ * Removes all the restrictions files (res_<packagename>) for a given user.
+ * Does not do any permissions checking.
+ */
+ private void cleanAppRestrictions(int userId) {
+ synchronized (mPackagesLock) {
+ File dir = Environment.getUserSystemDirectory(userId);
+ String[] files = dir.list();
+ if (files == null) return;
+ for (String fileName : files) {
+ if (fileName.startsWith(RESTRICTIONS_FILE_PREFIX)) {
+ File resFile = new File(dir, fileName);
+ if (resFile.exists()) {
+ resFile.delete();
+ }
+ }
+ }
+ }
+ }
+
@Override
public UserInfo createUser(String name, int flags) {
checkManageUsersPermission("Only the system can create users");