From 9edb35905d5d6a3f21f107e9eff630b36e16d9ec Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Thu, 2 May 2013 22:58:30 -0700 Subject: Reverse kang Wil Wheaton Recovery enhancements. Change-Id: Ia9eace0ff0826801515b335ac6543c1271948612 --- Android.mk | 5 +++-- extendedcommands.c | 13 +++++++++++++ recovery.c | 4 +++- su/Android.mk | 19 +++++++++++++++++++ su/dbstub.c | 11 +++++++++++ utilities/Android.mk | 7 +++++++ 6 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 su/Android.mk create mode 100644 su/dbstub.c diff --git a/Android.mk b/Android.mk index 20e4e86..54b1c1b 100644 --- a/Android.mk +++ b/Android.mk @@ -85,7 +85,7 @@ else LOCAL_SRC_FILES += $(BOARD_CUSTOM_RECOVERY_KEYMAPPING) endif -LOCAL_STATIC_LIBRARIES += libext4_utils_static libz libsparse_static +LOCAL_STATIC_LIBRARIES += libmake_ext4fs libext4_utils_static libz libsparse_static LOCAL_STATIC_LIBRARIES += libminzip libunz libmincrypt LOCAL_STATIC_LIBRARIES += libminizip libminadbd libedify libbusybox libmkyaffs2image libunyaffs liberase_image libdump_image libflash_image @@ -105,7 +105,7 @@ LOCAL_C_INCLUDES += system/extras/ext4_utils include $(BUILD_EXECUTABLE) -RECOVERY_LINKS := edify busybox flash_image dump_image mkyaffs2image unyaffs erase_image nandroid reboot volume setprop dedupe minizip +RECOVERY_LINKS := make_ext4fs edify busybox flash_image dump_image mkyaffs2image unyaffs erase_image nandroid reboot volume setprop dedupe minizip # nc is provided by external/netcat RECOVERY_SYMLINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/,$(RECOVERY_LINKS)) @@ -176,4 +176,5 @@ include $(commands_recovery_local_path)/edify/Android.mk include $(commands_recovery_local_path)/updater/Android.mk include $(commands_recovery_local_path)/applypatch/Android.mk include $(commands_recovery_local_path)/utilities/Android.mk +include $(commands_recovery_local_path)/su/Android.mk commands_recovery_local_path := diff --git a/extendedcommands.c b/extendedcommands.c index eda092c..5a1ab6d 100644 --- a/extendedcommands.c +++ b/extendedcommands.c @@ -1570,7 +1570,9 @@ int verify_root_and_recovery() { } } + int exists = 0; if (0 == lstat("/system/bin/su", &st)) { + exists = 1; if (S_ISREG(st.st_mode)) { if ((st.st_mode & (S_ISUID | S_ISGID)) != (S_ISUID | S_ISGID)) { ui_show_text(1); @@ -1583,6 +1585,7 @@ int verify_root_and_recovery() { } if (0 == lstat("/system/xbin/su", &st)) { + exists = 1; if (S_ISREG(st.st_mode)) { if ((st.st_mode & (S_ISUID | S_ISGID)) != (S_ISUID | S_ISGID)) { ui_show_text(1); @@ -1594,6 +1597,16 @@ int verify_root_and_recovery() { } } + if (!exists) { + ui_show_text(1); + ret = 1; + if (confirm_selection("Root access is missing. Root device?", "Yes - Root device (/system/xbin/su)")) { + __system("cp /sbin/su /system/xbin/su"); + __system("chmod 6755 /system/xbin/su"); + __system("ln -sf /system/xbin/su /system/bin/su"); + } + } + ensure_path_unmounted("/system"); return ret; } diff --git a/recovery.c b/recovery.c index 0f56d0e..0e756ba 100644 --- a/recovery.c +++ b/recovery.c @@ -812,7 +812,9 @@ main(int argc, char **argv) { if (strstr(argv[0], "erase_image") != NULL) return erase_image_main(argc, argv); if (strstr(argv[0], "mkyaffs2image") != NULL) - return mkyaffs2image_main(argc, argv); + return mkyaffs2image_main(argc, argv); + if (strstr(argv[0], "make_ext4fs") != NULL) + return make_ext4fs_main(argc, argv); if (strstr(argv[0], "unyaffs") != NULL) return unyaffs_main(argc, argv); if (strstr(argv[0], "nandroid")) diff --git a/su/Android.mk b/su/Android.mk new file mode 100644 index 0000000..3f4bf2e --- /dev/null +++ b/su/Android.mk @@ -0,0 +1,19 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + + +LOCAL_MODULE := su +LOCAL_MODULE_TAGS := eng debug +LOCAL_FORCE_STATIC_EXECUTABLE := true +LOCAL_STATIC_LIBRARIES := libc +LOCAL_C_INCLUDES := external/sqlite/dist +LOCAL_SRC_FILES := ../../../external/koush/Superuser/Superuser/jni/su/su.c ../../../external/koush/Superuser/Superuser/jni/su/activity.c ../../../external/koush/Superuser/Superuser/jni/su/utils.c dbstub.c +LOCAL_CFLAGS := -DSQLITE_OMIT_LOAD_EXTENSION -DREQUESTOR=\"$(SUPERUSER_PACKAGE)\" +ifdef SUPERUSER_PACKAGE_PREFIX + LOCAL_CFLAGS += -DREQUESTOR_PREFIX=\"$(SUPERUSER_PACKAGE_PREFIX)\" +endif +LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin +include $(BUILD_EXECUTABLE) + diff --git a/su/dbstub.c b/su/dbstub.c new file mode 100644 index 0000000..f06bf1b --- /dev/null +++ b/su/dbstub.c @@ -0,0 +1,11 @@ +#include +#include +#include +#include +#include + +#include "../../../external/koush/Superuser/Superuser/jni/su/su.h" + +policy_t database_check(struct su_context *ctx) { + return ALLOW; +} diff --git a/utilities/Android.mk b/utilities/Android.mk index 3d46331..37866af 100755 --- a/utilities/Android.mk +++ b/utilities/Android.mk @@ -49,3 +49,10 @@ LOCAL_CFLAGS := -Dmain=minizip_main -D__ANDROID__ -DIOAPI_NO_64 LOCAL_C_INCLUDES := external/zlib LOCAL_SRC_FILES := ../../../external/zlib/contrib/minizip/minizip.c ../../../external/zlib/contrib/minizip/zip.c ../../../external/zlib/contrib/minizip/ioapi.c include $(BUILD_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE := libmake_ext4fs +LOCAL_CFLAGS := -Dmain=make_ext4fs_main +LOCAL_SRC_FILES := ../../../system/extras/ext4_utils/make_ext4fs_main.c +include $(BUILD_STATIC_LIBRARY) -- cgit v1.1