From 72638b6437822300fefd77569d98fbad3dad5c28 Mon Sep 17 00:00:00 2001 From: Gabriele M Date: Tue, 2 Jan 2018 17:47:30 +0100 Subject: Skip decryption when installing mapped zips Decrypting userdata is not needed when installing zips if we have a map of blocks to read, so skip the decryption. This allows to install zips with no user interaction and, more importantly, it allows to install zips on devices where TWRP can't properly decrypt userdata. Remove also the unneeded Mount_All_Storage() call, Install_Command() already mounts the needed partition. Change-Id: I91c69f84ecc2fe41c9567c40649e501af1cfb64a --- openrecoveryscript.cpp | 1 - twrp.cpp | 18 +++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/openrecoveryscript.cpp b/openrecoveryscript.cpp index 92cac0791..d7e4a2332 100644 --- a/openrecoveryscript.cpp +++ b/openrecoveryscript.cpp @@ -141,7 +141,6 @@ int OpenRecoveryScript::run_script_file(void) { if (strcmp(command, "install") == 0) { // Install Zip DataManager::SetValue("tw_action_text2", "Installing Zip"); - PartitionManager.Mount_All_Storage(); ret_val = Install_Command(value); install_cmd = -1; } else if (strcmp(command, "wipe") == 0) { diff --git a/twrp.cpp b/twrp.cpp index f72d691e8..c46d6555d 100644 --- a/twrp.cpp +++ b/twrp.cpp @@ -169,6 +169,7 @@ int main(int argc, char **argv) { PartitionManager.Mount_By_Path("/cache", false); bool Shutdown = false; + bool SkipDecryption = false; string Send_Intent = ""; { TWPartition* misc = PartitionManager.Find_Partition_By_Path("/misc"); @@ -203,6 +204,9 @@ int main(int argc, char **argv) { string ORSCommand = "install "; ORSCommand.append(ptr); + // If we have a map of blocks we don't need to mount data. + SkipDecryption = *ptr == '@'; + if (!OpenRecoveryScript::Insert_ORS_Command(ORSCommand)) break; } else @@ -271,12 +275,16 @@ int main(int argc, char **argv) { TWFunc::Update_Log_File(); // Offer to decrypt if the device is encrypted if (DataManager::GetIntValue(TW_IS_ENCRYPTED) != 0) { - LOGINFO("Is encrypted, do decrypt page first\n"); - if (gui_startPage("decrypt", 1, 1) != 0) { - LOGERR("Failed to start decrypt GUI page.\n"); + if (SkipDecryption) { + LOGINFO("Skipping decryption\n"); } else { - // Check for and load custom theme if present - gui_loadCustomResources(); + LOGINFO("Is encrypted, do decrypt page first\n"); + if (gui_startPage("decrypt", 1, 1) != 0) { + LOGERR("Failed to start decrypt GUI page.\n"); + } else { + // Check for and load custom theme if present + gui_loadCustomResources(); + } } } else if (datamedia) { if (tw_get_default_metadata(DataManager::GetSettingsStoragePath().c_str()) != 0) { -- cgit v1.2.3