summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2010-06-04 13:19:57 +0200
committerGravatar Nikias Bassen2010-06-04 13:19:57 +0200
commitfadef8f4ee9e986eeb87de11d752a14c63974f3b (patch)
treeb8beb85b3a6a9035cba1d1fbf79bb3365b70a129
parent25efbcec53dad60019bfae92a8bc9769ed171e56 (diff)
downloadlibimobiledevice-fadef8f4ee9e986eeb87de11d752a14c63974f3b.tar.gz
libimobiledevice-fadef8f4ee9e986eeb87de11d752a14c63974f3b.tar.bz2
idevicebackup: read Status.plist to ensure restoring from successful backup
-rw-r--r--tools/idevicebackup.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/tools/idevicebackup.c b/tools/idevicebackup.c
index 58301f5..04e633e 100644
--- a/tools/idevicebackup.c
+++ b/tools/idevicebackup.c
@@ -269,6 +269,30 @@ static void mobilebackup_write_status(const char *path, int status)
269 g_free(file_path); 269 g_free(file_path);
270} 270}
271 271
272static int mobilebackup_read_status(const char *path)
273{
274 int ret = -1;
275 plist_t status_plist = NULL;
276 gchar *file_path = mobilebackup_build_path(path, "Status", ".plist");
277
278 plist_read_from_filename(&status_plist, file_path);
279 g_free(file_path);
280 if (!status_plist) {
281 printf("Could not read Status.plist!\n");
282 return ret;
283 }
284 plist_t node = plist_dict_get_item(status_plist, "Backup Success");
285 if (node && (plist_get_node_type(node) == PLIST_BOOLEAN)) {
286 uint8_t bval = 0;
287 plist_get_bool_val(node, &bval);
288 ret = bval;
289 } else {
290 printf("%s: ERROR could not get Backup Success key from Status.plist!\n", __func__);
291 }
292 plist_free(status_plist);
293 return ret;
294}
295
272static int mobilebackup_info_is_current_device(plist_t info) 296static int mobilebackup_info_is_current_device(plist_t info)
273{ 297{
274 plist_t value_node = NULL; 298 plist_t value_node = NULL;
@@ -874,6 +898,10 @@ int main(int argc, char *argv[])
874 case CMD_RESTORE: 898 case CMD_RESTORE:
875 /* TODO: verify battery on AC enough battery remaining */ 899 /* TODO: verify battery on AC enough battery remaining */
876 /* verify if Status.plist says we read from an successful backup */ 900 /* verify if Status.plist says we read from an successful backup */
901 if (mobilebackup_read_status(backup_directory) <= 0) {
902 printf("ERROR: Cannot ensure we restore from a successful backup. Aborting.\n");
903 break;
904 }
877 /* now make sure backup integrity is ok! verify all files */ 905 /* now make sure backup integrity is ok! verify all files */
878 /* loop over Files entries in Manifest data plist */ 906 /* loop over Files entries in Manifest data plist */
879 /* make sure both .mddata/.mdinfo files are available for each entry */ 907 /* make sure both .mddata/.mdinfo files are available for each entry */