summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Lee <rgl@google.com>2014-09-24 17:32:34 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-09-24 17:32:34 +0000
commitec16ecc68a249fc8c26eefa5525fb538cd69f56c (patch)
treefd3c1c96fd72b59dc949c8a650900d305f975127
parent00f484f9705a13913e8ba8fbe950fcc8bc56f742 (diff)
parent9686582f4f8f9009a9e6625c112b7a9e182dadfe (diff)
am 9b1fea82: am 0a803fcc: Merge "Reset keystore when user is added or removed" into lmp-dev
* commit '9b1fea82c7ed98b8189a61c37796e37631c923a1': Reset keystore when user is added or removed
-rw-r--r--services/core/java/com/android/server/LockSettingsService.java18
1 files changed, 13 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java
index adfbb165de3a..b708c3f96ae7 100644
--- a/services/core/java/com/android/server/LockSettingsService.java
+++ b/services/core/java/com/android/server/LockSettingsService.java
@@ -115,16 +115,20 @@ public class LockSettingsService extends ILockSettings.Stub {
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- // Update keystore settings for profiles which use the same password as their parent
if (Intent.ACTION_USER_ADDED.equals(intent.getAction())) {
final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
+ final int userSysUid = UserHandle.getUid(userHandle, Process.SYSTEM_UID);
+ final KeyStore ks = KeyStore.getInstance();
+
+ // Clear up keystore in case anything was left behind by previous users
+ ks.resetUid(userSysUid);
+
+ // If this user has a parent, sync with its keystore password
final UserManager um = (UserManager) mContext.getSystemService(USER_SERVICE);
final UserInfo parentInfo = um.getProfileParent(userHandle);
if (parentInfo != null) {
- final KeyStore ks = KeyStore.getInstance();
- final int profileUid = UserHandle.getUid(userHandle, Process.SYSTEM_UID);
- final int parentUid = UserHandle.getUid(parentInfo.id, Process.SYSTEM_UID);
- ks.syncUid(parentUid, profileUid);
+ final int parentSysUid = UserHandle.getUid(parentInfo.id, Process.SYSTEM_UID);
+ ks.syncUid(parentSysUid, userSysUid);
}
}
}
@@ -530,6 +534,10 @@ public class LockSettingsService extends ILockSettings.Stub {
} finally {
db.endTransaction();
}
+
+ final KeyStore ks = KeyStore.getInstance();
+ final int userUid = UserHandle.getUid(userId, Process.SYSTEM_UID);
+ ks.resetUid(userUid);
}
private void writeFile(String name, byte[] hash) {