Allow privileged callers to schedule a backup pass for any app.
This commit is contained in:
@@ -850,8 +850,26 @@ class BackupManagerService extends IBackupManager.Stub {
|
|||||||
// a backup pass for each of them.
|
// a backup pass for each of them.
|
||||||
|
|
||||||
Log.d(TAG, "dataChanged packageName=" + packageName);
|
Log.d(TAG, "dataChanged packageName=" + packageName);
|
||||||
|
|
||||||
HashSet<ApplicationInfo> targets = mBackupParticipants.get(Binder.getCallingUid());
|
// If the caller does not hold the BACKUP permission, it can only request a
|
||||||
|
// backup of its own data.
|
||||||
|
HashSet<ApplicationInfo> targets;
|
||||||
|
if ((mContext.checkPermission("android.permission.BACKUP", Binder.getCallingPid(),
|
||||||
|
Binder.getCallingUid())) == PackageManager.PERMISSION_DENIED) {
|
||||||
|
targets = mBackupParticipants.get(Binder.getCallingUid());
|
||||||
|
} else {
|
||||||
|
// a caller with full permission can ask to back up any participating app
|
||||||
|
// !!! TODO: allow backup of ANY app?
|
||||||
|
if (DEBUG) Log.v(TAG, "Privileged caller, allowing backup of other apps");
|
||||||
|
targets = new HashSet<ApplicationInfo>();
|
||||||
|
int N = mBackupParticipants.size();
|
||||||
|
for (int i = 0; i < N; i++) {
|
||||||
|
HashSet<ApplicationInfo> s = mBackupParticipants.valueAt(i);
|
||||||
|
if (s != null) {
|
||||||
|
targets.addAll(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (targets != null) {
|
if (targets != null) {
|
||||||
synchronized (mQueueLock) {
|
synchronized (mQueueLock) {
|
||||||
// Note that this client has made data changes that need to be backed up
|
// Note that this client has made data changes that need to be backed up
|
||||||
|
|||||||
Reference in New Issue
Block a user