Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 36524c7d authored by Jason Monk's avatar Jason Monk Committed by Android (Google) Code Review
Browse files

Merge "Fix slice auto grant permissions"

parents 9db0d1b8 fe4885e3
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -33,7 +33,7 @@ interface ISliceManager {
    // Perms.
    // Perms.
    void grantSlicePermission(String callingPkg, String toPkg, in Uri uri);
    void grantSlicePermission(String callingPkg, String toPkg, in Uri uri);
    void revokeSlicePermission(String callingPkg, String toPkg, in Uri uri);
    void revokeSlicePermission(String callingPkg, String toPkg, in Uri uri);
    int checkSlicePermission(in Uri uri, String pkg, int pid, int uid,
    int checkSlicePermission(in Uri uri, String callingPkg, String pkg, int pid, int uid,
            in String[] autoGrantPermissions);
            in String[] autoGrantPermissions);
    void grantPermissionFromUser(in Uri uri, String pkg, String callingPkg, boolean allSlices);
    void grantPermissionFromUser(in Uri uri, String pkg, String callingPkg, boolean allSlices);
}
}
+4 −2
Original line number Original line Diff line number Diff line
@@ -430,7 +430,8 @@ public class SliceManager {
     */
     */
    public @PermissionResult int checkSlicePermission(@NonNull Uri uri, int pid, int uid) {
    public @PermissionResult int checkSlicePermission(@NonNull Uri uri, int pid, int uid) {
        try {
        try {
            return mService.checkSlicePermission(uri, null, pid, uid, null);
            return mService.checkSlicePermission(uri, mContext.getPackageName(), null, pid, uid,
                    null);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
            throw e.rethrowFromSystemServer();
        }
        }
@@ -487,7 +488,8 @@ public class SliceManager {
            if (pkg == null) {
            if (pkg == null) {
                throw new SecurityException("No pkg specified");
                throw new SecurityException("No pkg specified");
            }
            }
            int result = mService.checkSlicePermission(uri, pkg, pid, uid, autoGrantPermissions);
            int result = mService.checkSlicePermission(uri, mContext.getPackageName(), pkg, pid,
                    uid, autoGrantPermissions);
            if (result == PERMISSION_DENIED) {
            if (result == PERMISSION_DENIED) {
                throw new SecurityException("User " + uid + " does not have slice permission for "
                throw new SecurityException("User " + uid + " does not have slice permission for "
                        + uri + ".");
                        + uri + ".");
+5 −5
Original line number Original line Diff line number Diff line
@@ -219,12 +219,12 @@ public class SliceManagerService extends ISliceManager.Stub {
    }
    }


    @Override
    @Override
    public int checkSlicePermission(Uri uri, String pkg, int pid, int uid,
    public int checkSlicePermission(Uri uri, String callingPkg, String pkg, int pid, int uid,
            String[] autoGrantPermissions) {
            String[] autoGrantPermissions) {
        int userId = UserHandle.getUserId(uid);
        int userId = UserHandle.getUserId(uid);
        if (pkg == null) {
        if (pkg == null) {
            for (String p : mContext.getPackageManager().getPackagesForUid(uid)) {
            for (String p : mContext.getPackageManager().getPackagesForUid(uid)) {
                if (checkSlicePermission(uri, p, pid, uid, autoGrantPermissions)
                if (checkSlicePermission(uri, callingPkg, p, pid, uid, autoGrantPermissions)
                        == PERMISSION_GRANTED) {
                        == PERMISSION_GRANTED) {
                    return PERMISSION_GRANTED;
                    return PERMISSION_GRANTED;
                }
                }
@@ -237,9 +237,9 @@ public class SliceManagerService extends ISliceManager.Stub {
        if (mPermissions.hasPermission(pkg, userId, uri)) {
        if (mPermissions.hasPermission(pkg, userId, uri)) {
            return PackageManager.PERMISSION_GRANTED;
            return PackageManager.PERMISSION_GRANTED;
        }
        }
        if (autoGrantPermissions != null) {
        if (autoGrantPermissions != null && callingPkg != null) {
            // Need to own the Uri to call in with permissions to grant.
            // Need to own the Uri to call in with permissions to grant.
            enforceOwner(pkg, uri, userId);
            enforceOwner(callingPkg, uri, userId);
            for (String perm : autoGrantPermissions) {
            for (String perm : autoGrantPermissions) {
                if (mContext.checkPermission(perm, pid, uid) == PERMISSION_GRANTED) {
                if (mContext.checkPermission(perm, pid, uid) == PERMISSION_GRANTED) {
                    int providerUser = ContentProvider.getUserIdFromUri(uri, userId);
                    int providerUser = ContentProvider.getUserIdFromUri(uri, userId);
@@ -391,7 +391,7 @@ public class SliceManagerService extends ISliceManager.Stub {
    }
    }


    protected int checkAccess(String pkg, Uri uri, int uid, int pid) {
    protected int checkAccess(String pkg, Uri uri, int uid, int pid) {
        return checkSlicePermission(uri, pkg, uid, pid, null);
        return checkSlicePermission(uri, null, pkg, uid, pid, null);
    }
    }


    private String getProviderPkg(Uri uri, int user) {
    private String getProviderPkg(Uri uri, int user) {
+2 −1
Original line number Original line Diff line number Diff line
@@ -120,7 +120,8 @@ public class SliceManagerServiceTest extends UiServiceTestCase {
                .thenReturn(PERMISSION_DENIED);
                .thenReturn(PERMISSION_DENIED);
        when(mContextSpy.checkPermission("perm2", Process.myPid(), Process.myUid()))
        when(mContextSpy.checkPermission("perm2", Process.myPid(), Process.myUid()))
                .thenReturn(PERMISSION_GRANTED);
                .thenReturn(PERMISSION_GRANTED);
        mService.checkSlicePermission(TEST_URI, mContext.getPackageName(), Process.myPid(),
        mService.checkSlicePermission(TEST_URI, mContext.getPackageName(),
                mContext.getPackageName(), Process.myPid(),
                Process.myUid(), testPerms);
                Process.myUid(), testPerms);


        verify(mContextSpy).checkPermission(eq("perm1"), eq(Process.myPid()), eq(Process.myUid()));
        verify(mContextSpy).checkPermission(eq("perm1"), eq(Process.myPid()), eq(Process.myUid()));