Add command to require strong auth
The command set-strong-auth can help to require strong auth. Thus we can use this command to simulate the lockdown mode on cts. Bug: 173721373 Test: atest LockSettingsShellCommandTest Change-Id: Ifabb14c77b15e55e663902647310496f5519d5a5
This commit is contained in:
@@ -18,12 +18,14 @@ package com.android.server.locksettings;
|
||||
|
||||
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
|
||||
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PATTERN;
|
||||
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
import android.app.admin.PasswordMetrics;
|
||||
import android.content.Context;
|
||||
import android.os.ShellCommand;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.UserHandle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Slog;
|
||||
|
||||
@@ -48,6 +50,8 @@ class LockSettingsShellCommand extends ShellCommand {
|
||||
private static final String COMMAND_REMOVE_CACHE = "remove-cache";
|
||||
private static final String COMMAND_SET_ROR_PROVIDER_PACKAGE =
|
||||
"set-resume-on-reboot-provider-package";
|
||||
private static final String COMMAND_REQUIRE_STRONG_AUTH =
|
||||
"require-strong-auth";
|
||||
private static final String COMMAND_HELP = "help";
|
||||
|
||||
private int mCurrentUserId;
|
||||
@@ -97,6 +101,9 @@ class LockSettingsShellCommand extends ShellCommand {
|
||||
case COMMAND_SET_ROR_PROVIDER_PACKAGE:
|
||||
runSetResumeOnRebootProviderPackage();
|
||||
return 0;
|
||||
case COMMAND_REQUIRE_STRONG_AUTH:
|
||||
runRequireStrongAuth();
|
||||
return 0;
|
||||
case COMMAND_HELP:
|
||||
onHelp();
|
||||
return 0;
|
||||
@@ -192,6 +199,10 @@ class LockSettingsShellCommand extends ShellCommand {
|
||||
pw.println(" Sets the package name for server based resume on reboot service "
|
||||
+ "provider.");
|
||||
pw.println("");
|
||||
pw.println(" require-strong-auth [--user USER_ID] <reason>");
|
||||
pw.println(" Requires the strong authentication. The current supported reasons: "
|
||||
+ "STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN.");
|
||||
pw.println("");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -288,6 +299,24 @@ class LockSettingsShellCommand extends ShellCommand {
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean runRequireStrongAuth() {
|
||||
final String reason = mNew;
|
||||
int strongAuthReason;
|
||||
switch (reason) {
|
||||
case "STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN":
|
||||
strongAuthReason = STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
|
||||
mCurrentUserId = UserHandle.USER_ALL;
|
||||
break;
|
||||
default:
|
||||
getErrPrintWriter().println("Unsupported reason: " + reason);
|
||||
return false;
|
||||
}
|
||||
mLockPatternUtils.requireStrongAuth(strongAuthReason, mCurrentUserId);
|
||||
getOutPrintWriter().println("Require strong auth for USER_ID "
|
||||
+ mCurrentUserId + " because of " + mNew);
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean runClear() {
|
||||
LockscreenCredential none = LockscreenCredential.createNone();
|
||||
if (!isNewCredentialSufficient(none)) {
|
||||
|
||||
@@ -25,6 +25,8 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
|
||||
|
||||
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
@@ -48,6 +50,7 @@ import android.os.Looper;
|
||||
import android.os.Process;
|
||||
import android.os.ResultReceiver;
|
||||
import android.os.ShellCallback;
|
||||
import android.os.UserHandle;
|
||||
import android.platform.test.annotations.Presubmit;
|
||||
|
||||
import androidx.test.InstrumentationRegistry;
|
||||
@@ -370,6 +373,19 @@ public class LockSettingsShellCommandTest {
|
||||
mUserId);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRequireStrongAuth_STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN() throws Exception {
|
||||
when(mLockPatternUtils.isSecure(mUserId)).thenReturn(true);
|
||||
|
||||
assertEquals(0, mCommand.exec(new Binder(), in, out, err,
|
||||
new String[] { "require-strong-auth", "STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN"},
|
||||
mShellCallback, mResultReceiver));
|
||||
|
||||
verify(mLockPatternUtils).requireStrongAuth(
|
||||
STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN,
|
||||
UserHandle.USER_ALL);
|
||||
}
|
||||
|
||||
private List<LockPatternView.Cell> stringToPattern(String str) {
|
||||
return LockPatternUtils.byteArrayToPattern(str.getBytes());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user