From e2afc2420d29c2d3d04a05ed5839c12f3b267b23 Mon Sep 17 00:00:00 2001 From: Brian Carlstrom Date: Thu, 2 Jun 2011 16:21:55 -0700 Subject: KeyStore.reset changes restore keystore reset behavior of removing master key. otherwise after reboot keystore has is LOCKED and not UNINITIALIZED cmds/keystore/keystore.cpp when removing password, reset the keystore, so it doesn't remain locked with a now bogus password. core/java/com/android/internal/widget/LockPatternUtils.java Change-Id: If5e0bb50b42599e9ca27a8b91d6cec12528419a1 --- cmds/keystore/keystore.cpp | 4 +--- .../java/com/android/internal/widget/LockPatternUtils.java | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/cmds/keystore/keystore.cpp b/cmds/keystore/keystore.cpp index 31db9fdc1c8f..b48be6ef3885 100644 --- a/cmds/keystore/keystore.cpp +++ b/cmds/keystore/keystore.cpp @@ -392,9 +392,7 @@ public: return false; } while ((file = readdir(dir)) != NULL) { - if (isKeyFile(file->d_name)) { - unlink(file->d_name); - } + unlink(file->d_name); } closedir(dir); return true; diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index b3666cbaad6d..dfba4865ba2f 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -397,13 +397,17 @@ public class LockPatternUtils { } raf.close(); DevicePolicyManager dpm = getDevicePolicyManager(); + KeyStore keyStore = KeyStore.getInstance(); if (pattern != null) { - KeyStore.getInstance().password(patternToString(pattern)); + keyStore.password(patternToString(pattern)); setBoolean(PATTERN_EVER_CHOSEN_KEY, true); setLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING); dpm.setActivePasswordState(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, pattern .size(), 0, 0, 0, 0, 0, 0); } else { + if (keyStore.isEmpty()) { + keyStore.reset(); + } dpm.setActivePasswordState(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, 0, 0, 0, 0, 0, 0, 0); } @@ -486,12 +490,13 @@ public class LockPatternUtils { } raf.close(); DevicePolicyManager dpm = getDevicePolicyManager(); + KeyStore keyStore = KeyStore.getInstance(); if (password != null) { // Update the encryption password. updateEncryptionPassword(password); // Update the keystore password - KeyStore.getInstance().password(password); + keyStore.password(password); int computedQuality = computePasswordQuality(password); setLong(PASSWORD_TYPE_KEY, Math.max(quality, computedQuality)); @@ -545,6 +550,11 @@ public class LockPatternUtils { } setString(PASSWORD_HISTORY_KEY, passwordHistory); } else { + // Conditionally reset the keystore if empty. If + // non-empty, we are just switching key guard type + if (keyStore.isEmpty()) { + keyStore.reset(); + } dpm.setActivePasswordState( DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, 0, 0, 0, 0, 0, 0, 0); } -- cgit v1.2.3-59-g8ed1b