diff options
| author | 2010-01-25 11:35:08 -0800 | |
|---|---|---|
| committer | 2010-01-25 11:35:08 -0800 | |
| commit | da77d0a6e7fe70b7da229077039bcca1f232bd89 (patch) | |
| tree | e573bc47db002de773168ad4ced503e73b6b053d | |
| parent | f1c934f2726a09f11a7126e2a889c97162a2a1e2 (diff) | |
| parent | 1902492420825874b12962a10712e653901d120d (diff) | |
Merge "Make sure to downgrade to app permissions when invoking callbacks"
| -rw-r--r-- | core/java/android/app/BackupAgent.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/core/java/android/app/BackupAgent.java b/core/java/android/app/BackupAgent.java index b20799840946..2a586777ddf3 100644 --- a/core/java/android/app/BackupAgent.java +++ b/core/java/android/app/BackupAgent.java @@ -21,6 +21,7 @@ import android.backup.BackupDataInput; import android.backup.BackupDataOutput; import android.content.Context; import android.content.ContextWrapper; +import android.os.Binder; import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.RemoteException; @@ -116,7 +117,9 @@ public abstract class BackupAgent extends ContextWrapper { public void doBackup(ParcelFileDescriptor oldState, ParcelFileDescriptor data, ParcelFileDescriptor newState) throws RemoteException { - // !!! TODO - real implementation; for now just invoke the callbacks directly + // Ensure that we're running with the app's normal permission level + long token = Binder.clearCallingIdentity(); + if (DEBUG) Log.v(TAG, "doBackup() invoked"); BackupDataOutput output = new BackupDataOutput(data.getFileDescriptor()); try { @@ -127,12 +130,16 @@ public abstract class BackupAgent extends ContextWrapper { } catch (RuntimeException ex) { Log.d(TAG, "onBackup (" + BackupAgent.this.getClass().getName() + ") threw", ex); throw ex; + } finally { + Binder.restoreCallingIdentity(token); } } public void doRestore(ParcelFileDescriptor data, int appVersionCode, ParcelFileDescriptor newState) throws RemoteException { - // !!! TODO - real implementation; for now just invoke the callbacks directly + // Ensure that we're running with the app's normal permission level + long token = Binder.clearCallingIdentity(); + if (DEBUG) Log.v(TAG, "doRestore() invoked"); BackupDataInput input = new BackupDataInput(data.getFileDescriptor()); try { @@ -143,6 +150,8 @@ public abstract class BackupAgent extends ContextWrapper { } catch (RuntimeException ex) { Log.d(TAG, "onRestore (" + BackupAgent.this.getClass().getName() + ") threw", ex); throw ex; + } finally { + Binder.restoreCallingIdentity(token); } } } |