summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2012-09-14 13:34:17 -0700
committerChristopher Tate <ctate@google.com>2012-09-14 13:43:16 -0700
commitad9833a77ff4deb5352c67800c2ee62ed6e51356 (patch)
treee6019a70f5a91a9df9a855c2d2e861773f902034 /services/java/com/android/server
parente136a72810197029a01b4e30b2063d9993b7a9ad (diff)
downloadframeworks_base-ad9833a77ff4deb5352c67800c2ee62ed6e51356.zip
frameworks_base-ad9833a77ff4deb5352c67800c2ee62ed6e51356.tar.gz
frameworks_base-ad9833a77ff4deb5352c67800c2ee62ed6e51356.tar.bz2
Get correct user's package info during clip processing
Also clear the binder identity correctly for purposes of doing that query. Bug 7162477 Change-Id: Ie9e43a2d8fc964d1be649887905244dcceaa3c80
Diffstat (limited to 'services/java/com/android/server')
-rw-r--r--services/java/com/android/server/ClipboardService.java18
1 files changed, 13 insertions, 5 deletions
diff --git a/services/java/com/android/server/ClipboardService.java b/services/java/com/android/server/ClipboardService.java
index 0bf7aad..74ec6e2 100644
--- a/services/java/com/android/server/ClipboardService.java
+++ b/services/java/com/android/server/ClipboardService.java
@@ -17,6 +17,7 @@
package com.android.server;
import android.app.ActivityManagerNative;
+import android.app.AppGlobals;
import android.app.IActivityManager;
import android.content.BroadcastReceiver;
import android.content.ClipData;
@@ -26,6 +27,7 @@ import android.content.IOnPrimaryClipChangedListener;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
@@ -120,7 +122,6 @@ public class ClipboardService extends IClipboard.Stub {
private PerUserClipboard getClipboard(int userId) {
synchronized (mClipboards) {
- Slog.i(TAG, "Got clipboard for user=" + userId);
PerUserClipboard puc = mClipboards.get(userId);
if (puc == null) {
puc = new PerUserClipboard(userId);
@@ -255,15 +256,22 @@ public class ClipboardService extends IClipboard.Stub {
}
private final void addActiveOwnerLocked(int uid, String pkg) {
- PackageInfo pi;
+ final IPackageManager pm = AppGlobals.getPackageManager();
+ final int targetUserHandle = UserHandle.getCallingUserId();
+ final long oldIdentity = Binder.clearCallingIdentity();
try {
- pi = mPm.getPackageInfo(pkg, 0);
+ PackageInfo pi = pm.getPackageInfo(pkg, 0, targetUserHandle);
+ if (pi == null) {
+ throw new IllegalArgumentException("Unknown package " + pkg);
+ }
if (!UserHandle.isSameApp(pi.applicationInfo.uid, uid)) {
throw new SecurityException("Calling uid " + uid
+ " does not own package " + pkg);
}
- } catch (NameNotFoundException e) {
- throw new IllegalArgumentException("Unknown package " + pkg, e);
+ } catch (RemoteException e) {
+ // Can't happen; the package manager is in the same process
+ } finally {
+ Binder.restoreCallingIdentity(oldIdentity);
}
PerUserClipboard clipboard = getClipboard();
if (clipboard.primaryClip != null && !clipboard.activePermissionOwners.contains(pkg)) {