Merge "Use granted userId to look up provider info" into nyc-dev

This commit is contained in:
Fyodor Kupolov
2016-06-22 22:28:37 +00:00
committed by Android (Google) Code Review
2 changed files with 7 additions and 26 deletions

View File

@@ -1819,6 +1819,7 @@ public abstract class ContentResolver {
* calling app. That is, the returned permissions have been granted * calling app. That is, the returned permissions have been granted
* <em>to</em> the calling app. Only persistable grants taken with * <em>to</em> the calling app. Only persistable grants taken with
* {@link #takePersistableUriPermission(Uri, int)} are returned. * {@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 #takePersistableUriPermission(Uri, int)
* @see #releasePersistableUriPermission(Uri, int) * @see #releasePersistableUriPermission(Uri, int)
@@ -1837,6 +1838,7 @@ public abstract class ContentResolver {
* calling app. That is, the returned permissions have been granted * calling app. That is, the returned permissions have been granted
* <em>from</em> the calling app. Only grants taken with * <em>from</em> the calling app. Only grants taken with
* {@link #takePersistableUriPermission(Uri, int)} are returned. * {@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() { public @NonNull List<UriPermission> getOutgoingPersistedUriPermissions() {
try { try {

View File

@@ -8337,7 +8337,7 @@ public final class ActivityManagerService extends ActivityManagerNative
final IPackageManager pm = AppGlobals.getPackageManager(); final IPackageManager pm = AppGlobals.getPackageManager();
final String authority = grantUri.uri.getAuthority(); final String authority = grantUri.uri.getAuthority();
final ProviderInfo pi = getProviderInfoLocked(authority, grantUri.sourceUserId, final ProviderInfo pi = getProviderInfoLocked(authority, grantUri.sourceUserId,
MATCH_DEBUG_TRIAGED_MISSING); MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE);
if (pi == null) { if (pi == null) {
Slog.w(TAG, "No content provider found for permission revoke: " Slog.w(TAG, "No content provider found for permission revoke: "
+ grantUri.toSafeString()); + grantUri.toSafeString());
@@ -8435,7 +8435,7 @@ public final class ActivityManagerService extends ActivityManagerNative
final String authority = uri.getAuthority(); final String authority = uri.getAuthority();
final ProviderInfo pi = getProviderInfoLocked(authority, userId, final ProviderInfo pi = getProviderInfoLocked(authority, userId,
MATCH_DEBUG_TRIAGED_MISSING); MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE);
if (pi == null) { if (pi == null) {
Slog.w(TAG, "No content provider found for permission revoke: " Slog.w(TAG, "No content provider found for permission revoke: "
+ uri.toSafeString()); + uri.toSafeString());
@@ -8832,10 +8832,11 @@ public final class ActivityManagerService extends ActivityManagerNative
Preconditions.checkNotNull(packageName, "packageName"); Preconditions.checkNotNull(packageName, "packageName");
final int callingUid = Binder.getCallingUid(); final int callingUid = Binder.getCallingUid();
final int callingUserId = UserHandle.getUserId(callingUid);
final IPackageManager pm = AppGlobals.getPackageManager(); final IPackageManager pm = AppGlobals.getPackageManager();
try { try {
final int packageUid = pm.getPackageUid(packageName, MATCH_DEBUG_TRIAGED_MISSING, final int packageUid = pm.getPackageUid(packageName,
UserHandle.getUserId(callingUid)); MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE, callingUserId);
if (packageUid != callingUid) { if (packageUid != callingUid) {
throw new SecurityException( throw new SecurityException(
"Package " + packageName + " does not belong to calling UID " + callingUid); "Package " + packageName + " does not belong to calling UID " + callingUid);
@@ -8852,30 +8853,8 @@ public final class ActivityManagerService extends ActivityManagerNative
if (perms == null) { if (perms == null) {
Slog.w(TAG, "No permission grants found for " + packageName); Slog.w(TAG, "No permission grants found for " + packageName);
} else { } else {
final int userId = UserHandle.getUserId(callingUid);
Set<String> existingAuthorities = null;
for (UriPermission perm : perms.values()) { for (UriPermission perm : perms.values()) {
if (packageName.equals(perm.targetPkg) && perm.persistedModeFlags != 0) { 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()); result.add(perm.buildPersistedPublicApiObject());
} }
} }