summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rafael Prado <rafaelprado@google.com> 2024-09-25 00:16:31 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-09-25 00:16:31 +0000
commit44d0b5dd15b3d9cccc355d93c15a83f710d10d56 (patch)
tree6d72c0de222bbeee83fbce0af22b93cbbafec9f4
parentb46b288a8aa5f15a381f2559f79258eee79e180a (diff)
parent11857301dba15c0bdf187c4202de96fa93b0fb03 (diff)
Merge "Add ResetPasswordWithToken migration code." into main
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java61
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/Owners.java13
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/OwnersData.java11
3 files changed, 80 insertions, 5 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 57a7b93a212d..407a5a638db1 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -3515,6 +3515,48 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
return true;
}
+ @GuardedBy("getLockObject()")
+ private boolean maybeMigrateResetPasswordTokenLocked(String backupId) {
+ if (!Flags.resetPasswordWithTokenCoexistence()) {
+ Slog.i(LOG_TAG, "ResetPasswordWithToken not migrated because coexistence "
+ + "support is not enabled.");
+ return false;
+ }
+ if (mOwners.isResetPasswordWithTokenMigrated()) {
+ // TODO(b/359187209): Remove log after Flags.resetPasswordWithTokenCoexistence full
+ // rollout.
+ Slog.v(LOG_TAG, "ResetPasswordWithToken was previously migrated to "
+ + "policy engine.");
+ return false;
+ }
+
+ Slog.i(LOG_TAG, "Migrating ResetPasswordWithToken to policy engine");
+
+ // Create backup if none exists
+ mDevicePolicyEngine.createBackup(backupId);
+ try {
+ iterateThroughDpcAdminsLocked((admin, enforcingAdmin) -> {
+ int userId = enforcingAdmin.getUserId();
+ DevicePolicyData policy = getUserData(userId);
+ if (policy.mPasswordTokenHandle != 0) {
+ Slog.i(LOG_TAG, "Setting RESET_PASSWORD_TOKEN policy");
+ mDevicePolicyEngine.setLocalPolicy(
+ PolicyDefinition.RESET_PASSWORD_TOKEN,
+ enforcingAdmin,
+ new LongPolicyValue(policy.mPasswordTokenHandle),
+ userId);
+ }
+ });
+ } catch (Exception e) {
+ Slog.wtf(LOG_TAG,
+ "Failed to migrate ResetPasswordWithToken to policy engine", e);
+ }
+
+ Slog.i(LOG_TAG, "Marking ResetPasswordWithToken migration complete");
+ mOwners.markResetPasswordWithTokenMigrated();
+ return true;
+ }
+
/** Register callbacks for statsd pulled atoms. */
private void registerStatsCallbacks() {
final StatsManager statsManager = mContext.getSystemService(StatsManager.class);
@@ -19342,6 +19384,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
PolicyDefinition.RESET_PASSWORD_TOKEN,
enforcingAdmin,
userId);
+ // TODO(b/369152176): Address difference in behavior regarding addEscrowToken when
+ // compared with the else branch.
long tokenHandle = addEscrowToken(
token, currentTokenHandle == null ? 0 : currentTokenHandle, userId);
if (tokenHandle == 0) {
@@ -24280,12 +24324,21 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
maybeMigrateSecurityLoggingPolicyLocked();
// ID format: <sdk-int>.<auto_increment_id>.<descriptions>'
String unmanagedBackupId = "35.1.unmanaged-mode";
- boolean migrated = false;
- migrated = migrated | maybeMigrateRequiredPasswordComplexityLocked(unmanagedBackupId);
- migrated = migrated | maybeMigrateSuspendedPackagesLocked(unmanagedBackupId);
- if (migrated) {
+ boolean unmanagedMigrated = false;
+ unmanagedMigrated =
+ unmanagedMigrated | maybeMigrateRequiredPasswordComplexityLocked(unmanagedBackupId);
+ unmanagedMigrated =
+ unmanagedMigrated | maybeMigrateSuspendedPackagesLocked(unmanagedBackupId);
+ if (unmanagedMigrated) {
Slogf.i(LOG_TAG, "Backup made: " + unmanagedBackupId);
}
+
+ String supervisionBackupId = "36.2.supervision-support";
+ boolean supervisionMigrated = maybeMigrateResetPasswordTokenLocked(supervisionBackupId);
+ if (supervisionMigrated) {
+ Slogf.i(LOG_TAG, "Backup made: " + supervisionBackupId);
+ }
+
// Additional migration steps should repeat the pattern above with a new backupId.
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java b/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java
index 3f9605ac2e5d..b3c8408ff54b 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java
@@ -669,6 +669,19 @@ class Owners {
}
}
+ void markResetPasswordWithTokenMigrated() {
+ synchronized (mData) {
+ mData.mResetPasswordWithTokenMigrated = true;
+ mData.writeDeviceOwner();
+ }
+ }
+
+ boolean isResetPasswordWithTokenMigrated() {
+ synchronized (mData) {
+ return mData.mResetPasswordWithTokenMigrated;
+ }
+ }
+
@GuardedBy("mData")
void pushToAppOpsLocked() {
if (!mSystemReady) {
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/OwnersData.java b/services/devicepolicy/java/com/android/server/devicepolicy/OwnersData.java
index 87fd0024a0fa..10e43d955fab 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/OwnersData.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/OwnersData.java
@@ -91,6 +91,8 @@ class OwnersData {
private static final String ATTR_REQUIRED_PASSWORD_COMPLEXITY_MIGRATED =
"passwordComplexityMigrated";
private static final String ATTR_SUSPENDED_PACKAGES_MIGRATED = "suspendedPackagesMigrated";
+ private static final String ATTR_RESET_PASSWORD_WITH_TOKEN_MIGRATED =
+ "resetPasswordWithTokenMigrated";
private static final String ATTR_MIGRATED_POST_UPGRADE = "migratedPostUpgrade";
// Internal state for the device owner package.
@@ -122,6 +124,7 @@ class OwnersData {
boolean mSecurityLoggingMigrated = false;
boolean mRequiredPasswordComplexityMigrated = false;
boolean mSuspendedPackagesMigrated = false;
+ boolean mResetPasswordWithTokenMigrated = false;
boolean mPoliciesMigratedPostUpdate = false;
@@ -417,7 +420,10 @@ class OwnersData {
mSuspendedPackagesMigrated);
}
-
+ if (Flags.resetPasswordWithTokenCoexistence()) {
+ out.attributeBoolean(null, ATTR_RESET_PASSWORD_WITH_TOKEN_MIGRATED,
+ mResetPasswordWithTokenMigrated);
+ }
out.endTag(null, TAG_POLICY_ENGINE_MIGRATION);
}
@@ -488,6 +494,9 @@ class OwnersData {
mSuspendedPackagesMigrated = Flags.unmanagedModeMigration()
&& parser.getAttributeBoolean(null,
ATTR_SUSPENDED_PACKAGES_MIGRATED, false);
+ mResetPasswordWithTokenMigrated = Flags.resetPasswordWithTokenCoexistence()
+ && parser.getAttributeBoolean(null,
+ ATTR_RESET_PASSWORD_WITH_TOKEN_MIGRATED, false);
break;
default: