Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 20efdf6b authored by Christopher Tate's avatar Christopher Tate
Browse files

Make signature checks on restore work with unsigned apps

parent 63e7155c
Loading
Loading
Loading
Loading
+14 −11
Original line number Diff line number Diff line
@@ -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,17 +849,12 @@ 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);
                                }
                                } else {
                                    Log.i(TAG, "No stored sigs for " + app.packageName
                                            + " so not restoring");
                                }
                            }
                        }