summaryrefslogtreecommitdiffstats
path: root/libs/utils/BackupHelpers.cpp
Commit message (Collapse)AuthorAgeFilesLines
* frameworks/base refactoringMathias Agopian2012-02-201-1591/+0
| | | | | | create the new libandroidfw from parts of libui and libutils Change-Id: I1584995616fff5d527a2aba63921b682a6194d58
* frameworks/base refactoring.Mathias Agopian2012-02-171-1/+1
| | | | | | step 2: move libutils headers to their new home: androidfw Change-Id: I14624ba23db92a81f2cb929f104386e1fab293ef
* libs/utils: replace malloc() + memset() to zero with calloc()Iliyan Malchev2012-02-171-4/+1
| | | | | Change-Id: I8bdf4360147e51e35c162856c9a859aed6acac34 Signed-off-by: Iliyan Malchev <malchev@google.com>
* Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF) DO NOT MERGESteve Block2012-01-081-7/+7
| | | | | | | See https://android-git.corp.google.com/g/#/c/157220 Bug: 5449033 Change-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c
* Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF) DO NOT MERGESteve Block2012-01-061-14/+14
| | | | | | | See https://android-git.corp.google.com/g/157065 Bug: 5449033 Change-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69
* Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF) DO NOT MERGESteve Block2012-01-041-1/+1
| | | | | | | See https://android-git.corp.google.com/g/156801 Bug: 5449033 Change-Id: Ib08fe86d23db91ee153e9f91a99a35c42b9208ea
* Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF) DO NOT MERGESteve Block2012-01-031-1/+1
| | | | | | | See https://android-git.corp.google.com/g/156016 Bug: 5449033 Change-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298
* Compress the backup output streamChristopher Tate2011-07-131-4/+12
| | | | | | | | | | Zlib compression, with a full flush between each application's data. Encryption will be performed on the already-compressed data once that's implemented. On restore, the streamed data is similarly uncompressed on the fly. Change-Id: I19b65c88e759a66527d10913d18fffa9df0bc011
* Fix handling of directory entriesChristopher Tate2011-06-081-0/+1
| | | | | | | | | | | Don't emit tar blocks for directories with an invalid nonzero size. Also, if such an entry is encountered during restore, don't actually attempt to treat it as valid and thus skip over the next actual tar entry. This patch also adds tracking of the data actually consumed during restore, and reports a total at the end of stream. Change-Id: I625173f76df3c007e899209101ff2b587841f184
* Fix embedded spaces in tar stream EVEN HARDERChristopher Tate2011-06-071-2/+2
| | | | Change-Id: I97ac586ff3541a05d73e1e53f680517c15e6c662
* Implement shared-storage full backup/restoreChristopher Tate2011-06-071-2/+2
| | | | | | | | | | | | | Every available shared-storage volume is backed up, tagged with its ordinal in the set of mounted shared volumes. This is an approximation of "internal + the external card". This lets us restore things to the same volume [or "equivalent" volume, in the case of a cross-model restore] as they originated on. Also fixed a bug in the handling of files/dirs with spaces in their names. Change-Id: I380019da8d0bb5b3699bd7c11eeff621a88e78c3
* Restore from a previous full backup's tarfileChristopher Tate2011-06-011-0/+10
| | | | | | | | | | | | | | | | | | | Usage: adb restore [tarfilename] Restores app data [and installs the apps if necessary from the backup file] captured in a previous invocation of 'adb backup'. The user must explicitly acknowledge the action on-device before it is allowed to proceed; this prevents any "invisible" pushes of content from the host to the device. Known issues: * The settings databases and wallpaper are saved/restored, but lots of other system state is not yet captured in the full backup. This means that for practical purposes this is usable for 3rd party apps at present but not for full-system cloning/imaging. Change-Id: I0c748b645845e7c9178e30bf142857861a64efd3
* Full backup tweaksChristopher Tate2011-05-131-12/+20
| | | | | | | | * provide placeholder UI showing backup/restore start/stop/timeout * don't kill the progress UI in mid stream * tidy up the pax extended header data writing a little Change-Id: Ife0cb78e3facb541d8327f1d5ca5fe77faa6cbca
* Use pax extended tar format to support long filenames etc.Christopher Tate2011-05-121-41/+116
| | | | | | | | | | 'tar' supports only 100-character paths; 'ustar' supports only 155+100 character prefix + paths; neither supports files larger than about 8 gigabytes. We now use the POSIX.1-2001 'pax' extended tar format for those files in the backup stream that are too large or have too-long paths for the 'ustar' format. Change-Id: I2f256823091deaec9b1ccea685d2344753c6cb67
* Full local backup infrastructureChristopher Tate2011-05-101-0/+178
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is the basic infrastructure for pulling a full(*) backup of the device's data over an adb(**) connection to the local device. The basic process consists of these interacting pieces: 1. The framework's BackupManagerService, which coordinates the collection of app data and routing to the destination. 2. A new framework-provided BackupAgent implementation called FullBackupAgent, which is instantiated in the target applications' processes in turn, and knows how to emit a datastream that contains all of the app's saved data files. 3. A new shell-level program called "bu" that is used to bridge from adb to the framework's Backup Manager. 4. adb itself, which now knows how to use 'bu' to kick off a backup operation and pull the resulting data stream to the desktop host. 5. A system-provided application that verifies with the user that an attempted backup/restore operation is in fact expected and to be allowed. The full agent implementation is not used during normal operation of the delta-based app-customized remote backup process. Instead it's used during user-confirmed *full* backup of applications and all their data to a local destination, e.g. via the adb connection. The output format is 'tar'. This makes it very easy for the end user to examine the resulting dataset, e.g. for purpose of extracting files for debug purposes; as well as making it easy to contemplate adding things like a direct gzip stage to the data pipeline during backup/restore. It also makes it convenient to construct and maintain synthetic backup datasets for testing purposes. Within the tar format, certain artificial conventions are used. All files are stored within top-level directories according to their semantic origin: apps/pkgname/a/ : Application .apk file itself apps/pkgname/obb/: The application's associated .obb containers apps/pkgname/f/ : The subtree rooted at the getFilesDir() location apps/pkgname/db/ : The subtree rooted at the getDatabasePath() parent apps/pkgname/sp/ : The subtree rooted at the getSharedPrefsFile() parent apps/pkgname/r/ : Files stored relative to the root of the app's file tree apps/pkgname/c/ : Reserved for the app's getCacheDir() tree; not stored. For each package, the first entry in the tar stream is a file called "_manifest", nominally rooted at apps/pkgname. This file contains some metadata about the package whose data is stored in the archive. The contents of shared storage can optionally be included in the tar stream. It is placed in the synthetic location: shared/... uid/gid are ignored; app uids are assigned at install time, and the app's data is handled from within its own execution environment, so will automatically have the app's correct uid. Forward-locked .apk files are never backed up. System-partition .apk files are not backed up unless they have been overridden by a post-factory upgrade, in which case the current .apk *is* backed up -- i.e. the .apk that matches the on-disk data. The manifest preceding each application's portion of the tar stream provides version numbers and signature blocks for version checking, as well as an indication of whether the restore logic should expect to install the .apk before extracting the data. System packages can designate their own full backup agents. This is to manage things like the settings provider which (a) cannot be shut down on the fly in order to do a clean snapshot of their file trees, and (b) manage data that is not only irrelevant but actively hostile to non-identical devices -- CDMA telephony settings would seriously mess up a GSM device if emplaced there blind, for example. When a full backup or restore is initiated from adb, the system will present a confirmation UI that the user must explicitly respond to within a short [~ 30 seconds] timeout. This is to avoid the possibility of malicious desktop-side software secretly grabbing a copy of all the user's data for nefarious purposes. (*) The backup is not strictly a full mirror. In particular, the settings database is not cloned; it is handled the same way that it is in cloud backup/restore. This is because some settings are actively destructive if cloned onto a different (or especially a different-model) device: telephony settings and AndroidID are good examples of this. (**) On the framework side it doesn't care that it's adb; it just sends the tar stream to a file descriptor. This can easily be retargeted around whatever transport we might decide to use in the future. KNOWN ISSUES: * the security UI is desperately ugly; no proper designs have yet been done for it * restore is not yet implemented * shared storage backup is not yet implemented * symlinks aren't yet handled, though some infrastructure for dealing with them has been put in place. Change-Id: Ia8347611e23b398af36ea22c36dff0a276b1ce91
* Better (and less) logging from backup.Joe Onorato2009-06-261-2/+5
|
* Only report "unknown metadata" once per restore helperChristopher Tate2009-06-241-17/+14
| | | | Also removes the auto-free object, replacing it with direct memory manipulation.
* Put back LOGP -> printf in the backup helper codeChristopher Tate2009-06-241-1/+1
|
* Preserve file access mode when backing up / restoring filesChristopher Tate2009-06-231-13/+89
| | | | | | | | | | | | | | | | This change adds a fixed-size metadata block at the head of each file's content entity. The block is versioned, and fixed-size on the theory that it might be nice to be able to recover the content (if not the full metadata) of the files if we're ever confronted with data backed up some hypothetical future helper that stored expanded metadata. The net effect is that now on restore, we assign the same access mode to the file that it originally had when backed up. Also, some of the code was failing to properly free transient heap-based buffers when it encountered errors. This has been fixed with the addition of a tiny stack-based object whose job it is to free() its designated pointer from its destructor.
* Add file mode to the file-backup saved state blobsChristopher Tate2009-06-231-31/+42
| | | | | | | | | | | | | | | | This change puts the file's access mode into the saved-state blob used by the file backup helpers. The tests have been updated for the new blob content format. What this change *doesn't* do is actually backup/restore the file mode. This change is a prerequisite for that, but mode preservation in backup/restore will require adding metadata to the backup data stream itself, so will be approached a bit more carefully. (Also fixed one outright bug in the test program: ReadEntityData() had been changed to return a ssize_t union of either a byte-count or a negative number indicating error, but the test program was still assuming that nonzero == error, and was spuriously failing.)
* backup stuffJoe Onorato2009-06-181-3/+5
|
* Make RestoreHelper and friends also write out the snapshot state.Joe Onorato2009-06-181-29/+86
|
* checkpoint BackupDatAInput / RestoreHelperJoe Onorato2009-06-161-74/+24
|
* Make the file backup helper not crash if a file you requestedJoe Onorato2009-06-111-45/+108
| | | | | can't be stated. This means you don't need to know if the files you are backing up exist or not -- we'll figure it out for you.
* Fix SharedPrefsBackupHelper so it doesn't hard code the paths to the files.Joe Onorato2009-06-111-62/+134
| | | | This took quite a bit of refactoring.
* Fix back_up_files() error detection when opening/CRCing the fileChristopher Tate2009-06-041-1/+2
|
* rename a few files to camel-case, add copyright noticesMathias Agopian2009-06-041-0/+1082