Merge "Move all the permissions check up for unmount" into gingerbread

This commit is contained in:
Kenny Root
2010-09-29 07:40:32 -07:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 14 deletions

View File

@ -42,7 +42,7 @@ public class ObbScanner {
final File obbFile = new File(filePath);
if (!obbFile.exists()) {
throw new IllegalArgumentException("OBB file does nto exist: " + filePath);
throw new IllegalArgumentException("OBB file does not exist: " + filePath);
}
final String canonicalFilePath = obbFile.getCanonicalPath();

View File

@ -1451,11 +1451,6 @@ class MountService extends IMountService.Stub
mHandler.sendEmptyMessage(H_UNMOUNT_PM_DONE);
}
private boolean isCallerOwnerOfPackageOrSystem(String packageName) {
final int callerUid = Binder.getCallingUid();
return isUidOwnerOfPackageOrSystem(packageName, callerUid);
}
private boolean isUidOwnerOfPackageOrSystem(String packageName, int callerUid) {
if (callerUid == android.os.Process.SYSTEM_UID) {
return true;
@ -1507,6 +1502,12 @@ class MountService extends IMountService.Stub
waitForReady();
warnOnNotMounted();
if (filename == null) {
throw new IllegalArgumentException("filename cannot be null");
} else if (token == null) {
throw new IllegalArgumentException("token cannot be null");
}
final ObbState obbState;
synchronized (mObbMounts) {
@ -1533,6 +1534,12 @@ class MountService extends IMountService.Stub
}
public void unmountObb(String filename, boolean force, IObbActionListener token) {
if (filename == null) {
throw new IllegalArgumentException("filename cannot be null");
} else if (token == null) {
throw new IllegalArgumentException("token cannot be null");
}
final ObbState obbState;
synchronized (mObbMounts) {
@ -1540,6 +1547,12 @@ class MountService extends IMountService.Stub
throw new IllegalArgumentException("OBB is not mounted");
}
obbState = mObbPathToStateMap.get(filename);
if (Binder.getCallingUid() != obbState.callerUid) {
throw new SecurityException("caller UID does not match original mount caller UID");
} else if (!token.asBinder().equals(obbState.token.asBinder())) {
throw new SecurityException("caller does not match original mount caller");
}
}
UnmountObbAction action = new UnmountObbAction(obbState, force);
@ -1758,9 +1771,9 @@ class MountService extends IMountService.Stub
}
public void handleExecute() throws RemoteException, IOException {
ObbInfo obbInfo = mContainerService.getObbInfo(mObbState.filename);
final ObbInfo obbInfo = mContainerService.getObbInfo(mObbState.filename);
if (obbInfo == null) {
throw new IOException("Couldn't read OBB file");
throw new IOException("Couldn't read OBB file: " + mObbState.filename);
}
if (!isUidOwnerOfPackageOrSystem(obbInfo.packageName, mObbState.callerUid)) {
@ -1833,13 +1846,9 @@ class MountService extends IMountService.Stub
}
public void handleExecute() throws RemoteException, IOException {
ObbInfo obbInfo = mContainerService.getObbInfo(mObbState.filename);
final ObbInfo obbInfo = mContainerService.getObbInfo(mObbState.filename);
if (obbInfo == null) {
throw new IOException("Couldn't read OBB file");
}
if (!isCallerOwnerOfPackageOrSystem(obbInfo.packageName)) {
throw new IllegalArgumentException("Caller package does not match OBB file");
throw new IOException("Couldn't read OBB file: " + mObbState.filename);
}
int rc = StorageResultCode.OperationSucceeded;