diff options
author | Ruslan Tkhakokhov <rthakohov@google.com> | 2019-10-07 14:40:40 +0100 |
---|---|---|
committer | Al Sutton <alsutton@google.com> | 2019-10-16 08:58:01 +0000 |
commit | 004e85f798dc88265edffebeba66da4efaeb2735 (patch) | |
tree | 2cdf9a14531ded14fa1d9703c9c7346892ebe14a /packages/LocalTransport | |
parent | d0844929a335bfe2df33e3257acc35d217659d66 (diff) |
Route EncryptedLocalTransport KV backup/restore through encryption code
Bug: 142227548
Test: Verify the device boots successfully
Verify EncryptedLocalTransport APK is present
Verify manual backup/restore using bmgr for LocalTransport and EncryptedLocalTransport
For LocalTransport (unencrypted) and EncryptedLocalTransport:
atest CtsBackupTestCases
atest CtsBackupHostTestCases
atest GtsBackupTestCases
atest GtsBackupHostTestCases
Change-Id: Iac3a8a50d7f761442a4b784cfba3a980e900dd7f
Diffstat (limited to 'packages/LocalTransport')
-rw-r--r-- | packages/LocalTransport/src/com/android/localtransport/LocalTransport.java | 53 | ||||
-rw-r--r-- | packages/LocalTransport/src/com/android/localtransport/LocalTransportParameters.java | 4 |
2 files changed, 32 insertions, 25 deletions
diff --git a/packages/LocalTransport/src/com/android/localtransport/LocalTransport.java b/packages/LocalTransport/src/com/android/localtransport/LocalTransport.java index 4408ef5a2c75..42cd50003f7a 100644 --- a/packages/LocalTransport/src/com/android/localtransport/LocalTransport.java +++ b/packages/LocalTransport/src/com/android/localtransport/LocalTransport.java @@ -71,19 +71,19 @@ public class LocalTransport extends BackupTransport { // Size quotas at reasonable values, similar to the current cloud-storage limits private static final long FULL_BACKUP_SIZE_QUOTA = 25 * 1024 * 1024; - private static final long KEY_VALUE_BACKUP_SIZE_QUOTA = 5 * 1024 * 1024; + protected static final long KEY_VALUE_BACKUP_SIZE_QUOTA = 5 * 1024 * 1024; private Context mContext; private File mDataDir; private File mCurrentSetDir; - private File mCurrentSetIncrementalDir; + protected File mCurrentSetIncrementalDir; private File mCurrentSetFullDir; - private PackageInfo[] mRestorePackages = null; - private int mRestorePackage = -1; // Index into mRestorePackages - private int mRestoreType; + protected PackageInfo[] mRestorePackages = null; + protected int mRestorePackage = -1; // Index into mRestorePackages + protected int mRestoreType; private File mRestoreSetDir; - private File mRestoreSetIncrementalDir; + protected File mRestoreSetIncrementalDir; private File mRestoreSetFullDir; // Additional bookkeeping for full backup @@ -115,7 +115,7 @@ public class LocalTransport extends BackupTransport { makeDataDirs(); } - LocalTransportParameters getParameters() { + public LocalTransportParameters getParameters() { return mParameters; } @@ -537,14 +537,14 @@ public class LocalTransport extends BackupTransport { int bytesLeft = numBytes; while (bytesLeft > 0) { try { - int nRead = mSocketInputStream.read(mFullBackupBuffer, 0, bytesLeft); - if (nRead < 0) { - // Something went wrong if we expect data but saw EOD - Log.w(TAG, "Unexpected EOD; failing backup"); - return TRANSPORT_ERROR; - } - mFullBackupOutputStream.write(mFullBackupBuffer, 0, nRead); - bytesLeft -= nRead; + int nRead = mSocketInputStream.read(mFullBackupBuffer, 0, bytesLeft); + if (nRead < 0) { + // Something went wrong if we expect data but saw EOD + Log.w(TAG, "Unexpected EOD; failing backup"); + return TRANSPORT_ERROR; + } + mFullBackupOutputStream.write(mFullBackupBuffer, 0, nRead); + bytesLeft -= nRead; } catch (IOException e) { Log.e(TAG, "Error handling backup data for " + mFullTargetPackage); return TRANSPORT_ERROR; @@ -620,20 +620,15 @@ public class LocalTransport extends BackupTransport { } if (mRestorePackages == null) throw new IllegalStateException("startRestore not called"); - boolean found = false; + boolean found; while (++mRestorePackage < mRestorePackages.length) { String name = mRestorePackages[mRestorePackage].packageName; // If we have key/value data for this package, deliver that // skip packages where we have a data dir but no actual contents - String[] contents = (new File(mRestoreSetIncrementalDir, name)).list(); - if (contents != null && contents.length > 0) { - if (DEBUG) { - Log.v(TAG, " nextRestorePackage(TYPE_KEY_VALUE) @ " - + mRestorePackage + " = " + name); - } + found = hasRestoreDataForPackage(name); + if (found) { mRestoreType = RestoreDescription.TYPE_KEY_VALUE; - found = true; } if (!found) { @@ -664,6 +659,18 @@ public class LocalTransport extends BackupTransport { return RestoreDescription.NO_MORE_PACKAGES; } + protected boolean hasRestoreDataForPackage(String packageName) { + String[] contents = (new File(mRestoreSetIncrementalDir, packageName)).list(); + if (contents != null && contents.length > 0) { + if (DEBUG) { + Log.v(TAG, " nextRestorePackage(TYPE_KEY_VALUE) @ " + + mRestorePackage + " = " + packageName); + } + return true; + } + return false; + } + @Override public int getRestoreData(ParcelFileDescriptor outFd) { if (mRestorePackages == null) throw new IllegalStateException("startRestore not called"); diff --git a/packages/LocalTransport/src/com/android/localtransport/LocalTransportParameters.java b/packages/LocalTransport/src/com/android/localtransport/LocalTransportParameters.java index 784be224f367..8b4db92910f5 100644 --- a/packages/LocalTransport/src/com/android/localtransport/LocalTransportParameters.java +++ b/packages/LocalTransport/src/com/android/localtransport/LocalTransportParameters.java @@ -22,7 +22,7 @@ import android.os.Handler; import android.provider.Settings; import android.util.KeyValueListParser; -class LocalTransportParameters extends KeyValueSettingObserver { +public class LocalTransportParameters extends KeyValueSettingObserver { private static final String TAG = "LocalTransportParams"; private static final String SETTING = Settings.Secure.BACKUP_LOCAL_TRANSPORT_PARAMETERS; private static final String KEY_FAKE_ENCRYPTION_FLAG = "fake_encryption_flag"; @@ -31,7 +31,7 @@ class LocalTransportParameters extends KeyValueSettingObserver { private boolean mFakeEncryptionFlag; private boolean mIsNonIncrementalOnly; - LocalTransportParameters(Handler handler, ContentResolver resolver) { + public LocalTransportParameters(Handler handler, ContentResolver resolver) { super(handler, resolver, Settings.Secure.getUriFor(SETTING)); } |