Merge "Finish swapping packageName and permissionName."

This commit is contained in:
TreeHugger Robot
2021-01-07 03:30:54 +00:00
committed by Android (Google) Code Review
3 changed files with 77 additions and 79 deletions

View File

@@ -33,17 +33,17 @@ interface IPermissionManager {
PermissionGroupInfo getPermissionGroupInfo(String groupName, int flags);
PermissionInfo getPermissionInfo(String permName, String packageName, int flags);
PermissionInfo getPermissionInfo(String permissionName, String packageName, int flags);
ParceledListSlice queryPermissionsByGroup(String groupName, int flags);
boolean addPermission(in PermissionInfo info, boolean async);
boolean addPermission(in PermissionInfo permissionInfo, boolean async);
void removePermission(String name);
void removePermission(String permissionName);
int getPermissionFlags(String permName, String packageName, int userId);
int getPermissionFlags(String packageName, String permissionName, int userId);
void updatePermissionFlags(String permName, String packageName, int flagMask,
void updatePermissionFlags(String packageName, String permissionName, int flagMask,
int flagValues, boolean checkAdjustPolicyFlagPermission, int userId);
void updatePermissionFlagsForAllApps(int flagMask, int flagValues, int userId);
@@ -61,14 +61,15 @@ interface IPermissionManager {
boolean removeAllowlistedRestrictedPermission(String packageName, String permissionName,
int flags, int userId);
void grantRuntimePermission(String packageName, String permName, int userId);
void grantRuntimePermission(String packageName, String permissionName, int userId);
void revokeRuntimePermission(String packageName, String permName, int userId, String reason);
void revokeRuntimePermission(String packageName, String permissionName, int userId,
String reason);
boolean shouldShowRequestPermissionRationale(String permName,
String packageName, int userId);
boolean shouldShowRequestPermissionRationale(String packageName, String permissionName,
int userId);
boolean isPermissionRevokedByPolicy(String permName, String packageName, int userId);
boolean isPermissionRevokedByPolicy(String packageName, String permissionName, int userId);
List<SplitPermissionInfoParcelable> getSplitPermissions();

View File

@@ -305,7 +305,7 @@ public final class PermissionManager {
public boolean isPermissionRevokedByPolicy(@NonNull String packageName,
@NonNull String permissionName) {
try {
return mPermissionManager.isPermissionRevokedByPolicy(permissionName, packageName,
return mPermissionManager.isPermissionRevokedByPolicy(packageName, permissionName,
mContext.getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -332,7 +332,7 @@ public final class PermissionManager {
* @param permissionName the permission name to grant
* @param user the user for which to grant the permission
*
* @see #revokeRuntimePermission(String, String, android.os.UserHandle)
* @see #revokeRuntimePermission(String, String, android.os.UserHandle, String)
*
* @hide
*/
@@ -411,7 +411,7 @@ public final class PermissionManager {
public int getPermissionFlags(@NonNull String packageName, @NonNull String permissionName,
@NonNull UserHandle user) {
try {
return mPermissionManager.getPermissionFlags(permissionName, packageName,
return mPermissionManager.getPermissionFlags(packageName, permissionName,
user.getIdentifier());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -450,7 +450,7 @@ public final class PermissionManager {
try {
final boolean checkAdjustPolicyFlagPermission =
mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.Q;
mPermissionManager.updatePermissionFlags(permissionName, packageName, flagMask,
mPermissionManager.updatePermissionFlags(packageName, permissionName, flagMask,
flagValues, checkAdjustPolicyFlagPermission, user.getIdentifier());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -721,8 +721,8 @@ public final class PermissionManager {
public boolean shouldShowRequestPermissionRationale(@NonNull String permissionName) {
try {
final String packageName = mContext.getPackageName();
return mPermissionManager.shouldShowRequestPermissionRationale(permissionName,
packageName, mContext.getUserId());
return mPermissionManager.shouldShowRequestPermissionRationale(packageName,
permissionName, mContext.getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}

View File

@@ -716,13 +716,13 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
@Override
public int getPermissionFlags(String permName, String packageName, int userId) {
public int getPermissionFlags(String packageName, String permName, int userId) {
final int callingUid = getCallingUid();
return getPermissionFlagsInternal(permName, packageName, callingUid, userId);
return getPermissionFlagsInternal(packageName, permName, callingUid, userId);
}
private int getPermissionFlagsInternal(
String permName, String packageName, int callingUid, int userId) {
String packageName, String permName, int callingUid, int userId) {
if (!mUserManagerInt.exists(userId)) {
return 0;
}
@@ -757,7 +757,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
@Override
public void updatePermissionFlags(String permName, String packageName, int flagMask,
public void updatePermissionFlags(String packageName, String permName, int flagMask,
int flagValues, boolean checkAdjustPolicyFlagPermission, int userId) {
final int callingUid = getCallingUid();
boolean overridePolicy = false;
@@ -787,11 +787,11 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
updatePermissionFlagsInternal(
permName, packageName, flagMask, flagValues, callingUid, userId,
packageName, permName, flagMask, flagValues, callingUid, userId,
overridePolicy, mDefaultPermissionCallback);
}
private void updatePermissionFlagsInternal(String permName, String packageName, int flagMask,
private void updatePermissionFlagsInternal(String packageName, String permName, int flagMask,
int flagValues, int callingUid, int userId, boolean overridePolicy,
PermissionCallback callback) {
if (PermissionManager.DEBUG_TRACE_PERMISSION_UPDATES
@@ -955,9 +955,9 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
}
private int checkPermission(String permName, String pkgName, @UserIdInt int userId) {
private int checkPermission(String pkgName, String permName, @UserIdInt int userId) {
// Not using Objects.requireNonNull() here for compatibility reasons.
if (permName == null || pkgName == null) {
if (pkgName == null || permName == null) {
return PackageManager.PERMISSION_DENIED;
}
if (!mUserManagerInt.exists(userId)) {
@@ -969,13 +969,13 @@ public class PermissionManagerService extends IPermissionManager.Stub {
checkPermissionDelegate = mCheckPermissionDelegate;
}
if (checkPermissionDelegate == null) {
return checkPermissionImpl(permName, pkgName, userId);
return checkPermissionImpl(pkgName, permName, userId);
}
return checkPermissionDelegate.checkPermission(permName, pkgName, userId,
return checkPermissionDelegate.checkPermission(pkgName, permName, userId,
this::checkPermissionImpl);
}
private int checkPermissionImpl(String permName, String pkgName, int userId) {
private int checkPermissionImpl(String pkgName, String permName, int userId) {
final AndroidPackage pkg = mPackageManagerInt.getPackage(pkgName);
if (pkg == null) {
return PackageManager.PERMISSION_DENIED;
@@ -1036,7 +1036,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
return true;
}
private int checkUidPermission(String permName, int uid) {
private int checkUidPermission(int uid, String permName) {
// Not using Objects.requireNonNull() here for compatibility reasons.
if (permName == null) {
return PackageManager.PERMISSION_DENIED;
@@ -1051,13 +1051,13 @@ public class PermissionManagerService extends IPermissionManager.Stub {
checkPermissionDelegate = mCheckPermissionDelegate;
}
if (checkPermissionDelegate == null) {
return checkUidPermissionImpl(permName, uid);
return checkUidPermissionImpl(uid, permName);
}
return checkPermissionDelegate.checkUidPermission(permName, uid,
return checkPermissionDelegate.checkUidPermission(uid, permName,
this::checkUidPermissionImpl);
}
private int checkUidPermissionImpl(String permName, int uid) {
private int checkUidPermissionImpl(int uid, String permName) {
final AndroidPackage pkg = mPackageManagerInt.getPackage(uid);
return checkUidPermissionInternal(pkg, uid, permName);
}
@@ -1444,15 +1444,14 @@ public class PermissionManagerService extends IPermissionManager.Stub {
public void grantRuntimePermission(String packageName, String permName, final int userId) {
final int callingUid = Binder.getCallingUid();
final boolean overridePolicy =
checkUidPermission(ADJUST_RUNTIME_PERMISSIONS_POLICY, callingUid)
checkUidPermission(callingUid, ADJUST_RUNTIME_PERMISSIONS_POLICY)
== PackageManager.PERMISSION_GRANTED;
grantRuntimePermissionInternal(permName, packageName, overridePolicy,
grantRuntimePermissionInternal(packageName, permName, overridePolicy,
callingUid, userId, mDefaultPermissionCallback);
}
// TODO swap permission name and package name
private void grantRuntimePermissionInternal(String permName, String packageName,
private void grantRuntimePermissionInternal(String packageName, String permName,
boolean overridePolicy, int callingUid, final int userId, PermissionCallback callback) {
if (PermissionManager.DEBUG_TRACE_GRANTS
&& PermissionManager.shouldTraceGrant(packageName, permName, userId)) {
@@ -1620,15 +1619,14 @@ public class PermissionManagerService extends IPermissionManager.Stub {
String reason) {
final int callingUid = Binder.getCallingUid();
final boolean overridePolicy =
checkUidPermission(ADJUST_RUNTIME_PERMISSIONS_POLICY, callingUid)
checkUidPermission(callingUid, ADJUST_RUNTIME_PERMISSIONS_POLICY)
== PackageManager.PERMISSION_GRANTED;
revokeRuntimePermissionInternal(permName, packageName, overridePolicy, callingUid, userId,
revokeRuntimePermissionInternal(packageName, permName, overridePolicy, callingUid, userId,
reason, mDefaultPermissionCallback);
}
// TODO swap permission name and package name
private void revokeRuntimePermissionInternal(String permName, String packageName,
private void revokeRuntimePermissionInternal(String packageName, String permName,
boolean overridePolicy, int callingUid, final int userId, String reason,
PermissionCallback callback) {
if (PermissionManager.DEBUG_TRACE_PERMISSION_UPDATES
@@ -1885,7 +1883,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
final int oldFlags =
getPermissionFlagsInternal(permName, packageName, Process.SYSTEM_UID, userId);
getPermissionFlagsInternal(packageName, permName, Process.SYSTEM_UID, userId);
// Always clear the user settable flags.
// If permission review is enabled and this is a legacy app, mark the
@@ -1897,7 +1895,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
: 0;
updatePermissionFlagsInternal(
permName, packageName, userSettableMask, flags, Process.SYSTEM_UID, userId,
packageName, permName, userSettableMask, flags, Process.SYSTEM_UID, userId,
false, delayingPermCallback);
// Below is only runtime permission handling.
@@ -1914,13 +1912,13 @@ public class PermissionManagerService extends IPermissionManager.Stub {
if ((oldFlags & FLAG_PERMISSION_GRANTED_BY_DEFAULT) != 0
|| (oldFlags & FLAG_PERMISSION_GRANTED_BY_ROLE) != 0) {
// PermissionPolicyService will handle the app op for runtime permissions later.
grantRuntimePermissionInternal(permName, packageName, false,
grantRuntimePermissionInternal(packageName, permName, false,
Process.SYSTEM_UID, userId, delayingPermCallback);
// If permission review is enabled the permissions for a legacy apps
// are represented as constantly granted runtime ones, so don't revoke.
} else if ((flags & FLAG_PERMISSION_REVIEW_REQUIRED) == 0) {
// Otherwise, reset the permission.
revokeRuntimePermissionInternal(permName, packageName, false, Process.SYSTEM_UID,
revokeRuntimePermissionInternal(packageName, permName, false, Process.SYSTEM_UID,
userId, null, delayingPermCallback);
}
}
@@ -1959,8 +1957,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
private static final long BACKGROUND_RATIONALE_CHANGE_ID = 147316723L;
@Override
public boolean shouldShowRequestPermissionRationale(String permName,
String packageName, int userId) {
public boolean shouldShowRequestPermissionRationale(String packageName, String permName,
@UserIdInt int userId) {
final int callingUid = Binder.getCallingUid();
if (UserHandle.getCallingUserId() != userId) {
mContext.enforceCallingPermission(
@@ -1974,7 +1972,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
return false;
}
if (checkPermission(permName, packageName, userId)
if (checkPermission(packageName, permName, userId)
== PackageManager.PERMISSION_GRANTED) {
return false;
}
@@ -1983,7 +1981,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
final long identity = Binder.clearCallingIdentity();
try {
flags = getPermissionFlagsInternal(permName, packageName, callingUid, userId);
flags = getPermissionFlagsInternal(packageName, permName, callingUid, userId);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -2024,14 +2022,14 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
@Override
public boolean isPermissionRevokedByPolicy(String permName, String packageName, int userId) {
public boolean isPermissionRevokedByPolicy(String packageName, String permName, int userId) {
if (UserHandle.getCallingUserId() != userId) {
mContext.enforceCallingPermission(
android.Manifest.permission.INTERACT_ACROSS_USERS_FULL,
"isPermissionRevokedByPolicy for user " + userId);
}
if (checkPermission(permName, packageName, userId) == PackageManager.PERMISSION_GRANTED) {
if (checkPermission(packageName, permName, userId) == PackageManager.PERMISSION_GRANTED) {
return false;
}
@@ -2042,7 +2040,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
final long identity = Binder.clearCallingIdentity();
try {
final int flags = getPermissionFlagsInternal(permName, packageName, callingUid, userId);
final int flags = getPermissionFlagsInternal(packageName, permName, callingUid, userId);
return (flags & PackageManager.FLAG_PERMISSION_POLICY_FIXED) != 0;
} finally {
Binder.restoreCallingIdentity(identity);
@@ -2215,7 +2213,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
+ downgradedSdk + " or newly requested legacy full storage "
+ newlyRequestsLegacy);
revokeRuntimePermissionInternal(permInfo.name, newPackage.getPackageName(),
revokeRuntimePermissionInternal(newPackage.getPackageName(), permInfo.name,
false, callingUid, userId, null, mDefaultPermissionCallback);
}
@@ -2266,7 +2264,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
mPackageManagerInt.forEachPackage(pkg -> {
final String packageName = pkg.getPackageName();
for (final int userId : userIds) {
final int permissionState = checkPermission(permissionName, packageName,
final int permissionState = checkPermission(packageName, permissionName,
userId);
if (permissionState == PackageManager.PERMISSION_GRANTED) {
EventLog.writeEvent(0x534e4554, "72710897",
@@ -2277,7 +2275,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
" to " + newPermissionGroupName);
try {
revokeRuntimePermissionInternal(permissionName, packageName,
revokeRuntimePermissionInternal(packageName, permissionName,
false, callingUid, userId, null,
mDefaultPermissionCallback);
} catch (IllegalArgumentException e) {
@@ -2320,9 +2318,9 @@ public class PermissionManagerService extends IPermissionManager.Stub {
return;
}
for (final int userId : userIds) {
final int permissionState = checkPermissionImpl(permName, packageName,
final int permissionState = checkPermissionImpl(packageName, permName,
userId);
final int flags = getPermissionFlags(permName, packageName, userId);
final int flags = getPermissionFlags(packageName, permName, userId);
final int flagMask = FLAG_PERMISSION_SYSTEM_FIXED
| FLAG_PERMISSION_POLICY_FIXED
| FLAG_PERMISSION_GRANTED_BY_DEFAULT
@@ -2339,7 +2337,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
Slog.e(TAG, "Revoking permission " + permName + " from package "
+ packageName + " due to definition change");
try {
revokeRuntimePermissionInternal(permName, packageName,
revokeRuntimePermissionInternal(packageName, permName,
false, callingUid, userId, null, mDefaultPermissionCallback);
} catch (Exception e) {
Slog.e(TAG, "Could not revoke " + permName + " from "
@@ -3694,19 +3692,19 @@ public class PermissionManagerService extends IPermissionManager.Stub {
&& (permissions == null || permissions.contains(permission));
}
if (shouldGrantPermission) {
final int flags = getPermissionFlagsInternal(permission, pkg.getPackageName(),
final int flags = getPermissionFlagsInternal(pkg.getPackageName(), permission,
myUid, userId);
if (supportsRuntimePermissions) {
// Installer cannot change immutable permissions.
if ((flags & immutableFlags) == 0) {
grantRuntimePermissionInternal(permission, pkg.getPackageName(), false,
grantRuntimePermissionInternal(pkg.getPackageName(), permission, false,
myUid, userId, mDefaultPermissionCallback);
}
} else {
// In permission review mode we clear the review flag and the revoked compat
// flag when we are asked to install the app with all permissions granted.
if ((flags & compatFlags) != 0) {
updatePermissionFlagsInternal(permission, pkg.getPackageName(), compatFlags,
updatePermissionFlagsInternal(pkg.getPackageName(), permission, compatFlags,
0, myUid, userId, false, mDefaultPermissionCallback);
}
}
@@ -3748,8 +3746,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
oldGrantedRestrictedPermissions.add(permissionName);
}
final int oldFlags = getPermissionFlagsInternal(permissionName,
pkg.getPackageName(), myUid, userId);
final int oldFlags = getPermissionFlagsInternal(pkg.getPackageName(), permissionName,
myUid, userId);
int newFlags = oldFlags;
int mask = 0;
@@ -3827,7 +3825,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
newFlags |= PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED;
}
updatePermissionFlagsInternal(permissionName, pkg.getPackageName(), mask, newFlags,
updatePermissionFlagsInternal(pkg.getPackageName(), permissionName, mask, newFlags,
myUid, userId, false, null /*callback*/);
}
@@ -4239,12 +4237,11 @@ public class PermissionManagerService extends IPermissionManager.Stub {
return;
}
if (checkPermissionImpl(permissionName, pName, userId)
if (checkPermissionImpl(pName, permissionName, userId)
== PackageManager.PERMISSION_GRANTED) {
try {
revokeRuntimePermissionInternal(
permissionName,
pName,
pName, permissionName,
overridePolicy,
Process.SYSTEM_UID,
userId,
@@ -4927,13 +4924,13 @@ public class PermissionManagerService extends IPermissionManager.Stub {
@Override
public int checkPermission(@NonNull String packageName, @NonNull String permissionName,
@UserIdInt int userId) {
return PermissionManagerService.this.checkPermission(permissionName, packageName,
return PermissionManagerService.this.checkPermission(packageName, permissionName,
userId);
}
@Override
public int checkUidPermission(int uid, @NonNull String permissionName) {
return PermissionManagerService.this.checkUidPermission(permissionName, uid);
return PermissionManagerService.this.checkUidPermission(uid, permissionName);
}
@Override
@@ -5253,8 +5250,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
/**
* Check whether the given package has been granted the specified permission.
*
* @param permissionName the name of the permission to be checked
* @param packageName the name of the package to be checked
* @param permissionName the name of the permission to be checked
* @param userId the user ID
* @param superImpl the original implementation that can be delegated to
* @return {@link android.content.pm.PackageManager.PERMISSION_GRANTED} if the package has
@@ -5262,21 +5259,21 @@ public class PermissionManagerService extends IPermissionManager.Stub {
*
* @see android.content.pm.PackageManager#checkPermission(String, String)
*/
int checkPermission(@NonNull String permissionName, @NonNull String packageName,
int checkPermission(@NonNull String packageName, @NonNull String permissionName,
@UserIdInt int userId,
@NonNull TriFunction<String, String, Integer, Integer> superImpl);
/**
* Check whether the given UID has been granted the specified permission.
*
* @param permissionName the name of the permission to be checked
* @param uid the UID to be checked
* @param permissionName the name of the permission to be checked
* @param superImpl the original implementation that can be delegated to
* @return {@link android.content.pm.PackageManager.PERMISSION_GRANTED} if the package has
* the permission, or {@link android.content.pm.PackageManager.PERMISSION_DENITED} otherwise
*/
int checkUidPermission(@NonNull String permissionName, int uid,
BiFunction<String, Integer, Integer> superImpl);
int checkUidPermission(int uid, @NonNull String permissionName,
BiFunction<Integer, String, Integer> superImpl);
}
private class ShellDelegate implements CheckPermissionDelegate {
@@ -5299,32 +5296,32 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
@Override
public int checkPermission(@NonNull String permissionName, @NonNull String packageName,
public int checkPermission(@NonNull String packageName, @NonNull String permissionName,
int userId, @NonNull TriFunction<String, String, Integer, Integer> superImpl) {
if (mDelegatedPackageName.equals(packageName)
&& isDelegatedPermission(permissionName)) {
final long identity = Binder.clearCallingIdentity();
try {
return superImpl.apply(permissionName, "com.android.shell", userId);
return superImpl.apply("com.android.shell", permissionName, userId);
} finally {
Binder.restoreCallingIdentity(identity);
}
}
return superImpl.apply(permissionName, packageName, userId);
return superImpl.apply(packageName, permissionName, userId);
}
@Override
public int checkUidPermission(@NonNull String permissionName, int uid,
@NonNull BiFunction<String, Integer, Integer> superImpl) {
public int checkUidPermission(int uid, @NonNull String permissionName,
@NonNull BiFunction<Integer, String, Integer> superImpl) {
if (uid == mDelegatedUid && isDelegatedPermission(permissionName)) {
final long identity = Binder.clearCallingIdentity();
try {
return superImpl.apply(permissionName, Process.SHELL_UID);
return superImpl.apply(Process.SHELL_UID, permissionName);
} finally {
Binder.restoreCallingIdentity(identity);
}
}
return superImpl.apply(permissionName, uid);
return superImpl.apply(uid, permissionName);
}
private boolean isDelegatedPermission(@NonNull String permissionName) {