OSDN Git Service

Clean up ex-users in lock settings db
authorAmith Yamasani <yamasani@google.com>
Thu, 16 Jun 2016 15:20:07 +0000 (08:20 -0700)
committerAmith Yamasani <yamasani@google.com>
Thu, 16 Jun 2016 15:31:56 +0000 (08:31 -0700)
Just in case a userid was not properly cleaned
when the user was removed, make sure it is
cleaned up when a new user takes up the same
userid. This prevents inconsistent lockscreen
state and avoids a crash in Settings when trying
to set a password for the new user.

Fixes: 29412112
Change-Id: Ic4f0efbb97786b0290c74325b28c9d74825e9e53

services/core/java/com/android/server/LockSettingsService.java

index 1e715f9..66e2da0 100644 (file)
@@ -423,6 +423,9 @@ public class LockSettingsService extends ILockSettings.Stub {
             if (Intent.ACTION_USER_ADDED.equals(intent.getAction())) {
                 // Notify keystore that a new user was added.
                 final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
+                if (userHandle > UserHandle.USER_SYSTEM) {
+                    removeUser(userHandle, /* unknownUser= */ true);
+                }
                 final KeyStore ks = KeyStore.getInstance();
                 final UserInfo parentInfo = mUserManager.getProfileParent(userHandle);
                 final int parentHandle = parentInfo != null ? parentInfo.id : -1;
@@ -433,7 +436,7 @@ public class LockSettingsService extends ILockSettings.Stub {
             } else if (Intent.ACTION_USER_REMOVED.equals(intent.getAction())) {
                 final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
                 if (userHandle > 0) {
-                    removeUser(userHandle);
+                    removeUser(userHandle, /* unknownUser= */ false);
                 }
             }
         }
@@ -1464,7 +1467,7 @@ public class LockSettingsService extends ILockSettings.Stub {
         return false;
     }
 
-    private void removeUser(int userId) {
+    private void removeUser(int userId, boolean unknownUser) {
         mStorage.removeUser(userId);
         mStrongAuth.removeUser(userId);
 
@@ -1479,7 +1482,7 @@ public class LockSettingsService extends ILockSettings.Stub {
         } catch (RemoteException ex) {
             Slog.w(TAG, "unable to clear GK secure user id");
         }
-        if (mUserManager.getUserInfo(userId).isManagedProfile()) {
+        if (unknownUser || mUserManager.getUserInfo(userId).isManagedProfile()) {
             removeKeystoreProfileKey(userId);
         }
     }