Merge "Default grants: handle update system packages" into mnc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
393c7fb2c6
@@ -170,29 +170,22 @@ final class DefaultPermissionGrantPolicy {
|
|||||||
|
|
||||||
synchronized (mService.mPackages) {
|
synchronized (mService.mPackages) {
|
||||||
for (PackageParser.Package pkg : mService.mPackages.values()) {
|
for (PackageParser.Package pkg : mService.mPackages.values()) {
|
||||||
if (!isSysComponentOrPersistentPlatformSignedPrivApp(pkg)
|
if (!isSysComponentOrPersistentPlatformSignedPrivAppLPr(pkg)
|
||||||
|| !doesPackageSupportRuntimePermissions(pkg)) {
|
|| !doesPackageSupportRuntimePermissions(pkg)
|
||||||
|
|| pkg.requestedPermissions.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Set<String> permissions = new ArraySet<>();
|
||||||
final int permissionCount = pkg.requestedPermissions.size();
|
final int permissionCount = pkg.requestedPermissions.size();
|
||||||
for (int i = 0; i < permissionCount; i++) {
|
for (int i = 0; i < permissionCount; i++) {
|
||||||
String permission = pkg.requestedPermissions.get(i);
|
String permission = pkg.requestedPermissions.get(i);
|
||||||
BasePermission bp = mService.mSettings.mPermissions.get(permission);
|
BasePermission bp = mService.mSettings.mPermissions.get(permission);
|
||||||
if (bp != null && bp.isRuntime()) {
|
if (bp != null && bp.isRuntime()) {
|
||||||
final int flags = mService.getPermissionFlags(permission,
|
permissions.add(permission);
|
||||||
pkg.packageName, userId);
|
|
||||||
if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) == 0) {
|
|
||||||
mService.grantRuntimePermission(pkg.packageName, permission, userId);
|
|
||||||
mService.updatePermissionFlags(permission, pkg.packageName,
|
|
||||||
PackageManager.MASK_PERMISSION_FLAGS,
|
|
||||||
PackageManager.FLAG_PERMISSION_SYSTEM_FIXED
|
|
||||||
| PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT, userId);
|
|
||||||
if (DEBUG) {
|
|
||||||
Log.i(TAG, "Granted " + permission + " to system component "
|
|
||||||
+ pkg.packageName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!permissions.isEmpty()) {
|
||||||
|
grantRuntimePermissionsLPw(pkg, permissions, true, userId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -739,7 +732,7 @@ final class DefaultPermissionGrantPolicy {
|
|||||||
private PackageParser.Package getSystemPackageLPr(String packageName) {
|
private PackageParser.Package getSystemPackageLPr(String packageName) {
|
||||||
PackageParser.Package pkg = getPackageLPr(packageName);
|
PackageParser.Package pkg = getPackageLPr(packageName);
|
||||||
if (pkg != null && pkg.isSystemApp()) {
|
if (pkg != null && pkg.isSystemApp()) {
|
||||||
return !isSysComponentOrPersistentPlatformSignedPrivApp(pkg) ? pkg : null;
|
return !isSysComponentOrPersistentPlatformSignedPrivAppLPr(pkg) ? pkg : null;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -756,18 +749,36 @@ final class DefaultPermissionGrantPolicy {
|
|||||||
|
|
||||||
private void grantRuntimePermissionsLPw(PackageParser.Package pkg, Set<String> permissions,
|
private void grantRuntimePermissionsLPw(PackageParser.Package pkg, Set<String> permissions,
|
||||||
boolean systemFixed, boolean overrideUserChoice, int userId) {
|
boolean systemFixed, boolean overrideUserChoice, int userId) {
|
||||||
|
if (pkg.requestedPermissions.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
List<String> requestedPermissions = pkg.requestedPermissions;
|
List<String> requestedPermissions = pkg.requestedPermissions;
|
||||||
|
Set<String> grantablePermissions = null;
|
||||||
|
|
||||||
if (pkg.isUpdatedSystemApp()) {
|
if (pkg.isUpdatedSystemApp()) {
|
||||||
PackageSetting sysPs = mService.mSettings.getDisabledSystemPkgLPr(pkg.packageName);
|
PackageSetting sysPs = mService.mSettings.getDisabledSystemPkgLPr(pkg.packageName);
|
||||||
if (sysPs != null) {
|
if (sysPs != null) {
|
||||||
|
if (sysPs.pkg.requestedPermissions.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!requestedPermissions.equals(sysPs.pkg.requestedPermissions)) {
|
||||||
|
grantablePermissions = new ArraySet<>(requestedPermissions);
|
||||||
requestedPermissions = sysPs.pkg.requestedPermissions;
|
requestedPermissions = sysPs.pkg.requestedPermissions;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final int permissionCount = requestedPermissions.size();
|
final int grantablePermissionCount = requestedPermissions.size();
|
||||||
for (int i = 0; i < permissionCount; i++) {
|
for (int i = 0; i < grantablePermissionCount; i++) {
|
||||||
String permission = requestedPermissions.get(i);
|
String permission = requestedPermissions.get(i);
|
||||||
|
|
||||||
|
// If there is a disabled system app it may request a permission the updated
|
||||||
|
// version ot the data partition doesn't, In this case skip the permission.
|
||||||
|
if (grantablePermissions != null && !grantablePermissions.contains(permission)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (permissions.contains(permission)) {
|
if (permissions.contains(permission)) {
|
||||||
final int flags = mService.getPermissionFlags(permission, pkg.packageName, userId);
|
final int flags = mService.getPermissionFlags(permission, pkg.packageName, userId);
|
||||||
|
|
||||||
@@ -803,12 +814,19 @@ final class DefaultPermissionGrantPolicy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isSysComponentOrPersistentPlatformSignedPrivApp(PackageParser.Package pkg) {
|
private boolean isSysComponentOrPersistentPlatformSignedPrivAppLPr(PackageParser.Package pkg) {
|
||||||
if (UserHandle.getAppId(pkg.applicationInfo.uid) < FIRST_APPLICATION_UID) {
|
if (UserHandle.getAppId(pkg.applicationInfo.uid) < FIRST_APPLICATION_UID) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if ((pkg.applicationInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) == 0
|
if (!pkg.isPrivilegedApp()) {
|
||||||
|| (pkg.applicationInfo.flags & ApplicationInfo.FLAG_PERSISTENT) == 0) {
|
return false;
|
||||||
|
}
|
||||||
|
PackageSetting sysPkg = mService.mSettings.getDisabledSystemPkgLPr(pkg.packageName);
|
||||||
|
if (sysPkg != null) {
|
||||||
|
if ((sysPkg.pkg.applicationInfo.flags & ApplicationInfo.FLAG_PERSISTENT) == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_PERSISTENT) == 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return PackageManagerService.compareSignatures(mService.mPlatformPackage.mSignatures,
|
return PackageManagerService.compareSignatures(mService.mPlatformPackage.mSignatures,
|
||||||
|
|||||||
Reference in New Issue
Block a user