Merge "FRP: save password quality in DPM.resetPassword"
This commit is contained in:
@@ -836,6 +836,11 @@ public class LockPatternUtils {
|
||||
+ "of length " + MIN_LOCK_PASSWORD_SIZE);
|
||||
}
|
||||
|
||||
if (requestedQuality < PASSWORD_QUALITY_NUMERIC) {
|
||||
throw new IllegalArgumentException("quality must be at least NUMERIC, but was "
|
||||
+ requestedQuality);
|
||||
}
|
||||
|
||||
final int currentQuality = getKeyguardStoredPasswordQuality(userHandle);
|
||||
setKeyguardStoredPasswordQuality(
|
||||
computePasswordQuality(CREDENTIAL_TYPE_PASSWORD, password, requestedQuality),
|
||||
|
||||
@@ -4787,14 +4787,16 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
|
||||
private boolean resetPasswordInternal(String password, long tokenHandle, byte[] token,
|
||||
int flags, int callingUid, int userHandle) {
|
||||
int quality;
|
||||
final int realQuality;
|
||||
synchronized (getLockObject()) {
|
||||
quality = getPasswordQuality(null, userHandle, /* parent */ false);
|
||||
if (quality == DevicePolicyManager.PASSWORD_QUALITY_MANAGED) {
|
||||
quality = PASSWORD_QUALITY_UNSPECIFIED;
|
||||
}
|
||||
final PasswordMetrics metrics = PasswordMetrics.computeForPassword(password);
|
||||
realQuality = metrics.quality;
|
||||
if (quality != PASSWORD_QUALITY_UNSPECIFIED) {
|
||||
final int realQuality = metrics.quality;
|
||||
|
||||
if (realQuality < quality
|
||||
&& quality != DevicePolicyManager.PASSWORD_QUALITY_COMPLEX) {
|
||||
Slog.w(LOG_TAG, "resetPassword: password quality 0x"
|
||||
@@ -4881,7 +4883,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
|
||||
try {
|
||||
if (token == null) {
|
||||
if (!TextUtils.isEmpty(password)) {
|
||||
mLockPatternUtils.saveLockPassword(password, null, quality, userHandle);
|
||||
mLockPatternUtils.saveLockPassword(password, null, realQuality, userHandle);
|
||||
} else {
|
||||
mLockPatternUtils.clearLock(null, userHandle);
|
||||
}
|
||||
@@ -4890,7 +4892,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
|
||||
result = mLockPatternUtils.setLockCredentialWithToken(password,
|
||||
TextUtils.isEmpty(password) ? LockPatternUtils.CREDENTIAL_TYPE_NONE
|
||||
: LockPatternUtils.CREDENTIAL_TYPE_PASSWORD,
|
||||
quality, tokenHandle, token, userHandle);
|
||||
realQuality, tokenHandle, token, userHandle);
|
||||
}
|
||||
boolean requireEntry = (flags & DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY) != 0;
|
||||
if (requireEntry) {
|
||||
|
||||
@@ -4181,7 +4181,7 @@ public class DevicePolicyManagerTest extends DpmTestBase {
|
||||
// test reset password with token
|
||||
when(getServices().lockPatternUtils.setLockCredentialWithToken(eq(password),
|
||||
eq(LockPatternUtils.CREDENTIAL_TYPE_PASSWORD),
|
||||
eq(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED), eq(handle), eq(token),
|
||||
eq(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC), eq(handle), eq(token),
|
||||
eq(UserHandle.USER_SYSTEM)))
|
||||
.thenReturn(true);
|
||||
assertTrue(dpm.resetPasswordWithToken(admin1, password, token, 0));
|
||||
|
||||
Reference in New Issue
Block a user