Merge "Use granted userId to look up provider info" into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f9f2c7ceef
@@ -1819,6 +1819,7 @@ public abstract class ContentResolver {
|
||||
* calling app. That is, the returned permissions have been granted
|
||||
* <em>to</em> the calling app. Only persistable grants taken with
|
||||
* {@link #takePersistableUriPermission(Uri, int)} are returned.
|
||||
* <p>Note: Some of the returned URIs may not be usable until after the user is unlocked.
|
||||
*
|
||||
* @see #takePersistableUriPermission(Uri, int)
|
||||
* @see #releasePersistableUriPermission(Uri, int)
|
||||
@@ -1837,6 +1838,7 @@ public abstract class ContentResolver {
|
||||
* calling app. That is, the returned permissions have been granted
|
||||
* <em>from</em> the calling app. Only grants taken with
|
||||
* {@link #takePersistableUriPermission(Uri, int)} are returned.
|
||||
* <p>Note: Some of the returned URIs may not be usable until after the user is unlocked.
|
||||
*/
|
||||
public @NonNull List<UriPermission> getOutgoingPersistedUriPermissions() {
|
||||
try {
|
||||
|
||||
@@ -8337,7 +8337,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
final IPackageManager pm = AppGlobals.getPackageManager();
|
||||
final String authority = grantUri.uri.getAuthority();
|
||||
final ProviderInfo pi = getProviderInfoLocked(authority, grantUri.sourceUserId,
|
||||
MATCH_DEBUG_TRIAGED_MISSING);
|
||||
MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE);
|
||||
if (pi == null) {
|
||||
Slog.w(TAG, "No content provider found for permission revoke: "
|
||||
+ grantUri.toSafeString());
|
||||
@@ -8435,7 +8435,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
|
||||
final String authority = uri.getAuthority();
|
||||
final ProviderInfo pi = getProviderInfoLocked(authority, userId,
|
||||
MATCH_DEBUG_TRIAGED_MISSING);
|
||||
MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE);
|
||||
if (pi == null) {
|
||||
Slog.w(TAG, "No content provider found for permission revoke: "
|
||||
+ uri.toSafeString());
|
||||
@@ -8832,10 +8832,11 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
Preconditions.checkNotNull(packageName, "packageName");
|
||||
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
final int callingUserId = UserHandle.getUserId(callingUid);
|
||||
final IPackageManager pm = AppGlobals.getPackageManager();
|
||||
try {
|
||||
final int packageUid = pm.getPackageUid(packageName, MATCH_DEBUG_TRIAGED_MISSING,
|
||||
UserHandle.getUserId(callingUid));
|
||||
final int packageUid = pm.getPackageUid(packageName,
|
||||
MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE, callingUserId);
|
||||
if (packageUid != callingUid) {
|
||||
throw new SecurityException(
|
||||
"Package " + packageName + " does not belong to calling UID " + callingUid);
|
||||
@@ -8852,30 +8853,8 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
if (perms == null) {
|
||||
Slog.w(TAG, "No permission grants found for " + packageName);
|
||||
} else {
|
||||
final int userId = UserHandle.getUserId(callingUid);
|
||||
Set<String> existingAuthorities = null;
|
||||
|
||||
for (UriPermission perm : perms.values()) {
|
||||
if (packageName.equals(perm.targetPkg) && perm.persistedModeFlags != 0) {
|
||||
// Is this provider available in the current boot state? If the user
|
||||
// is not running and unlocked we check if the provider package exists.
|
||||
if (!mUserController.isUserRunningLocked(userId,
|
||||
ActivityManager.FLAG_AND_UNLOCKED)) {
|
||||
String authority = perm.uri.uri.getAuthority();
|
||||
if (existingAuthorities == null
|
||||
|| !existingAuthorities.contains(authority)) {
|
||||
ProviderInfo providerInfo = getProviderInfoLocked(authority,
|
||||
userId, MATCH_DEBUG_TRIAGED_MISSING);
|
||||
if (providerInfo != null) {
|
||||
if (existingAuthorities == null) {
|
||||
existingAuthorities = new ArraySet<>();
|
||||
}
|
||||
existingAuthorities.add(authority);
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
result.add(perm.buildPersistedPublicApiObject());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user