Loading core/java/android/app/slice/ISliceManager.aidl +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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); } } core/java/android/app/slice/SliceManager.java +4 −2 Original line number Original line Diff line number Diff line Loading @@ -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(); } } Loading Loading @@ -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 + "."); Loading services/core/java/com/android/server/slice/SliceManagerService.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -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; } } Loading @@ -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); Loading Loading @@ -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) { Loading services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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())); Loading Loading
core/java/android/app/slice/ISliceManager.aidl +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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); } }
core/java/android/app/slice/SliceManager.java +4 −2 Original line number Original line Diff line number Diff line Loading @@ -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(); } } Loading Loading @@ -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 + "."); Loading
services/core/java/com/android/server/slice/SliceManagerService.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -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; } } Loading @@ -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); Loading Loading @@ -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) { Loading
services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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())); Loading