diff options
| author | 2022-04-22 12:05:34 +0200 | |
|---|---|---|
| committer | 2022-04-22 12:05:34 +0200 | |
| commit | 1f625b2e89b27c391a8c2f4aa9a82630f10abb92 (patch) | |
| tree | 477d38b68d417f9577e89fd4baf74768a1b3ecc4 | |
| parent | 7a0aedc97c66025d678afee66e735b6e3dcf0b9c (diff) | |
| download | libimobiledevice-1f625b2e89b27c391a8c2f4aa9a82630f10abb92.tar.gz libimobiledevice-1f625b2e89b27c391a8c2f4aa9a82630f10abb92.tar.bz2 | |
idevicebackup2: Allow passing backup password via environment variable
| -rw-r--r-- | docs/idevicebackup2.1 | 18 | ||||
| -rw-r--r-- | tools/idevicebackup2.c | 42 |
2 files changed, 53 insertions, 7 deletions
diff --git a/docs/idevicebackup2.1 b/docs/idevicebackup2.1 index ba5ef53..74d1c68 100644 --- a/docs/idevicebackup2.1 +++ b/docs/idevicebackup2.1 | |||
| @@ -62,7 +62,9 @@ remove items which are not being restored. | |||
| 62 | do not trigger re-installation of apps after restore. | 62 | do not trigger re-installation of apps after restore. |
| 63 | .TP | 63 | .TP |
| 64 | .B \t\-\-password PWD | 64 | .B \t\-\-password PWD |
| 65 | supply the password of the source backup. | 65 | supply the password for the encrypted source backup. If omitted, the password |
| 66 | will be requested in interactive mode (\f[B]\-i\f[]), or it can be passed using | ||
| 67 | the environment variable \f[B]BACKUP_PASSWORD\f[]. | ||
| 66 | .TP | 68 | .TP |
| 67 | .B info | 69 | .B info |
| 68 | show details about last completed backup of device. | 70 | show details about last completed backup of device. |
| @@ -74,13 +76,23 @@ list files of last completed backup in CSV format. | |||
| 74 | unpack a completed backup in DIRECTORY/_unback_/ | 76 | unpack a completed backup in DIRECTORY/_unback_/ |
| 75 | .TP | 77 | .TP |
| 76 | .B encryption on|off [PWD] | 78 | .B encryption on|off [PWD] |
| 77 | enable or disable backup encryption. | 79 | enable or disable backup encryption. The password will be requested in |
| 80 | interactive mode (\f[B]\-i\f[]) if omitted, or it can be passed using the | ||
| 81 | environment variable \f[B]BACKUP_PASSWORD\f[]. | ||
| 78 | .TP | 82 | .TP |
| 79 | .B changepw [OLD NEW] | 83 | .B changepw [OLD NEW] |
| 80 | change backup password on target device. | 84 | change backup password on target device. The passwords will be requested in |
| 85 | interactive mode (\f[B]\-i\f[]) if omitted, or they can be passed using the | ||
| 86 | environment variables \f[B]BACKUP_PASSWORD\f[] (old password) and | ||
| 87 | \f[B]BACKUP_PASSWORD_NEW\f[] (new password) respectively. | ||
| 81 | .TP | 88 | .TP |
| 82 | .B cloud on|off | 89 | .B cloud on|off |
| 83 | enable or disable cloud use (requires iCloud account). | 90 | enable or disable cloud use (requires iCloud account). |
| 91 | .SH SECURITY CONSIDERATIONS | ||
| 92 | Passing passwords on the command line is not advised, since it might reveal | ||
| 93 | the backup password to other users via process list or command line history. | ||
| 94 | Use interactive mode (\f[B]\-i\f[]) or pass them via environment variable(s) | ||
| 95 | as mentioned in the description of the respective commands above. | ||
| 84 | .SH AUTHORS | 96 | .SH AUTHORS |
| 85 | Martin Szulecki | 97 | Martin Szulecki |
| 86 | 98 | ||
diff --git a/tools/idevicebackup2.c b/tools/idevicebackup2.c index b024721..7cc0535 100644 --- a/tools/idevicebackup2.c +++ b/tools/idevicebackup2.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * idevicebackup2.c | 2 | * idevicebackup2.c |
| 3 | * Command line interface to use the device's backup and restore service | 3 | * Command line interface to use the device's backup and restore service |
| 4 | * | 4 | * |
| 5 | * Copyright (c) 2010-2019 Nikias Bassen, All Rights Reserved. | 5 | * Copyright (c) 2010-2022 Nikias Bassen, All Rights Reserved. |
| 6 | * Copyright (c) 2009-2010 Martin Szulecki, All Rights Reserved. | 6 | * Copyright (c) 2009-2010 Martin Szulecki, All Rights Reserved. |
| 7 | * | 7 | * |
| 8 | * This library is free software; you can redistribute it and/or | 8 | * This library is free software; you can redistribute it and/or |
| @@ -1433,16 +1433,18 @@ static void print_usage(int argc, char **argv) | |||
| 1433 | printf(" --settings\t\trestore device settings from the backup.\n"); | 1433 | printf(" --settings\t\trestore device settings from the backup.\n"); |
| 1434 | printf(" --remove\t\tremove items which are not being restored\n"); | 1434 | printf(" --remove\t\tremove items which are not being restored\n"); |
| 1435 | printf(" --skip-apps\t\tdo not trigger re-installation of apps after restore\n"); | 1435 | printf(" --skip-apps\t\tdo not trigger re-installation of apps after restore\n"); |
| 1436 | printf(" --password PWD\tsupply the password of the source backup\n"); | 1436 | printf(" --password PWD\tsupply the password for the encrypted source backup\n"); |
| 1437 | printf(" info\t\tshow details about last completed backup of device\n"); | 1437 | printf(" info\t\tshow details about last completed backup of device\n"); |
| 1438 | printf(" list\t\tlist files of last completed backup in CSV format\n"); | 1438 | printf(" list\t\tlist files of last completed backup in CSV format\n"); |
| 1439 | printf(" unback\tunpack a completed backup in DIRECTORY/_unback_/\n"); | 1439 | printf(" unback\tunpack a completed backup in DIRECTORY/_unback_/\n"); |
| 1440 | printf(" encryption on|off [PWD]\tenable or disable backup encryption\n"); | 1440 | printf(" encryption on|off [PWD]\tenable or disable backup encryption\n"); |
| 1441 | printf(" NOTE: password will be requested in interactive mode if omitted\n"); | ||
| 1442 | printf(" changepw [OLD NEW] change backup password on target device\n"); | 1441 | printf(" changepw [OLD NEW] change backup password on target device\n"); |
| 1443 | printf(" NOTE: passwords will be requested in interactive mode if omitted\n"); | ||
| 1444 | printf(" cloud on|off\tenable or disable cloud use (requires iCloud account)\n"); | 1442 | printf(" cloud on|off\tenable or disable cloud use (requires iCloud account)\n"); |
| 1445 | printf("\n"); | 1443 | printf("\n"); |
| 1444 | printf("NOTE: Passwords will be requested in interactive mode (-i) if omitted, or can\n"); | ||
| 1445 | printf("be passed via environment variable BACKUP_PASSWORD/BACKUP_PASSWORD_NEW.\n"); | ||
| 1446 | printf("See man page for further details.\n"); | ||
| 1447 | printf("\n"); | ||
| 1446 | printf("OPTIONS:\n"); | 1448 | printf("OPTIONS:\n"); |
| 1447 | printf(" -u, --udid UDID\ttarget specific device by UDID\n"); | 1449 | printf(" -u, --udid UDID\ttarget specific device by UDID\n"); |
| 1448 | printf(" -s, --source UDID\tuse backup data from device specified by UDID\n"); | 1450 | printf(" -s, --source UDID\tuse backup data from device specified by UDID\n"); |
| @@ -1717,6 +1719,20 @@ int main(int argc, char *argv[]) | |||
| 1717 | uint8_t is_encrypted = 0; | 1719 | uint8_t is_encrypted = 0; |
| 1718 | char *info_path = NULL; | 1720 | char *info_path = NULL; |
| 1719 | if (cmd == CMD_CHANGEPW) { | 1721 | if (cmd == CMD_CHANGEPW) { |
| 1722 | if (!interactive_mode) { | ||
| 1723 | if (!newpw) { | ||
| 1724 | newpw = getenv("BACKUP_PASSWORD_NEW"); | ||
| 1725 | if (newpw) { | ||
| 1726 | newpw = strdup(newpw); | ||
| 1727 | } | ||
| 1728 | } | ||
| 1729 | if (!backup_password) { | ||
| 1730 | backup_password = getenv("BACKUP_PASSWORD"); | ||
| 1731 | if (backup_password) { | ||
| 1732 | backup_password = strdup(backup_password); | ||
| 1733 | } | ||
| 1734 | } | ||
| 1735 | } | ||
| 1720 | if (!interactive_mode && !backup_password && !newpw) { | 1736 | if (!interactive_mode && !backup_password && !newpw) { |
| 1721 | idevice_free(device); | 1737 | idevice_free(device); |
| 1722 | printf("ERROR: Can't get password input in non-interactive mode. Either pass password(s) on the command line, or enable interactive mode with -i or --interactive.\n"); | 1738 | printf("ERROR: Can't get password input in non-interactive mode. Either pass password(s) on the command line, or enable interactive mode with -i or --interactive.\n"); |
| @@ -1758,6 +1774,12 @@ int main(int argc, char *argv[]) | |||
| 1758 | if (cmd != CMD_CLOUD && is_encrypted) { | 1774 | if (cmd != CMD_CLOUD && is_encrypted) { |
| 1759 | PRINT_VERBOSE(1, "This is an encrypted backup.\n"); | 1775 | PRINT_VERBOSE(1, "This is an encrypted backup.\n"); |
| 1760 | if (backup_password == NULL) { | 1776 | if (backup_password == NULL) { |
| 1777 | backup_password = getenv("BACKUP_PASSWORD"); | ||
| 1778 | if (backup_password) { | ||
| 1779 | backup_password = strdup(backup_password); | ||
| 1780 | } | ||
| 1781 | } | ||
| 1782 | if (backup_password == NULL) { | ||
| 1761 | if (interactive_mode) { | 1783 | if (interactive_mode) { |
| 1762 | backup_password = ask_for_password("Enter backup password", 0); | 1784 | backup_password = ask_for_password("Enter backup password", 0); |
| 1763 | } | 1785 | } |
| @@ -2113,6 +2135,12 @@ checkpoint: | |||
| 2113 | if (cmd_flags & CMD_FLAG_ENCRYPTION_ENABLE) { | 2135 | if (cmd_flags & CMD_FLAG_ENCRYPTION_ENABLE) { |
| 2114 | if (!willEncrypt) { | 2136 | if (!willEncrypt) { |
| 2115 | if (!newpw) { | 2137 | if (!newpw) { |
| 2138 | newpw = getenv("BACKUP_PASSWORD"); | ||
| 2139 | if (newpw) { | ||
| 2140 | newpw = strdup(newpw); | ||
| 2141 | } | ||
| 2142 | } | ||
| 2143 | if (!newpw) { | ||
| 2116 | newpw = ask_for_password("Enter new backup password", 1); | 2144 | newpw = ask_for_password("Enter new backup password", 1); |
| 2117 | } | 2145 | } |
| 2118 | if (!newpw) { | 2146 | if (!newpw) { |
| @@ -2129,6 +2157,12 @@ checkpoint: | |||
| 2129 | } else if (cmd_flags & CMD_FLAG_ENCRYPTION_DISABLE) { | 2157 | } else if (cmd_flags & CMD_FLAG_ENCRYPTION_DISABLE) { |
| 2130 | if (willEncrypt) { | 2158 | if (willEncrypt) { |
| 2131 | if (!backup_password) { | 2159 | if (!backup_password) { |
| 2160 | backup_password = getenv("BACKUP_PASSWORD"); | ||
| 2161 | if (backup_password) { | ||
| 2162 | backup_password = strdup(backup_password); | ||
| 2163 | } | ||
| 2164 | } | ||
| 2165 | if (!backup_password) { | ||
| 2132 | backup_password = ask_for_password("Enter current backup password", 0); | 2166 | backup_password = ask_for_password("Enter current backup password", 0); |
| 2133 | } | 2167 | } |
| 2134 | } else { | 2168 | } else { |
