Merge "Rename legacy permission state."

This commit is contained in:
TreeHugger Robot
2020-10-06 00:23:06 +00:00
committed by Android (Google) Code Review
7 changed files with 82 additions and 70 deletions

View File

@@ -28,7 +28,7 @@ import android.util.proto.ProtoOutputStream;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.pm.parsing.pkg.AndroidPackage;
import com.android.server.pm.permission.AppIdPermissionState;
import com.android.server.pm.permission.LegacyPermissionState;
import com.android.server.pm.pkg.PackageStateUnserialized;
import java.io.File;
@@ -214,11 +214,12 @@ public class PackageSetting extends PackageSettingBase {
mimeGroups = updatedMimeGroups;
}
@Deprecated
@Override
public AppIdPermissionState getPermissionsState() {
public LegacyPermissionState getLegacyPermissionState() {
return (sharedUser != null)
? sharedUser.getPermissionsState()
: super.getPermissionsState();
? sharedUser.getLegacyPermissionState()
: super.getLegacyPermissionState();
}
public int getAppId() {

View File

@@ -19,23 +19,29 @@ package com.android.server.pm;
import android.content.pm.ApplicationInfo;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.pm.permission.AppIdPermissionState;
import com.android.server.pm.permission.LegacyPermissionState;
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
public abstract class SettingBase {
int pkgFlags;
int pkgPrivateFlags;
protected final AppIdPermissionState mPermissionsState;
/**
* The legacy permission state that is read from package settings persistence for migration.
* This state here can not reflect the current permission state and should not be used for
* purposes other than migration.
*/
@Deprecated
protected final LegacyPermissionState mLegacyPermissionsState;
SettingBase(int pkgFlags, int pkgPrivateFlags) {
setFlags(pkgFlags);
setPrivateFlags(pkgPrivateFlags);
mPermissionsState = new AppIdPermissionState();
mLegacyPermissionsState = new LegacyPermissionState();
}
SettingBase(SettingBase orig) {
mPermissionsState = new AppIdPermissionState();
mLegacyPermissionsState = new LegacyPermissionState();
doCopy(orig);
}
@@ -46,11 +52,12 @@ public abstract class SettingBase {
private void doCopy(SettingBase orig) {
pkgFlags = orig.pkgFlags;
pkgPrivateFlags = orig.pkgPrivateFlags;
mPermissionsState.copyFrom(orig.mPermissionsState);
mLegacyPermissionsState.copyFrom(orig.mLegacyPermissionsState);
}
public AppIdPermissionState getPermissionsState() {
return mPermissionsState;
@Deprecated
public LegacyPermissionState getLegacyPermissionState() {
return mLegacyPermissionsState;
}
void setFlags(int pkgFlags) {

View File

@@ -107,10 +107,10 @@ import com.android.server.pm.Installer.InstallerException;
import com.android.server.pm.parsing.PackageInfoUtils;
import com.android.server.pm.parsing.pkg.AndroidPackage;
import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
import com.android.server.pm.permission.AppIdPermissionState;
import com.android.server.pm.permission.AppIdPermissionState.PermissionState;
import com.android.server.pm.permission.BasePermission;
import com.android.server.pm.permission.LegacyPermissionDataProvider;
import com.android.server.pm.permission.LegacyPermissionState;
import com.android.server.pm.permission.LegacyPermissionState.PermissionState;
import com.android.server.pm.permission.PermissionSettings;
import com.android.server.utils.TimingsTraceAndSlog;
@@ -733,7 +733,8 @@ public final class Settings {
pkgSetting.signatures = new PackageSignatures(disabledPkg.signatures);
pkgSetting.appId = disabledPkg.appId;
// Clone permissions
pkgSetting.getPermissionsState().copyFrom(disabledPkg.getPermissionsState());
pkgSetting.getLegacyPermissionState()
.copyFrom(disabledPkg.getLegacyPermissionState());
// Clone component info
List<UserInfo> users = getAllUsers(userManager);
if (users != null) {
@@ -2114,7 +2115,7 @@ public final class Settings {
}
void readInstallPermissionsLPr(XmlPullParser parser,
AppIdPermissionState permissionsState) throws IOException, XmlPullParserException {
LegacyPermissionState permissionsState) throws IOException, XmlPullParserException {
int outerDepth = parser.getDepth();
int type;
while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
@@ -2406,7 +2407,7 @@ public final class Settings {
serializer.attribute(null, "userId",
Integer.toString(usr.userId));
usr.signatures.writeXml(serializer, "sigs", mPastSignatures);
writePermissionsLPr(serializer, usr.getPermissionsState()
writePermissionsLPr(serializer, usr.getLegacyPermissionState()
.getInstallPermissionStates());
serializer.endTag(null, "shared-user");
}
@@ -2734,7 +2735,7 @@ public final class Settings {
// If this is a shared user, the permissions will be written there.
if (pkg.sharedUser == null) {
writePermissionsLPr(serializer, pkg.getPermissionsState()
writePermissionsLPr(serializer, pkg.getLegacyPermissionState()
.getInstallPermissionStates());
}
@@ -2825,7 +2826,8 @@ public final class Settings {
serializer, "install-initiator-sigs", mPastSignatures);
}
writePermissionsLPr(serializer, pkg.getPermissionsState().getInstallPermissionStates());
writePermissionsLPr(serializer,
pkg.getLegacyPermissionState().getInstallPermissionStates());
writeSigningKeySetLPr(serializer, pkg.keySetData);
writeUpgradeKeySetsLPr(serializer, pkg.keySetData);
@@ -3551,7 +3553,7 @@ public final class Settings {
}
if (parser.getName().equals(TAG_PERMISSIONS)) {
readInstallPermissionsLPr(parser, ps.getPermissionsState());
readInstallPermissionsLPr(parser, ps.getLegacyPermissionState());
} else if (parser.getName().equals(TAG_USES_STATIC_LIB)) {
readUsesStaticLibLPw(parser, ps);
} else {
@@ -3848,7 +3850,7 @@ public final class Settings {
packageSetting.signatures.readXml(parser, mPastSignatures);
} else if (tagName.equals(TAG_PERMISSIONS)) {
readInstallPermissionsLPr(parser,
packageSetting.getPermissionsState());
packageSetting.getLegacyPermissionState());
packageSetting.installPermissionsFixed = true;
} else if (tagName.equals("proper-signing-keyset")) {
long id = Long.parseLong(parser.getAttributeValue(null, "identifier"));
@@ -4074,7 +4076,7 @@ public final class Settings {
if (tagName.equals("sigs")) {
su.signatures.readXml(parser, mPastSignatures);
} else if (tagName.equals("perms")) {
readInstallPermissionsLPr(parser, su.getPermissionsState());
readInstallPermissionsLPr(parser, su.getLegacyPermissionState());
} else {
PackageManagerService.reportSettingsProblem(Log.WARN,
"Unknown element under <shared-user>: " + parser.getName());
@@ -4494,7 +4496,7 @@ public final class Settings {
void dumpPackageLPr(PrintWriter pw, String prefix, String checkinTag,
ArraySet<String> permissionNames, PackageSetting ps,
AppIdPermissionState permissionsState, SimpleDateFormat sdf, Date date,
LegacyPermissionState permissionsState, SimpleDateFormat sdf, Date date,
List<UserInfo> users, boolean dumpAll, boolean dumpAllComponents) {
AndroidPackage pkg = ps.pkg;
if (checkinTag != null) {
@@ -4944,8 +4946,8 @@ public final class Settings {
&& !packageName.equals(ps.name)) {
continue;
}
final AppIdPermissionState permissionsState =
mPermissionDataProvider.getAppIdPermissionState(ps.appId);
final LegacyPermissionState permissionsState =
mPermissionDataProvider.getLegacyPermissionState(ps.appId);
if (permissionNames != null
&& !permissionsState.hasPermissionState(permissionNames)) {
continue;
@@ -5002,8 +5004,8 @@ public final class Settings {
pw.println("Hidden system packages:");
printedSomething = true;
}
final AppIdPermissionState permissionsState =
mPermissionDataProvider.getAppIdPermissionState(ps.appId);
final LegacyPermissionState permissionsState =
mPermissionDataProvider.getLegacyPermissionState(ps.appId);
dumpPackageLPr(pw, " ", checkin ? "dis" : null, permissionNames, ps,
permissionsState, sdf, date, users, packageName != null, dumpAllComponents);
}
@@ -5033,8 +5035,8 @@ public final class Settings {
if (packageName != null && su != dumpState.getSharedUser()) {
continue;
}
final AppIdPermissionState permissionsState =
mPermissionDataProvider.getAppIdPermissionState(su.userId);
final LegacyPermissionState permissionsState =
mPermissionDataProvider.getLegacyPermissionState(su.userId);
if (permissionNames != null
&& !permissionsState.hasPermissionState(permissionNames)) {
continue;
@@ -5178,7 +5180,7 @@ public final class Settings {
}
void dumpInstallPermissionsLPr(PrintWriter pw, String prefix, ArraySet<String> permissionNames,
AppIdPermissionState permissionsState) {
LegacyPermissionState permissionsState) {
Collection<PermissionState> permissionStates =
permissionsState.getInstallPermissionStates();
if (!permissionStates.isEmpty()) {
@@ -5424,7 +5426,7 @@ public final class Settings {
if (packageSetting.sharedUser == null) {
List<RuntimePermissionsState.PermissionState> permissions =
getPermissionsFromPermissionsState(
packageSetting.getPermissionsState(), userId);
packageSetting.getLegacyPermissionState(), userId);
packagePermissions.put(packageName, permissions);
}
}
@@ -5437,7 +5439,7 @@ public final class Settings {
SharedUserSetting sharedUserSetting = mSharedUsers.valueAt(i);
List<RuntimePermissionsState.PermissionState> permissions =
getPermissionsFromPermissionsState(
sharedUserSetting.getPermissionsState(), userId);
sharedUserSetting.getLegacyPermissionState(), userId);
sharedUserPermissions.put(sharedUserName, permissions);
}
@@ -5449,7 +5451,7 @@ public final class Settings {
@NonNull
private List<RuntimePermissionsState.PermissionState> getPermissionsFromPermissionsState(
@NonNull AppIdPermissionState permissionsState, @UserIdInt int userId) {
@NonNull LegacyPermissionState permissionsState, @UserIdInt int userId) {
Collection<PermissionState> permissionStates =
permissionsState.getRuntimePermissionStates(userId);
List<RuntimePermissionsState.PermissionState> permissions = new ArrayList<>();
@@ -5509,11 +5511,11 @@ public final class Settings {
List<RuntimePermissionsState.PermissionState> permissions =
packagePermissions.get(packageName);
if (permissions != null) {
readPermissionsStateLpr(permissions, packageSetting.getPermissionsState(),
readPermissionsStateLpr(permissions, packageSetting.getLegacyPermissionState(),
userId);
} else if (packageSetting.sharedUser == null && !isUpgradeToR) {
Slog.w(TAG, "Missing permission state for package: " + packageName);
packageSetting.getPermissionsState().setMissing(true, userId);
packageSetting.getLegacyPermissionState().setMissing(true, userId);
}
}
@@ -5527,18 +5529,18 @@ public final class Settings {
List<RuntimePermissionsState.PermissionState> permissions =
sharedUserPermissions.get(sharedUserName);
if (permissions != null) {
readPermissionsStateLpr(permissions, sharedUserSetting.getPermissionsState(),
userId);
readPermissionsStateLpr(permissions,
sharedUserSetting.getLegacyPermissionState(), userId);
} else if (!isUpgradeToR) {
Slog.w(TAG, "Missing permission state for shared user: " + sharedUserName);
sharedUserSetting.getPermissionsState().setMissing(true, userId);
sharedUserSetting.getLegacyPermissionState().setMissing(true, userId);
}
}
}
private void readPermissionsStateLpr(
@NonNull List<RuntimePermissionsState.PermissionState> permissions,
@NonNull AppIdPermissionState permissionsState, @UserIdInt int userId) {
@NonNull LegacyPermissionState permissionsState, @UserIdInt int userId) {
int permissionsSize = permissions.size();
for (int i = 0; i < permissionsSize; i++) {
RuntimePermissionsState.PermissionState permission = permissions.get(i);
@@ -5617,7 +5619,7 @@ public final class Settings {
XmlUtils.skipCurrentTag(parser);
continue;
}
parsePermissionsLPr(parser, ps.getPermissionsState(), userId);
parsePermissionsLPr(parser, ps.getLegacyPermissionState(), userId);
} break;
case TAG_SHARED_USER: {
@@ -5628,14 +5630,14 @@ public final class Settings {
XmlUtils.skipCurrentTag(parser);
continue;
}
parsePermissionsLPr(parser, sus.getPermissionsState(), userId);
parsePermissionsLPr(parser, sus.getLegacyPermissionState(), userId);
} break;
}
}
}
private void parsePermissionsLPr(XmlPullParser parser,
AppIdPermissionState permissionsState, int userId)
LegacyPermissionState permissionsState, int userId)
throws IOException, XmlPullParserException {
final int outerDepth = parser.getDepth();
int type;

View File

@@ -31,7 +31,7 @@ public interface LegacyPermissionDataProvider {
* @return the legacy permission state
*/
@NonNull
public abstract AppIdPermissionState getAppIdPermissionState(@AppIdInt int appId);
LegacyPermissionState getLegacyPermissionState(@AppIdInt int appId);
/**
* Get the GIDs computed from the permission state of a UID, either a package or a shared user.
@@ -40,5 +40,5 @@ public interface LegacyPermissionDataProvider {
* @return the GIDs for the UID
*/
@NonNull
public abstract int[] getGidsForUid(int uid);
int[] getGidsForUid(int uid);
}

View File

@@ -32,7 +32,7 @@ import java.util.Objects;
* Legacy permission state that was associated with packages or shared users.
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public final class AppIdPermissionState {
public final class LegacyPermissionState {
// Maps from user IDs to user states.
@NonNull
private final SparseArray<UserState> mUserStates = new SparseArray<>();
@@ -48,7 +48,7 @@ public final class AppIdPermissionState {
*
* @hide
*/
public void copyFrom(@NonNull AppIdPermissionState other) {
public void copyFrom(@NonNull LegacyPermissionState other) {
if (other == this) {
return;
}
@@ -88,7 +88,7 @@ public final class AppIdPermissionState {
if (getClass() != object.getClass()) {
return false;
}
final AppIdPermissionState other = (AppIdPermissionState) object;
final LegacyPermissionState other = (LegacyPermissionState) object;
return Objects.equals(mUserStates, other.mUserStates)
&& Objects.equals(mMissing, other.mMissing);
}

View File

@@ -4599,7 +4599,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
final int[] userIds = getAllUserIds();
mPackageManagerInt.forEachPackageSetting(ps -> {
final int appId = ps.getAppId();
final AppIdPermissionState appIdState = ps.getPermissionsState();
final LegacyPermissionState legacyState = ps.getLegacyPermissionState();
synchronized (mLock) {
for (final int userId : userIds) {
@@ -4608,19 +4608,19 @@ public class PermissionManagerService extends IPermissionManager.Stub {
userState.setInstallPermissionsFixed(ps.name, ps.areInstallPermissionsFixed());
final UidPermissionState uidState = userState.getOrCreateUidState(appId);
uidState.reset();
uidState.setMissing(appIdState.isMissing(userId));
uidState.setMissing(legacyState.isMissing(userId));
readStateFromPermissionStates(uidState,
appIdState.getInstallPermissionStates());
legacyState.getInstallPermissionStates());
readStateFromPermissionStates(uidState,
appIdState.getRuntimePermissionStates(userId));
legacyState.getRuntimePermissionStates(userId));
}
}
});
}
private void readStateFromPermissionStates(@NonNull UidPermissionState uidState,
@NonNull Collection<AppIdPermissionState.PermissionState> permissionStates) {
for (final AppIdPermissionState.PermissionState permissionState : permissionStates) {
@NonNull Collection<LegacyPermissionState.PermissionState> permissionStates) {
for (final LegacyPermissionState.PermissionState permissionState : permissionStates) {
uidState.putPermissionState(permissionState.getPermission(),
permissionState.isGranted(), permissionState.getFlags());
}
@@ -4630,8 +4630,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
final int[] userIds = mState.getUserIds();
mPackageManagerInt.forEachPackageSetting(ps -> {
ps.setInstallPermissionsFixed(false);
final AppIdPermissionState appIdState = ps.getPermissionsState();
appIdState.reset();
final LegacyPermissionState legacyState = ps.getLegacyPermissionState();
legacyState.reset();
final int appId = ps.getAppId();
synchronized (mLock) {
@@ -4653,21 +4653,21 @@ public class PermissionManagerService extends IPermissionManager.Stub {
continue;
}
appIdState.setMissing(uidState.isMissing(), userId);
legacyState.setMissing(uidState.isMissing(), userId);
final List<PermissionState> permissionStates = uidState.getPermissionStates();
final int permissionStatesSize = permissionStates.size();
for (int i = 0; i < permissionStatesSize; i++) {
final PermissionState permissionState = permissionStates.get(i);
final AppIdPermissionState.PermissionState legacyPermissionState =
new AppIdPermissionState.PermissionState(
final LegacyPermissionState.PermissionState legacyPermissionState =
new LegacyPermissionState.PermissionState(
permissionState.getPermission(),
permissionState.isGranted(), permissionState.getFlags());
if (permissionState.isRuntime()) {
appIdState.putRuntimePermissionState(legacyPermissionState,
legacyState.putRuntimePermissionState(legacyPermissionState,
userId);
} else {
appIdState.putInstallPermissionState(legacyPermissionState);
legacyState.putInstallPermissionState(legacyPermissionState);
}
}
}
@@ -4676,8 +4676,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
@NonNull
private AppIdPermissionState getAppIdPermissionState(@AppIdInt int appId) {
final AppIdPermissionState appIdState = new AppIdPermissionState();
private LegacyPermissionState getLegacyPermissionState(@AppIdInt int appId) {
final LegacyPermissionState legacyState = new LegacyPermissionState();
final int[] userIds = mState.getUserIds();
for (final int userId : userIds) {
final UidPermissionState uidState = getUidState(appId, userId);
@@ -4692,17 +4692,17 @@ public class PermissionManagerService extends IPermissionManager.Stub {
for (int i = 0; i < permissionStatesSize; i++) {
final PermissionState permissionState = permissionStates.get(i);
final AppIdPermissionState.PermissionState legacyPermissionState =
new AppIdPermissionState.PermissionState(permissionState.getPermission(),
final LegacyPermissionState.PermissionState legacyPermissionState =
new LegacyPermissionState.PermissionState(permissionState.getPermission(),
permissionState.isGranted(), permissionState.getFlags());
if (permissionState.isRuntime()) {
appIdState.putRuntimePermissionState(legacyPermissionState, userId);
legacyState.putRuntimePermissionState(legacyPermissionState, userId);
} else if (userId == UserHandle.USER_SYSTEM) {
appIdState.putInstallPermissionState(legacyPermissionState);
legacyState.putInstallPermissionState(legacyPermissionState);
}
}
}
return appIdState;
return legacyState;
}
@NonNull
@@ -5111,8 +5111,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
@NonNull
public AppIdPermissionState getAppIdPermissionState(@AppIdInt int appId) {
return PermissionManagerService.this.getAppIdPermissionState(appId);
public LegacyPermissionState getLegacyPermissionState(@AppIdInt int appId) {
return PermissionManagerService.this.getLegacyPermissionState(appId);
}
@NonNull

View File

@@ -891,8 +891,10 @@ public class PackageManagerSettingsTests {
assertNotSame(origPkgSetting.mimeGroups, testPkgSetting.mimeGroups);
}
assertThat(origPkgSetting.mimeGroups, is(testPkgSetting.mimeGroups));
assertNotSame(origPkgSetting.mPermissionsState, testPkgSetting.mPermissionsState);
assertThat(origPkgSetting.mPermissionsState, is(testPkgSetting.mPermissionsState));
assertNotSame(origPkgSetting.mLegacyPermissionsState,
testPkgSetting.mLegacyPermissionsState);
assertThat(origPkgSetting.mLegacyPermissionsState,
is(testPkgSetting.mLegacyPermissionsState));
assertThat(origPkgSetting.name, is(testPkgSetting.name));
// mOldCodePaths is _not_ copied
// assertNotSame(origPkgSetting.mOldCodePaths, testPkgSetting.mOldCodePaths);