From 6ef6635ad3d5e8f6440e9ac2b67f1db8589e77b5 Mon Sep 17 00:00:00 2001 From: Dees_Troy Date: Thu, 21 Feb 2013 08:26:57 -0600 Subject: [PATCH] Check for root and root perms and offer to install/fix Also fix sort order for file selector by date and file sizes Change-Id: Idff9fe4232c19d4ed1082e78fabe6f921aa0a114 --- data.cpp | 1 + gui/action.cpp | 56 ++++-- gui/devices/1024x600/res/ui.xml | 156 ++++++++++++++- gui/devices/1024x768/res/ui.xml | 144 ++++++++++++++ gui/devices/1280x800/res/ui.xml | 144 ++++++++++++++ gui/devices/1920x1200/res/ui.xml | 144 ++++++++++++++ gui/devices/2560x1600/res/ui.xml | 144 ++++++++++++++ gui/devices/320x480/res/ui.xml | 150 ++++++++++++++ gui/devices/480x800/res/ui.xml | 150 ++++++++++++++ gui/devices/480x854/res/ui.xml | 150 ++++++++++++++ gui/devices/720x1280/res/ui.xml | 150 ++++++++++++++ gui/devices/800x1280/res/ui.xml | 150 ++++++++++++++ gui/devices/800x480/res/ui.xml | 144 ++++++++++++++ gui/fileselector.cpp | 8 +- gui/gui.cpp | 4 + prebuilt/Android.mk | 20 ++ prebuilt/Superuser.apk | Bin 0 -> 28674 bytes prebuilt/su | Bin 0 -> 96144 bytes recovery.cpp | 31 +++ twrp-functions.cpp | 327 +++++++++++++++++++++++++------ twrp-functions.hpp | 112 ++++++----- 21 files changed, 2039 insertions(+), 146 deletions(-) create mode 100644 prebuilt/Superuser.apk create mode 100755 prebuilt/su diff --git a/data.cpp b/data.cpp index de83d954..18af8cd2 100644 --- a/data.cpp +++ b/data.cpp @@ -855,6 +855,7 @@ void DataManager::SetDefaultValues() mValues.insert(make_pair("tw_background_thread_running", make_pair("0", 0))); mValues.insert(make_pair(TW_RESTORE_FILE_DATE, make_pair("0", 0))); mValues.insert(make_pair("tw_screen_timeout_secs", make_pair("60", 1))); + mValues.insert(make_pair("tw_gui_done", make_pair("0", 0))); #ifdef TW_MAX_BRIGHTNESS if (strcmp(EXPAND(TW_BRIGHTNESS_PATH), "/nobrightness") != 0) { LOGI("TW_BRIGHTNESS_PATH := %s\n", EXPAND(TW_BRIGHTNESS_PATH)); diff --git a/gui/action.cpp b/gui/action.cpp index f1dac1c9..ca968d08 100644 --- a/gui/action.cpp +++ b/gui/action.cpp @@ -341,26 +341,16 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) DataManager::GetValue(TW_SIMULATE_ACTIONS, simulate); - if (function == "reboot") - { - //curtainClose(); this sometimes causes a crash + if (function == "reboot") + { + //curtainClose(); this sometimes causes a crash - sync(); + sync(); + DataManager::SetValue("tw_gui_done", 1); + DataManager::SetValue("tw_reboot_arg", arg); - if (arg == "recovery") - TWFunc::tw_reboot(rb_recovery); - else if (arg == "poweroff") - TWFunc::tw_reboot(rb_poweroff); - else if (arg == "bootloader") - TWFunc::tw_reboot(rb_bootloader); - else if (arg == "download") - TWFunc::tw_reboot(rb_download); - else - TWFunc::tw_reboot(rb_system); - - // This should never occur - return -1; - } + return 0; + } if (function == "home") { PageManager::SelectPackage("TWRP"); @@ -1143,6 +1133,36 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) } } } + if (function == "installsu") + { + int op_status = 0; + + operation_start("Install SuperSU"); + if (simulate) { + simulate_progress_bar(); + } else { + if (!TWFunc::Install_SuperSU()) + op_status = 1; + } + + operation_end(op_status, simulate); + return 0; + } + if (function == "fixsu") + { + int op_status = 0; + + operation_start("Fixing Superuser Permissions"); + if (simulate) { + simulate_progress_bar(); + } else { + if (!TWFunc::Fix_su_Perms()) + op_status = 1; + } + + operation_end(op_status, simulate); + return 0; + } } else { diff --git a/gui/devices/1024x600/res/ui.xml b/gui/devices/1024x600/res/ui.xml index fbdf14e9..383774e1 100755 --- a/gui/devices/1024x600/res/ui.xml +++ b/gui/devices/1024x600/res/ui.xml @@ -649,14 +649,6 @@ - - - - Force MD5 check on all zips? - - - - @@ -975,6 +967,48 @@ + + + + + + + %tw_action_text1% + + + + + + %tw_action_text2% + + + + + + + + + + tw_page_done=1 + + + + + + + %tw_action_param% + + + + + + + %tw_action_param% + %tw_action2_param% + + + + @@ -2682,6 +2716,7 @@ echo %tw_brightness_25% > "%tw_brightness_file%" tw_brightness_display=25% + tw_brightness=%tw_brightness_25% @@ -2694,6 +2729,7 @@ echo %tw_brightness_50% > "%tw_brightness_file%" tw_brightness_display=50% + tw_brightness=%tw_brightness_50% @@ -2706,6 +2742,7 @@ echo %tw_brightness_75% > "%tw_brightness_file%" tw_brightness_display=75% + tw_brightness=%tw_brightness_75% @@ -2718,6 +2755,7 @@ echo %tw_brightness_100% > "%tw_brightness_file%" tw_brightness_display=100% + tw_brightness=%tw_brightness_100% @@ -3891,5 +3929,107 @@ + + + + + + + + Install SuperSU? + + + + + + Your device does not appear to be rooted. + + + + + + Install SuperSU now? This will root your device. + + + + + + + Do Not Install + + tw_page_done=1 + + + + + + + tw_action=installsu + tw_action_text1=Installing SuperSU + tw_action_text2= + singleaction_page + + + + + + + Swipe to Install + + + + + + + + + + Fix Superuser Permissions? + + + + + + Root permissions appear to be lost. + + + + + + Fix root permissions now? + + + + + + (Fixes permissions on su binary & app) + + + + + + + Do Not Fix + + tw_page_done=1 + + + + + + + tw_action=fixsu + tw_action_text1=Fixing Root Permissions + tw_action_text2= + singleaction_page + + + + + + + Swipe to Fix Root + + diff --git a/gui/devices/1024x768/res/ui.xml b/gui/devices/1024x768/res/ui.xml index 025362a1..6395c744 100644 --- a/gui/devices/1024x768/res/ui.xml +++ b/gui/devices/1024x768/res/ui.xml @@ -967,6 +967,48 @@ + + + + + + + %tw_action_text1% + + + + + + %tw_action_text2% + + + + + + + + + + tw_page_done=1 + + + + + + + %tw_action_param% + + + + + + + %tw_action_param% + %tw_action2_param% + + + + @@ -3887,5 +3929,107 @@ + + + + + + + + Install SuperSU? + + + + + + Your device does not appear to be rooted. + + + + + + Install SuperSU now? This will root your device. + + + + + + + Do Not Install + + tw_page_done=1 + + + + + + + tw_action=installsu + tw_action_text1=Installing SuperSU + tw_action_text2= + singleaction_page + + + + + + + Swipe to Install + + + + + + + + + + Fix Superuser Permissions? + + + + + + Root permissions appear to be lost. + + + + + + Fix root permissions now? + + + + + + (Fixes permissions on su binary & app) + + + + + + + Do Not Fix + + tw_page_done=1 + + + + + + + tw_action=fixsu + tw_action_text1=Fixing Root Permissions + tw_action_text2= + singleaction_page + + + + + + + Swipe to Fix Root + + diff --git a/gui/devices/1280x800/res/ui.xml b/gui/devices/1280x800/res/ui.xml index 9529d110..c806b851 100644 --- a/gui/devices/1280x800/res/ui.xml +++ b/gui/devices/1280x800/res/ui.xml @@ -967,6 +967,48 @@ + + + + + + + %tw_action_text1% + + + + + + %tw_action_text2% + + + + + + + + + + tw_page_done=1 + + + + + + + %tw_action_param% + + + + + + + %tw_action_param% + %tw_action2_param% + + + + @@ -3887,5 +3929,107 @@ + + + + + + + + Install SuperSU? + + + + + + Your device does not appear to be rooted. + + + + + + Install SuperSU now? This will root your device. + + + + + + + Do Not Install + + tw_page_done=1 + + + + + + + tw_action=installsu + tw_action_text1=Installing SuperSU + tw_action_text2= + singleaction_page + + + + + + + Swipe to Install + + + + + + + + + + Fix Superuser Permissions? + + + + + + Root permissions appear to be lost. + + + + + + Fix root permissions now? + + + + + + (Fixes permissions on su binary & app) + + + + + + + Do Not Fix + + tw_page_done=1 + + + + + + + tw_action=fixsu + tw_action_text1=Fixing Root Permissions + tw_action_text2= + singleaction_page + + + + + + + Swipe to Fix Root + + diff --git a/gui/devices/1920x1200/res/ui.xml b/gui/devices/1920x1200/res/ui.xml index 5fe7fd52..1947ffa6 100644 --- a/gui/devices/1920x1200/res/ui.xml +++ b/gui/devices/1920x1200/res/ui.xml @@ -967,6 +967,48 @@ + + + + + + + %tw_action_text1% + + + + + + %tw_action_text2% + + + + + + + + + + tw_page_done=1 + + + + + + + %tw_action_param% + + + + + + + %tw_action_param% + %tw_action2_param% + + + + @@ -3888,5 +3930,107 @@ + + + + + + + + Install SuperSU? + + + + + + Your device does not appear to be rooted. + + + + + + Install SuperSU now? This will root your device. + + + + + + + Do Not Install + + tw_page_done=1 + + + + + + + tw_action=installsu + tw_action_text1=Installing SuperSU + tw_action_text2= + singleaction_page + + + + + + + Swipe to Install + + + + + + + + + + Fix Superuser Permissions? + + + + + + Root permissions appear to be lost. + + + + + + Fix root permissions now? + + + + + + (Fixes permissions on su binary & app) + + + + + + + Do Not Fix + + tw_page_done=1 + + + + + + + tw_action=fixsu + tw_action_text1=Fixing Root Permissions + tw_action_text2= + singleaction_page + + + + + + + Swipe to Fix Root + + diff --git a/gui/devices/2560x1600/res/ui.xml b/gui/devices/2560x1600/res/ui.xml index 6d0e4055..e26bdb90 100644 --- a/gui/devices/2560x1600/res/ui.xml +++ b/gui/devices/2560x1600/res/ui.xml @@ -967,6 +967,48 @@ + + + + + + + %tw_action_text1% + + + + + + %tw_action_text2% + + + + + + + + + + tw_page_done=1 + + + + + + + %tw_action_param% + + + + + + + %tw_action_param% + %tw_action2_param% + + + + @@ -3887,5 +3929,107 @@ + + + + + + + + Install SuperSU? + + + + + + Your device does not appear to be rooted. + + + + + + Install SuperSU now? This will root your device. + + + + + + + Do Not Install + + tw_page_done=1 + + + + + + + tw_action=installsu + tw_action_text1=Installing SuperSU + tw_action_text2= + singleaction_page + + + + + + + Swipe to Install + + + + + + + + + + Fix Superuser Permissions? + + + + + + Root permissions appear to be lost. + + + + + + Fix root permissions now? + + + + + + (Fixes permissions on su binary & app) + + + + + + + Do Not Fix + + tw_page_done=1 + + + + + + + tw_action=fixsu + tw_action_text1=Fixing Root Permissions + tw_action_text2= + singleaction_page + + + + + + + Swipe to Fix Root + + diff --git a/gui/devices/320x480/res/ui.xml b/gui/devices/320x480/res/ui.xml index 38e7b1d3..58147d2a 100644 --- a/gui/devices/320x480/res/ui.xml +++ b/gui/devices/320x480/res/ui.xml @@ -938,6 +938,48 @@ + + + + + + + %tw_action_text1% + + + + + + %tw_action_text2% + + + + + + + + + + tw_page_done=1 + + + + + + + %tw_action_param% + + + + + + + %tw_action_param% + %tw_action2_param% + + + + @@ -3830,5 +3872,113 @@ + + + + + + + + Install SuperSU? + + + + + + Your device does not appear to be rooted. + + + + + + Install SuperSU now? + + + + + + This will root your device. + + + + + + + Do Not Install + + tw_page_done=1 + + + + + + + tw_action=installsu + tw_action_text1=Installing SuperSU + tw_action_text2= + singleaction_page + + + + + + + Swipe to Install + + + + + + + + + + Fix Superuser Permissions? + + + + + + Root permissions appear to be lost. + + + + + + Fix root permissions now? + + + + + + (Fixes permissions on su binary & app) + + + + + + + Do Not Fix + + tw_page_done=1 + + + + + + + tw_action=fixsu + tw_action_text1=Fixing Root Permissions + tw_action_text2= + singleaction_page + + + + + + + Swipe to Fix Root + + diff --git a/gui/devices/480x800/res/ui.xml b/gui/devices/480x800/res/ui.xml index 60ad8280..572d1b92 100644 --- a/gui/devices/480x800/res/ui.xml +++ b/gui/devices/480x800/res/ui.xml @@ -937,6 +937,48 @@ + + + + + + + %tw_action_text1% + + + + + + %tw_action_text2% + + + + + + + + + + tw_page_done=1 + + + + + + + %tw_action_param% + + + + + + + %tw_action_param% + %tw_action2_param% + + + + @@ -3829,5 +3871,113 @@ + + + + + + + + Install SuperSU? + + + + + + Your device does not appear to be rooted. + + + + + + Install SuperSU now? + + + + + + This will root your device. + + + + + + + Do Not Install + + tw_page_done=1 + + + + + + + tw_action=installsu + tw_action_text1=Installing SuperSU + tw_action_text2= + singleaction_page + + + + + + + Swipe to Install + + + + + + + + + + Fix Superuser Permissions? + + + + + + Root permissions appear to be lost. + + + + + + Fix root permissions now? + + + + + + (Fixes permissions on su binary & app) + + + + + + + Do Not Fix + + tw_page_done=1 + + + + + + + tw_action=fixsu + tw_action_text1=Fixing Root Permissions + tw_action_text2= + singleaction_page + + + + + + + Swipe to Fix Root + + diff --git a/gui/devices/480x854/res/ui.xml b/gui/devices/480x854/res/ui.xml index a570faf7..09df8037 100644 --- a/gui/devices/480x854/res/ui.xml +++ b/gui/devices/480x854/res/ui.xml @@ -936,6 +936,48 @@ + + + + + + + %tw_action_text1% + + + + + + %tw_action_text2% + + + + + + + + + + tw_page_done=1 + + + + + + + %tw_action_param% + + + + + + + %tw_action_param% + %tw_action2_param% + + + + @@ -3828,5 +3870,113 @@ + + + + + + + + Install SuperSU? + + + + + + Your device does not appear to be rooted. + + + + + + Install SuperSU now? + + + + + + This will root your device. + + + + + + + Do Not Install + + tw_page_done=1 + + + + + + + tw_action=installsu + tw_action_text1=Installing SuperSU + tw_action_text2= + singleaction_page + + + + + + + Swipe to Install + + + + + + + + + + Fix Superuser Permissions? + + + + + + Root permissions appear to be lost. + + + + + + Fix root permissions now? + + + + + + (Fixes permissions on su binary & app) + + + + + + + Do Not Fix + + tw_page_done=1 + + + + + + + tw_action=fixsu + tw_action_text1=Fixing Root Permissions + tw_action_text2= + singleaction_page + + + + + + + Swipe to Fix Root + + diff --git a/gui/devices/720x1280/res/ui.xml b/gui/devices/720x1280/res/ui.xml index 79de4ca8..6d9f061c 100644 --- a/gui/devices/720x1280/res/ui.xml +++ b/gui/devices/720x1280/res/ui.xml @@ -950,6 +950,48 @@ + + + + + + + %tw_action_text1% + + + + + + %tw_action_text2% + + + + + + + + + + tw_page_done=1 + + + + + + + %tw_action_param% + + + + + + + %tw_action_param% + %tw_action2_param% + + + + @@ -3842,5 +3884,113 @@ + + + + + + + + Install SuperSU? + + + + + + Your device does not appear to be rooted. + + + + + + Install SuperSU now? + + + + + + This will root your device. + + + + + + + Do Not Install + + tw_page_done=1 + + + + + + + tw_action=installsu + tw_action_text1=Installing SuperSU + tw_action_text2= + singleaction_page + + + + + + + Swipe to Install + + + + + + + + + + Fix Superuser Permissions? + + + + + + Root permissions appear to be lost. + + + + + + Fix root permissions now? + + + + + + (Fixes permissions on su binary & app) + + + + + + + Do Not Fix + + tw_page_done=1 + + + + + + + tw_action=fixsu + tw_action_text1=Fixing Root Permissions + tw_action_text2= + singleaction_page + + + + + + + Swipe to Fix Root + + diff --git a/gui/devices/800x1280/res/ui.xml b/gui/devices/800x1280/res/ui.xml index 07ffec4e..03e4e700 100755 --- a/gui/devices/800x1280/res/ui.xml +++ b/gui/devices/800x1280/res/ui.xml @@ -938,6 +938,48 @@ + + + + + + + %tw_action_text1% + + + + + + %tw_action_text2% + + + + + + + + + + tw_page_done=1 + + + + + + + %tw_action_param% + + + + + + + %tw_action_param% + %tw_action2_param% + + + + @@ -3830,5 +3872,113 @@ + + + + + + + + Install SuperSU? + + + + + + Your device does not appear to be rooted. + + + + + + Install SuperSU now? + + + + + + This will root your device. + + + + + + + Do Not Install + + tw_page_done=1 + + + + + + + tw_action=installsu + tw_action_text1=Installing SuperSU + tw_action_text2= + singleaction_page + + + + + + + Swipe to Install + + + + + + + + + + Fix Superuser Permissions? + + + + + + Root permissions appear to be lost. + + + + + + Fix root permissions now? + + + + + + (Fixes permissions on su binary & app) + + + + + + + Do Not Fix + + tw_page_done=1 + + + + + + + tw_action=fixsu + tw_action_text1=Fixing Root Permissions + tw_action_text2= + singleaction_page + + + + + + + Swipe to Fix Root + + diff --git a/gui/devices/800x480/res/ui.xml b/gui/devices/800x480/res/ui.xml index f12c242e..9501ad89 100755 --- a/gui/devices/800x480/res/ui.xml +++ b/gui/devices/800x480/res/ui.xml @@ -975,6 +975,48 @@ + + + + + + + %tw_action_text1% + + + + + + %tw_action_text2% + + + + + + + + + + tw_page_done=1 + + + + + + + %tw_action_param% + + + + + + + %tw_action_param% + %tw_action2_param% + + + + @@ -3895,5 +3937,107 @@ + + + + + + + + Install SuperSU? + + + + + + Your device does not appear to be rooted. + + + + + + Install SuperSU now? This will root your device. + + + + + + + Do Not Install + + tw_page_done=1 + + + + + + + tw_action=installsu + tw_action_text1=Installing SuperSU + tw_action_text2= + singleaction_page + + + + + + + Swipe to Install + + + + + + + + + + Fix Superuser Permissions? + + + + + + Root permissions appear to be lost. + + + + + + Fix root permissions now? + + + + + + (Fixes permissions on su binary & app) + + + + + + + Do Not Fix + + tw_page_done=1 + + + + + + + tw_action=fixsu + tw_action_text1=Fixing Root Permissions + tw_action_text2= + singleaction_page + + + + + + + Swipe to Fix Root + + diff --git a/gui/fileselector.cpp b/gui/fileselector.cpp index 66bf80f7..bc10f917 100644 --- a/gui/fileselector.cpp +++ b/gui/fileselector.cpp @@ -790,19 +790,19 @@ bool GUIFileSelector::fileSort(FileData d1, FileData d2) case 3: // by size largest first if (d1.fileSize == d2.fileSize || d1.fileType == DT_DIR) // some directories report a different size than others - but this is not the size of the files inside the directory, so we just sort by name on directories return (strcasecmp(d1.fileName.c_str(), d2.fileName.c_str()) < 0); - return d1.fileSize > d2.fileSize; + return d1.fileSize < d2.fileSize; case -3: // by size smallest first if (d1.fileSize == d2.fileSize || d1.fileType == DT_DIR) // some directories report a different size than others - but this is not the size of the files inside the directory, so we just sort by name on directories return (strcasecmp(d1.fileName.c_str(), d2.fileName.c_str()) > 0); - return d1.fileSize < d2.fileSize; + return d1.fileSize > d2.fileSize; case 2: // by last modified date newest first if (d1.lastModified == d2.lastModified) return (strcasecmp(d1.fileName.c_str(), d2.fileName.c_str()) < 0); - return d1.lastModified > d2.lastModified; + return d1.lastModified < d2.lastModified; case -2: // by date oldest first if (d1.lastModified == d2.lastModified) return (strcasecmp(d1.fileName.c_str(), d2.fileName.c_str()) > 0); - return d1.lastModified < d2.lastModified; + return d1.lastModified > d2.lastModified; case -1: // by name descending return (strcasecmp(d1.fileName.c_str(), d2.fileName.c_str()) > 0); default: // should be a 1 - sort by name ascending diff --git a/gui/gui.cpp b/gui/gui.cpp index 7fd474a3..4788fe0d 100644 --- a/gui/gui.cpp +++ b/gui/gui.cpp @@ -423,6 +423,10 @@ runPages (void) PageManager::Render (); flip (); } + if (DataManager::GetIntValue("tw_gui_done") != 0) + { + break; + } } gGuiRunning = 0; diff --git a/prebuilt/Android.mk b/prebuilt/Android.mk index 5e78b349..f0c2c264 100644 --- a/prebuilt/Android.mk +++ b/prebuilt/Android.mk @@ -185,3 +185,23 @@ ifeq ($(TW_INCLUDE_DUMLOCK), true) LOCAL_SRC_FILES := $(LOCAL_MODULE) include $(BUILD_PREBUILT) endif + +ifneq ($(TW_EXCLUDE_SUPERSU), true) + #su binary + include $(CLEAR_VARS) + LOCAL_MODULE := su + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/supersu + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) + + #SuperSU special installer APK + include $(CLEAR_VARS) + LOCAL_MODULE := Superuser.apk + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/supersu + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) +endif \ No newline at end of file diff --git a/prebuilt/Superuser.apk b/prebuilt/Superuser.apk new file mode 100644 index 0000000000000000000000000000000000000000..99eb7d2a11858aaa37676b93baef62f0fd077344 GIT binary patch literal 28674 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

2fQP&N} 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 Gxc>!xyuX_O literal 0 HcmV?d00001 diff --git a/recovery.cpp b/recovery.cpp index 20684fdd..8969ebc6 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -977,9 +977,40 @@ main(int argc, char **argv) { //prompt_and_wait(device); } + // Check for su to see if the device is rooted or not + if (PartitionManager.Mount_By_Path("/system", false)) { + if (TWFunc::Path_Exists("/res/supersu/su") && !TWFunc::Path_Exists("/system/bin/su") && !TWFunc::Path_Exists("/system/xbin/su") && !TWFunc::Path_Exists("/system/bin/.ext/.su")) { + // Device doesn't have su installed + DataManager_SetIntValue("tw_busy", 1); + if (gui_startPage("installsu") != 0) { + LOGE("Failed to start decrypt GUI page.\n"); + } + } else if (TWFunc::Check_su_Perms() > 0) { + // su perms are set incorrectly + DataManager_SetIntValue("tw_busy", 1); + if (gui_startPage("fixsu") != 0) { + LOGE("Failed to start decrypt GUI page.\n"); + } + } + } + // Otherwise, get ready to boot the main system... finish_recovery(send_intent); ui->Print("Rebooting...\n"); + char backup_arg_char[50]; + strcpy(backup_arg_char, DataManager_GetStrValue("tw_reboot_arg")); + string backup_arg = backup_arg_char; + if (backup_arg == "recovery") + TWFunc::tw_reboot(rb_recovery); + else if (backup_arg == "poweroff") + TWFunc::tw_reboot(rb_poweroff); + else if (backup_arg == "bootloader") + TWFunc::tw_reboot(rb_bootloader); + else if (backup_arg == "download") + TWFunc::tw_reboot(rb_download); + else + TWFunc::tw_reboot(rb_system); + #ifdef ANDROID_RB_RESTART android_reboot(ANDROID_RB_RESTART, 0, 0); #else diff --git a/twrp-functions.cpp b/twrp-functions.cpp index 85ce7274..3e06f877 100644 --- a/twrp-functions.cpp +++ b/twrp-functions.cpp @@ -48,10 +48,10 @@ int TWFunc::Exec_Cmd(string cmd, string &result) { } /* Checks md5 for a path - Return values: - -1 : MD5 does not exist - 0 : Failed - 1 : Success */ + Return values: + -1 : MD5 does not exist + 0 : Failed + 1 : Success */ int TWFunc::Check_MD5(string File) { int ret; string Command, DirPath, MD5_File, Sline, Filename, MD5_File_Filename, OK; @@ -86,7 +86,7 @@ int TWFunc::Check_MD5(string File) { ret = -1; } - return ret; + return ret; } // Returns "file.name" from a full /path/to/file.name @@ -288,30 +288,30 @@ static const char *TEMPORARY_INSTALL_FILE = "/tmp/last_install"; // close a file, log an error if the error indicator is set void TWFunc::check_and_fclose(FILE *fp, const char *name) { - fflush(fp); - if (ferror(fp)) LOGE("Error in %s\n(%s)\n", name, strerror(errno)); - fclose(fp); + fflush(fp); + if (ferror(fp)) LOGE("Error in %s\n(%s)\n", name, strerror(errno)); + fclose(fp); } void TWFunc::copy_log_file(const char* source, const char* destination, int append) { - FILE *log = fopen_path(destination, append ? "a" : "w"); - if (log == NULL) { - LOGE("Can't open %s\n", destination); - } else { - FILE *tmplog = fopen(source, "r"); - if (tmplog != NULL) { - if (append) { - fseek(tmplog, tmplog_offset, SEEK_SET); // Since last write - } - char buf[4096]; - while (fgets(buf, sizeof(buf), tmplog)) fputs(buf, log); - if (append) { - tmplog_offset = ftell(tmplog); - } - check_and_fclose(tmplog, source); - } - check_and_fclose(log, destination); - } + FILE *log = fopen_path(destination, append ? "a" : "w"); + if (log == NULL) { + LOGE("Can't open %s\n", destination); + } else { + FILE *tmplog = fopen(source, "r"); + if (tmplog != NULL) { + if (append) { + fseek(tmplog, tmplog_offset, SEEK_SET); // Since last write + } + char buf[4096]; + while (fgets(buf, sizeof(buf), tmplog)) fputs(buf, log); + if (append) { + tmplog_offset = ftell(tmplog); + } + check_and_fclose(tmplog, source); + } + check_and_fclose(log, destination); + } } // clear the recovery command and prepare to boot a (hopefully working) system, @@ -323,10 +323,10 @@ void TWFunc::twfinish_recovery(const char *send_intent) { if (send_intent != NULL) { FILE *fp = fopen_path(INTENT_FILE, "w"); if (fp == NULL) { - LOGE("Can't open %s\n", INTENT_FILE); + LOGE("Can't open %s\n", INTENT_FILE); } else { - fputs(send_intent, fp); - check_and_fclose(fp, INTENT_FILE); + fputs(send_intent, fp); + check_and_fclose(fp, INTENT_FILE); } } @@ -346,7 +346,7 @@ void TWFunc::twfinish_recovery(const char *send_intent) { // Remove the command file, so recovery won't repeat indefinitely. if (!PartitionManager.Mount_By_Path("/system", true) || (unlink(COMMAND_FILE) && errno != ENOENT)) { - LOGW("Can't unlink %s\n", COMMAND_FILE); + LOGW("Can't unlink %s\n", COMMAND_FILE); } PartitionManager.UnMount_By_Path("/cache", true); @@ -357,34 +357,34 @@ void TWFunc::twfinish_recovery(const char *send_intent) { int TWFunc::tw_reboot(RebootCommand command) { // Always force a sync before we reboot - sync(); + sync(); - switch (command) - { - case rb_current: - case rb_system: - twfinish_recovery("s"); + switch (command) + { + case rb_current: + case rb_system: + twfinish_recovery("s"); sync(); check_and_run_script("/sbin/rebootsystem.sh", "reboot system"); - return reboot(RB_AUTOBOOT); - case rb_recovery: + return reboot(RB_AUTOBOOT); + case rb_recovery: check_and_run_script("/sbin/rebootrecovery.sh", "reboot recovery"); - return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "recovery"); - case rb_bootloader: + return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "recovery"); + case rb_bootloader: check_and_run_script("/sbin/rebootbootloader.sh", "reboot bootloader"); - return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "bootloader"); - case rb_poweroff: + return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "bootloader"); + case rb_poweroff: check_and_run_script("/sbin/poweroff.sh", "power off"); android_reboot(ANDROID_RB_POWEROFF, 0, 0); - return reboot(RB_POWER_OFF); - case rb_download: + return reboot(RB_POWER_OFF); + case rb_download: check_and_run_script("/sbin/rebootdownload.sh", "reboot download"); return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "download"); return 1; - default: - return -1; - } - return -1; + default: + return -1; + } + return -1; } void TWFunc::check_and_run_script(const char* script_file, const char* display_name) @@ -503,21 +503,224 @@ int TWFunc::write_file(string fn, string& line) { timespec TWFunc::timespec_diff(timespec& start, timespec& end) { - timespec temp; - if ((end.tv_nsec-start.tv_nsec)<0) { - temp.tv_sec = end.tv_sec-start.tv_sec-1; - temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec; - } else { - temp.tv_sec = end.tv_sec-start.tv_sec; - temp.tv_nsec = end.tv_nsec-start.tv_nsec; - } - return temp; + timespec temp; + if ((end.tv_nsec-start.tv_nsec)<0) { + temp.tv_sec = end.tv_sec-start.tv_sec-1; + temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec; + } else { + temp.tv_sec = end.tv_sec-start.tv_sec; + temp.tv_nsec = end.tv_nsec-start.tv_nsec; + } + return temp; } int TWFunc::drop_caches(void) { - string file = "/proc/sys/vm/drop_caches"; - string value = "3"; - if (write_file(file, value) != 0) - return -1; - return 0; + string file = "/proc/sys/vm/drop_caches"; + string value = "3"; + if (write_file(file, value) != 0) + return -1; + return 0; +} + +int TWFunc::Check_su_Perms(void) { + struct stat st; + int ret = 0; + + if (!PartitionManager.Mount_By_Path("/system", false)) + return 0; + + // Check to ensure that perms are 6755 for all 3 file locations + if (stat("/system/bin/su", &st) == 0) { + if ((st.st_mode & (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) != (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) || st.st_uid != 0 || st.st_gid != 0) { + ret = 1; + } + } + if (stat("/system/xbin/su", &st) == 0) { + if ((st.st_mode & (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) != (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) || st.st_uid != 0 || st.st_gid != 0) { + ret += 2; + } + } + if (stat("/system/bin/.ext/.su", &st) == 0) { + if ((st.st_mode & (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) != (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) || st.st_uid != 0 || st.st_gid != 0) { + ret += 4; + } + } + return ret; +} + +bool TWFunc::Fix_su_Perms(void) { + if (!PartitionManager.Mount_By_Path("/system", true)) + return false; + + string file = "/system/bin/su"; + if (TWFunc::Path_Exists(file)) { + if (chown(file.c_str(), 0, 0) != 0) { + LOGE("Failed to chown '%s'\n", file.c_str()); + return false; + } + if (tw_chmod(file, "6755") != 0) { + LOGE("Failed to chmod '%s'\n", file.c_str()); + return false; + } + } + file = "/system/xbin/su"; + if (TWFunc::Path_Exists(file)) { + if (chown(file.c_str(), 0, 0) != 0) { + LOGE("Failed to chown '%s'\n", file.c_str()); + return false; + } + if (tw_chmod(file, "6755") != 0) { + LOGE("Failed to chmod '%s'\n", file.c_str()); + return false; + } + } + file = "/system/bin/.ext/.su"; + if (TWFunc::Path_Exists(file)) { + if (chown(file.c_str(), 0, 0) != 0) { + LOGE("Failed to chown '%s'\n", file.c_str()); + return false; + } + if (tw_chmod(file, "6755") != 0) { + LOGE("Failed to chmod '%s'\n", file.c_str()); + return false; + } + } + file = "/system/app/Superuser.apk"; + if (TWFunc::Path_Exists(file)) { + if (chown(file.c_str(), 0, 0) != 0) { + LOGE("Failed to chown '%s'\n", file.c_str()); + return false; + } + if (tw_chmod(file, "0644") != 0) { + LOGE("Failed to chmod '%s'\n", file.c_str()); + return false; + } + } + sync(); + if (!PartitionManager.UnMount_By_Path("/system", true)) + return false; + return true; +} + +int TWFunc::tw_chmod(string fn, string mode) { + long mask = 0; + + for ( std::string::size_type n = 0; n < mode.length(); ++n) { + if (n == 0) { + if (mode[n] == '0') + continue; + if (mode[n] == '1') + mask |= S_ISVTX; + if (mode[n] == '2') + mask |= S_ISGID; + if (mode[n] == '4') + mask |= S_ISUID; + if (mode[n] == '5') { + mask |= S_ISVTX; + mask |= S_ISUID; + } + if (mode[n] == '6') { + mask |= S_ISGID; + mask |= S_ISUID; + } + if (mode[n] == '7') { + mask |= S_ISVTX; + mask |= S_ISGID; + mask |= S_ISUID; + } + } + else if (n == 1) { + if (mode[n] == '7') { + mask |= S_IRWXU; + } + if (mode[n] == '6') { + mask |= S_IRUSR; + mask |= S_IWUSR; + } + if (mode[n] == '5') { + mask |= S_IRUSR; + mask |= S_IXUSR; + } + if (mode[n] == '4') + mask |= S_IRUSR; + if (mode[n] == '3') { + mask |= S_IWUSR; + mask |= S_IRUSR; + } + if (mode[n] == '2') + mask |= S_IWUSR; + if (mode[n] == '1') + mask |= S_IXUSR; + } + else if (n == 2) { + if (mode[n] == '7') { + mask |= S_IRWXG; + } + if (mode[n] == '6') { + mask |= S_IRGRP; + mask |= S_IWGRP; + } + if (mode[n] == '5') { + mask |= S_IRGRP; + mask |= S_IXGRP; + } + if (mode[n] == '4') + mask |= S_IRGRP; + if (mode[n] == '3') { + mask |= S_IWGRP; + mask |= S_IXGRP; + } + if (mode[n] == '2') + mask |= S_IWGRP; + if (mode[n] == '1') + mask |= S_IXGRP; + } + else if (n == 3) { + if (mode[n] == '7') { + mask |= S_IRWXO; + } + if (mode[n] == '6') { + mask |= S_IROTH; + mask |= S_IWOTH; + } + if (mode[n] == '5') { + mask |= S_IROTH; + mask |= S_IXOTH; + } + if (mode[n] == '4') + mask |= S_IROTH; + if (mode[n] == '3') { + mask |= S_IWOTH; + mask |= S_IXOTH; + } + if (mode[n] == '2') + mask |= S_IWOTH; + if (mode[n] == '1') + mask |= S_IXOTH; + } + } + + if (chmod(fn.c_str(), mask) != 0) { + LOGE("Unable to chmod '%s' %l\n", fn.c_str(), mask); + return -1; + } + + return 0; +} + +bool TWFunc::Install_SuperSU(void) { + if (!PartitionManager.Mount_By_Path("/system", true)) + return false; + + if (copy_file("/res/supersu/su", "/system/xbin/su", 0755) != 0) { + LOGE("Failed to copy su binary to /system/bin\n"); + return false; + } + if (copy_file("/res/supersu/Superuser.apk", "/system/app/Superuser.apk", 0644) != 0) { + LOGE("Failed to copy Superuser app to /system/app\n"); + return false; + } + if (!Fix_su_Perms()) + return false; + return true; } diff --git a/twrp-functions.hpp b/twrp-functions.hpp index d7dea3f2..42196228 100644 --- a/twrp-functions.hpp +++ b/twrp-functions.hpp @@ -1,54 +1,58 @@ -#ifndef _TWRPFUNCTIONS_HPP -#define _TWRPFUNCTIONS_HPP - -#include - -using namespace std; - -typedef enum -{ - rb_current = 0, - rb_system, - rb_recovery, - rb_poweroff, - rb_bootloader, // May also be fastboot - rb_download, -} RebootCommand; - -// Partition class -class TWFunc -{ -public: - static int Check_MD5(string File); - static string Get_Root_Path(string Path); // Trims any trailing folders or filenames from the path, also adds a leading / if not present - static string Get_Path(string Path); // Trims everything after the last / in the string - static string Get_Filename(string Path); // Trims the path off of a filename - - static void install_htc_dumlock(void); // Installs HTC Dumlock - static void htc_dumlock_restore_original_boot(void); // Restores the backup of boot from HTC Dumlock - static void htc_dumlock_reflash_recovery_to_boot(void); // Reflashes the current recovery to boot - static int Recursive_Mkdir(string Path); // Recursively makes the entire path - static unsigned long long Get_Folder_Size(const string& Path, bool Display_Error); // Gets the size of a folder and all of its subfolders using dirent and stat - static bool Path_Exists(string Path); // Returns true if the path exists - static void GUI_Operation_Text(string Read_Value, string Default_Text); // Updates text for display in the GUI, e.g. Backing up %partition name% - static void GUI_Operation_Text(string Read_Value, string Partition_Name, string Default_Text); // Same as above but includes partition name - static unsigned long Get_File_Size(string Path); // Returns the size of a file - static void twfinish_recovery(const char *send_intent); // Writes the log to last_log - static int tw_reboot(RebootCommand command); // Prepares the device for rebooting - static void check_and_run_script(const char* script_file, const char* display_name); // checks for the existence of a script, chmods it to 755, then runs it - static int Exec_Cmd(string cmd, string &result); //execute a command and return the result as a string by reference - static int removeDir(const string path, bool removeParent); //recursively remove a directory - static int copy_file(string src, string dst, int mode); //copy file from src to dst with mode permissions - static unsigned int Get_D_Type_From_Stat(string Path); // Returns a dirent dt_type value using stat instead of dirent - static timespec timespec_diff(timespec& start, timespec& end); // Return a diff for 2 times - static int read_file(string fn, string& results); //read from file - static int write_file(string fn, string& line); //write from file - static int drop_caches(void); //drop linux cache memory - -private: - static void check_and_fclose(FILE *fp, const char *name); - static void copy_log_file(const char* source, const char* destination, int append); - -}; - -#endif // _TWRPFUNCTIONS_HPP +#ifndef _TWRPFUNCTIONS_HPP +#define _TWRPFUNCTIONS_HPP + +#include + +using namespace std; + +typedef enum +{ + rb_current = 0, + rb_system, + rb_recovery, + rb_poweroff, + rb_bootloader, // May also be fastboot + rb_download, +} RebootCommand; + +// Partition class +class TWFunc +{ +public: + static int Check_MD5(string File); + static string Get_Root_Path(string Path); // Trims any trailing folders or filenames from the path, also adds a leading / if not present + static string Get_Path(string Path); // Trims everything after the last / in the string + static string Get_Filename(string Path); // Trims the path off of a filename + + static void install_htc_dumlock(void); // Installs HTC Dumlock + static void htc_dumlock_restore_original_boot(void); // Restores the backup of boot from HTC Dumlock + static void htc_dumlock_reflash_recovery_to_boot(void); // Reflashes the current recovery to boot + static int Recursive_Mkdir(string Path); // Recursively makes the entire path + static unsigned long long Get_Folder_Size(const string& Path, bool Display_Error); // Gets the size of a folder and all of its subfolders using dirent and stat + static bool Path_Exists(string Path); // Returns true if the path exists + static void GUI_Operation_Text(string Read_Value, string Default_Text); // Updates text for display in the GUI, e.g. Backing up %partition name% + static void GUI_Operation_Text(string Read_Value, string Partition_Name, string Default_Text); // Same as above but includes partition name + static unsigned long Get_File_Size(string Path); // Returns the size of a file + static void twfinish_recovery(const char *send_intent); // Writes the log to last_log + static int tw_reboot(RebootCommand command); // Prepares the device for rebooting + static void check_and_run_script(const char* script_file, const char* display_name); // checks for the existence of a script, chmods it to 755, then runs it + static int Exec_Cmd(string cmd, string &result); //execute a command and return the result as a string by reference + static int removeDir(const string path, bool removeParent); //recursively remove a directory + static int copy_file(string src, string dst, int mode); //copy file from src to dst with mode permissions + static unsigned int Get_D_Type_From_Stat(string Path); // Returns a dirent dt_type value using stat instead of dirent + static timespec timespec_diff(timespec& start, timespec& end); // Return a diff for 2 times + static int read_file(string fn, string& results); //read from file + static int write_file(string fn, string& line); //write from file + static int drop_caches(void); //drop linux cache memory + static int Check_su_Perms(void); // check perms and owner of su binary in various locations + static bool Fix_su_Perms(void); // sets proper permissions for su binaries and superuser apk + static int tw_chmod(string fn, string mode); // chmod function that converts a 4 char string into st_mode automatically + static bool Install_SuperSU(void); // Installs su binary and apk and sets proper permissions + +private: + static void check_and_fclose(FILE *fp, const char *name); + static void copy_log_file(const char* source, const char* destination, int append); + +}; + +#endif // _TWRPFUNCTIONS_HPP