diff options
-rw-r--r-- | src/mobilebackup2.c | 12 | ||||
-rw-r--r-- | tools/idevicebackup2.c | 25 |
2 files changed, 31 insertions, 6 deletions
diff --git a/src/mobilebackup2.c b/src/mobilebackup2.c index 577901e..350fa3e 100644 --- a/src/mobilebackup2.c +++ b/src/mobilebackup2.c @@ -459,9 +459,15 @@ mobilebackup2_error_t mobilebackup2_send_request(mobilebackup2_client_t client, plist_dict_insert_item(dict, "Options", plist_copy(options)); } if (!strcmp(request, "Unback") && options) { - plist_t password = plist_dict_get_item(options, "Password"); - if (password) { - plist_dict_insert_item(dict, "Password", plist_copy(password)); + plist_t node = plist_dict_get_item(options, "Password"); + if (node) { + plist_dict_insert_item(dict, "Password", plist_copy(node)); + } + } + if (!strcmp(request, "EnableCloudBackup") && options) { + plist_t node = plist_dict_get_item(options, "CloudBackupState"); + if (node) { + plist_dict_insert_item(dict, "CloudBackupState", plist_copy(node)); } } mobilebackup2_error_t err = mobilebackup2_send_message(client, request, dict); diff --git a/tools/idevicebackup2.c b/tools/idevicebackup2.c index 47de171..b62a77b 100644 --- a/tools/idevicebackup2.c +++ b/tools/idevicebackup2.c @@ -88,7 +88,8 @@ enum cmd_flags { CMD_FLAG_ENCRYPTION_ENABLE = (1 << 6), CMD_FLAG_ENCRYPTION_DISABLE = (1 << 7), CMD_FLAG_ENCRYPTION_CHANGEPW = (1 << 8), - CMD_FLAG_FORCE_FULL_BACKUP = (1 << 9) + CMD_FLAG_FORCE_FULL_BACKUP = (1 << 9), + CMD_FLAG_ENABLE_CLOUD_BACKUP = (1 << 10) }; static int backup_domain_changed = 0; @@ -1280,6 +1281,7 @@ static void print_usage(int argc, char **argv) printf(" -u, --udid UDID\ttarget specific device by its 40-digit device UDID\n"); printf(" -s, --source UDID\tuse backup data from device specified by UDID\n"); printf(" -i, --interactive\trequest passwords interactively\n"); + printf(" -c, --cloud\t\tUse cloud storage using iCloud account of device\n"); printf(" -h, --help\t\tprints usage information\n"); printf("\n"); } @@ -1377,6 +1379,9 @@ int main(int argc, char *argv[]) backup_password = strdup(argv[i]); continue; } + else if (!strcmp(argv[i], "-c") || !strcmp(argv[i], "--cloud")) { + cmd_flags |= CMD_FLAG_ENABLE_CLOUD_BACKUP; + } else if (!strcmp(argv[i], "--full")) { cmd_flags |= CMD_FLAG_FORCE_FULL_BACKUP; } @@ -1400,9 +1405,9 @@ int main(int argc, char *argv[]) return -1; } if (!strcmp(argv[i], "on")) { - cmd_flags |= CMD_FLAG_ENCRYPTION_ENABLE; + cmd_flags |= CMD_FLAG_ENCRYPTION_ENABLE; } else if (!strcmp(argv[i], "off")) { - cmd_flags |= CMD_FLAG_ENCRYPTION_DISABLE; + cmd_flags |= CMD_FLAG_ENCRYPTION_DISABLE; } else { printf("Invalid argument '%s' for encryption command; must be either 'on' or 'off'.\n", argv[i]); } @@ -1648,6 +1653,20 @@ int main(int argc, char *argv[]) } } + opts = plist_new_dict(); + if (cmd_flags & CMD_FLAG_ENABLE_CLOUD_BACKUP) { + PRINT_VERBOSE(1, "Enabling cloud backup for device...\n"); + } else { + PRINT_VERBOSE(1, "Disabling cloud backup for device...\n"); + } + plist_dict_insert_item(opts, "CloudBackupState", plist_new_bool(cmd & CMD_FLAG_ENABLE_CLOUD_BACKUP ? 1: 0)); + err = mobilebackup2_send_request(mobilebackup2, "EnableCloudBackup", udid, source_udid, opts); + plist_free(opts); + if (err != MOBILEBACKUP2_E_SUCCESS) { + printf("Error setting cloud backup state on device, error code %d\n", err); + cmd = CMD_LEAVE; + } + uint64_t lockfile = 0; if (cmd == CMD_BACKUP) { do_post_notification(device, NP_SYNC_WILL_START); |