Merge change 4721 into donut

* changes:
  Make signature checks on restore work with unsigned apps
This commit is contained in:
Android (Google) Code Review
2009-06-18 20:49:06 -07:00

View File

@@ -757,6 +757,16 @@ class BackupManagerService extends IBackupManager.Stub {
}
private boolean signaturesMatch(Signature[] storedSigs, Signature[] deviceSigs) {
// Allow unsigned apps, but not signed on one device and unsigned on the other
// !!! TODO: is this the right policy?
if ((storedSigs == null || storedSigs.length == 0)
&& (deviceSigs == null || deviceSigs.length == 0)) {
return true;
}
if (storedSigs == null || deviceSigs == null) {
return false;
}
// !!! TODO: this demands that every stored signature match one
// that is present on device, and does not demand the converse.
// Is this this right policy?
@@ -815,8 +825,6 @@ class BackupManagerService extends IBackupManager.Stub {
}
if (err == 0) {
// !!! TODO: do the package manager signatures restore first
// build the set of apps to restore
try {
RestoreSet[] images = mTransport.getAvailableRestoreSets();
@@ -841,16 +849,11 @@ class BackupManagerService extends IBackupManager.Stub {
// Validate against the backed-up signature block, too
Signature[] storedSigs
= pmAgent.getRestoredSignatures(app.packageName);
if (storedSigs != null) {
// !!! TODO: check app version here as well
if (signaturesMatch(storedSigs, app.signatures)) {
appsToRestore.add(app);
} else {
Log.w(TAG, "Sig mismatch on restore of " + app.packageName);
}
// !!! TODO: check app version here as well
if (signaturesMatch(storedSigs, app.signatures)) {
appsToRestore.add(app);
} else {
Log.i(TAG, "No stored sigs for " + app.packageName
+ " so not restoring");
Log.w(TAG, "Sig mismatch on restore of " + app.packageName);
}
}
}