Merge "Resive SliceManagerService#checkSlicePermission"

This commit is contained in:
Jackal Guo
2022-03-24 00:39:04 +00:00
committed by Android (Google) Code Review
5 changed files with 20 additions and 19 deletions

View File

@@ -33,7 +33,7 @@ interface ISliceManager {
// Perms.
void grantSlicePermission(String callingPkg, String toPkg, in Uri uri);
void revokeSlicePermission(String callingPkg, String toPkg, in Uri uri);
int checkSlicePermission(in Uri uri, String callingPkg, String pkg, int pid, int uid,
int checkSlicePermission(in Uri uri, String callingPkg, int pid, int uid,
in String[] autoGrantPermissions);
void grantPermissionFromUser(in Uri uri, String pkg, String callingPkg, boolean allSlices);
}

View File

@@ -439,8 +439,8 @@ public class SliceManager {
*/
public @PermissionResult int checkSlicePermission(@NonNull Uri uri, int pid, int uid) {
try {
return mService.checkSlicePermission(uri, mContext.getPackageName(), null, pid, uid,
null);
return mService.checkSlicePermission(uri, mContext.getPackageName(), pid, uid,
null /* autoGrantPermissions */);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -488,17 +488,13 @@ public class SliceManager {
* Does the permission check to see if a caller has access to a specific slice.
* @hide
*/
public void enforceSlicePermission(Uri uri, String pkg, int pid, int uid,
String[] autoGrantPermissions) {
public void enforceSlicePermission(Uri uri, int pid, int uid, String[] autoGrantPermissions) {
try {
if (UserHandle.isSameApp(uid, Process.myUid())) {
return;
}
if (pkg == null) {
throw new SecurityException("No pkg specified");
}
int result = mService.checkSlicePermission(uri, mContext.getPackageName(), pkg, pid,
uid, autoGrantPermissions);
int result = mService.checkSlicePermission(uri, mContext.getPackageName(), pid, uid,
autoGrantPermissions);
if (result == PERMISSION_DENIED) {
throw new SecurityException("User " + uid + " does not have slice permission for "
+ uri + ".");

View File

@@ -452,8 +452,8 @@ public abstract class SliceProvider extends ContentProvider {
String pkg = callingPkg != null ? callingPkg
: getContext().getPackageManager().getNameForUid(callingUid);
try {
mSliceManager.enforceSlicePermission(sliceUri, pkg,
callingPid, callingUid, mAutoGrantPermissions);
mSliceManager.enforceSlicePermission(sliceUri, callingPid, callingUid,
mAutoGrantPermissions);
} catch (SecurityException e) {
return createPermissionSlice(getContext(), sliceUri, pkg);
}

View File

@@ -65,7 +65,6 @@ import com.android.internal.app.AssistUtils;
import com.android.server.LocalServices;
import com.android.server.ServiceThread;
import com.android.server.SystemService;
import com.android.server.SystemService.TargetUser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -226,12 +225,18 @@ public class SliceManagerService extends ISliceManager.Stub {
}
@Override
public int checkSlicePermission(Uri uri, String callingPkg, String pkg, int pid, int uid,
public int checkSlicePermission(Uri uri, String callingPkg, int pid, int uid,
String[] autoGrantPermissions) {
return checkSlicePermissionInternal(uri, callingPkg, null /* pkg */, pid, uid,
autoGrantPermissions);
}
private int checkSlicePermissionInternal(Uri uri, String callingPkg, String pkg, int pid,
int uid, String[] autoGrantPermissions) {
int userId = UserHandle.getUserId(uid);
if (pkg == null) {
for (String p : mContext.getPackageManager().getPackagesForUid(uid)) {
if (checkSlicePermission(uri, callingPkg, p, pid, uid, autoGrantPermissions)
if (checkSlicePermissionInternal(uri, callingPkg, p, pid, uid, autoGrantPermissions)
== PERMISSION_GRANTED) {
return PERMISSION_GRANTED;
}
@@ -395,7 +400,8 @@ public class SliceManagerService extends ISliceManager.Stub {
}
protected int checkAccess(String pkg, Uri uri, int uid, int pid) {
return checkSlicePermission(uri, null, pkg, pid, uid, null);
return checkSlicePermissionInternal(uri, null /* callingPkg */, pkg, pid, uid,
null /* autoGrantPermissions */);
}
private String getProviderPkg(Uri uri, int user) {

View File

@@ -122,8 +122,7 @@ public class SliceManagerServiceTest extends UiServiceTestCase {
when(mContextSpy.checkPermission("perm2", Process.myPid(), Process.myUid()))
.thenReturn(PERMISSION_GRANTED);
mService.checkSlicePermission(TEST_URI, mContext.getPackageName(),
mContext.getPackageName(), Process.myPid(),
Process.myUid(), testPerms);
Process.myPid(), Process.myUid(), testPerms);
verify(mContextSpy).checkPermission(eq("perm1"), eq(Process.myPid()), eq(Process.myUid()));
verify(mContextSpy).checkPermission(eq("perm2"), eq(Process.myPid()), eq(Process.myUid()));
@@ -148,7 +147,7 @@ public class SliceManagerServiceTest extends UiServiceTestCase {
private void grantSlicePermission() {
doReturn(PERMISSION_GRANTED).when(mService).checkSlicePermission(
eq(TEST_URI), anyString(), anyString(), anyInt(), anyInt(), any());
eq(TEST_URI), anyString(), anyInt(), anyInt(), any());
doReturn(PERMISSION_GRANTED).when(mService).checkAccess(
anyString(), eq(TEST_URI), anyInt(), anyInt());
}