mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-22 16:07:39 +00:00
Overcome some quirks in Android Lollipop
This commit is contained in:
parent
ce87591c62
commit
b7986a351c
@ -470,6 +470,24 @@ static int cpio_restore(struct vector *v) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cpio_stocksha1(struct vector *v) {
|
||||||
|
cpio_file *f;
|
||||||
|
char sha1[41];
|
||||||
|
vec_for_each(v, f) {
|
||||||
|
if (strcmp(f->filename, "init.magisk.rc") == 0) {
|
||||||
|
for (char *pos = f->data; pos < f->data + f->filesize; pos = strchr(pos + 1, '\n') + 1) {
|
||||||
|
if (memcmp(pos, "# STOCKSHA1=", 12) == 0) {
|
||||||
|
pos += 12;
|
||||||
|
memcpy(sha1, pos, 40);
|
||||||
|
sha1[40] = '\0';
|
||||||
|
printf("%s\n", sha1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int cpio_commands(const char *command, int argc, char *argv[]) {
|
int cpio_commands(const char *command, int argc, char *argv[]) {
|
||||||
int recursive = 0, ret = 0;
|
int recursive = 0, ret = 0;
|
||||||
command_t cmd;
|
command_t cmd;
|
||||||
@ -480,6 +498,8 @@ int cpio_commands(const char *command, int argc, char *argv[]) {
|
|||||||
cmd = TEST;
|
cmd = TEST;
|
||||||
} else if (strcmp(command, "restore") == 0) {
|
} else if (strcmp(command, "restore") == 0) {
|
||||||
cmd = RESTORE;
|
cmd = RESTORE;
|
||||||
|
} else if (strcmp(command, "stocksha1") == 0) {
|
||||||
|
cmd = STOCKSHA1;
|
||||||
} else if (argc == 1 && strcmp(command, "backup") == 0) {
|
} else if (argc == 1 && strcmp(command, "backup") == 0) {
|
||||||
cmd = BACKUP;
|
cmd = BACKUP;
|
||||||
} else if (argc > 0 && strcmp(command, "rm") == 0) {
|
} else if (argc > 0 && strcmp(command, "rm") == 0) {
|
||||||
@ -510,6 +530,9 @@ int cpio_commands(const char *command, int argc, char *argv[]) {
|
|||||||
case RESTORE:
|
case RESTORE:
|
||||||
ret = cpio_restore(&v);
|
ret = cpio_restore(&v);
|
||||||
break;
|
break;
|
||||||
|
case STOCKSHA1:
|
||||||
|
cpio_stocksha1(&v);
|
||||||
|
return 0;
|
||||||
case BACKUP:
|
case BACKUP:
|
||||||
cpio_backup(argv[0], &v);
|
cpio_backup(argv[0], &v);
|
||||||
case RM:
|
case RM:
|
||||||
|
@ -55,7 +55,8 @@ typedef enum {
|
|||||||
TEST,
|
TEST,
|
||||||
PATCH,
|
PATCH,
|
||||||
BACKUP,
|
BACKUP,
|
||||||
RESTORE
|
RESTORE,
|
||||||
|
STOCKSHA1
|
||||||
} command_t;
|
} command_t;
|
||||||
|
|
||||||
extern char *SUP_LIST[];
|
extern char *SUP_LIST[];
|
||||||
|
@ -20,15 +20,16 @@ static void usage(char *arg0) {
|
|||||||
" Search <hexpattern1> in <file>, and replace with <hexpattern2>\n"
|
" Search <hexpattern1> in <file>, and replace with <hexpattern2>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"%s --cpio-<cmd> <incpio> [flags...] [params...]\n"
|
"%s --cpio-<cmd> <incpio> [flags...] [params...]\n"
|
||||||
" Do cpio related cmds to <incpio> (modifications are done directly)\n Supported commands:\n"
|
" Do cpio related cmds to <incpio> (modifications are done directly)\n Supported commands and params:\n"
|
||||||
" --cpio-rm <incpio> [-r] <entry>\n Remove entry from cpio, flag -r to remove recursively\n"
|
" -rm [-r] <entry>\n Remove entry from <incpio>, flag -r to remove recursively\n"
|
||||||
" --cpio-mkdir <incpio> <mode> <entry>\n Create directory as an <entry>\n"
|
" -mkdir <mode> <entry>\n Create directory as an <entry>\n"
|
||||||
" --cpio-add <incpio> <mode> <entry> <infile>\n Add <infile> as an <entry>; replaces <entry> if already exists\n"
|
" -add <mode> <entry> <infile>\n Add <infile> as an <entry>; replaces <entry> if already exists\n"
|
||||||
" --cpio-extract <incpio> <entry> <outfile>\n Extract <entry> to <outfile>\n"
|
" -extract <entry> <outfile>\n Extract <entry> to <outfile>\n"
|
||||||
" --cpio-test <incpio>\n Return value: 0/not patched 1/Magisk 2/Other (e.g. phh, SuperSU)\n"
|
" -test \n Return value: 0/not patched 1/Magisk 2/Other (e.g. phh, SuperSU)\n"
|
||||||
" --cpio-patch <KEEPVERITY> <KEEPFORCEENCRYPT>\n Patch cpio for Magisk. KEEP**** are true/false values\n"
|
" -patch <KEEPVERITY> <KEEPFORCEENCRYPT>\n Patch cpio for Magisk. KEEP**** are true/false values\n"
|
||||||
" --cpio-backup <incpio> <origcpio>\n Create ramdisk backups into <incpio> from <origcpio>\n"
|
" -backup <origcpio>\n Create ramdisk backups into <incpio> from <origcpio>\n"
|
||||||
" --cpio-restore <incpio>\n Restore ramdisk from ramdisk backup within <incpio>\n"
|
" -restore\n Restore ramdisk from ramdisk backup within <incpio>\n"
|
||||||
|
" -stocksha1\n Get stock boot SHA1 recorded within <incpio>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"%s --compress[=method] <infile> [outfile]\n"
|
"%s --compress[=method] <infile> [outfile]\n"
|
||||||
" Compress <infile> with [method] (default: gzip), optionally to [outfile]\n Supported methods: "
|
" Compress <infile> with [method] (default: gzip), optionally to [outfile]\n Supported methods: "
|
||||||
|
@ -106,7 +106,7 @@ fi
|
|||||||
[ -z $KEEPFORCEENCRYPT ] && KEEPFORCEENCRYPT=false
|
[ -z $KEEPFORCEENCRYPT ] && KEEPFORCEENCRYPT=false
|
||||||
|
|
||||||
# Detect whether running as root
|
# Detect whether running as root
|
||||||
[ `id -u` -eq 0 ] && ROOT=true || ROOT=false
|
id | grep "uid=0" >/dev/null 2>&1 && ROOT=true || ROOT=false
|
||||||
|
|
||||||
# Switch to the location of the script file
|
# Switch to the location of the script file
|
||||||
[ -z $SOURCEDMODE ] && cd "`dirname_wrap "${BASH_SOURCE:-$0}"`"
|
[ -z $SOURCEDMODE ] && cd "`dirname_wrap "${BASH_SOURCE:-$0}"`"
|
||||||
@ -156,12 +156,7 @@ case $? in
|
|||||||
1 ) # Magisk patched
|
1 ) # Magisk patched
|
||||||
ui_print_wrap "- Magisk patched image detected!"
|
ui_print_wrap "- Magisk patched image detected!"
|
||||||
# Find SHA1 of stock boot image
|
# Find SHA1 of stock boot image
|
||||||
if [ -z $SHA1 ]; then
|
[ -z $SHA1 ] && SHA1=`./magiskboot --cpio-stocksha1 ramdisk.cpio`
|
||||||
./magiskboot --cpio-extract ramdisk.cpio init.magisk.rc init.magisk.rc.old
|
|
||||||
SHA1=`grep_prop "# STOCKSHA1" init.magisk.rc.old`
|
|
||||||
rm -f init.magisk.rc.old
|
|
||||||
fi
|
|
||||||
|
|
||||||
OK=false
|
OK=false
|
||||||
./magiskboot --cpio-restore ramdisk.cpio
|
./magiskboot --cpio-restore ramdisk.cpio
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
|
@ -183,6 +183,7 @@ if ! $BOOTMODE; then
|
|||||||
$MAGISKBIN/magisk --umountimg /magisk $MAGISKLOOP
|
$MAGISKBIN/magisk --umountimg /magisk $MAGISKLOOP
|
||||||
rmdir /magisk
|
rmdir /magisk
|
||||||
recovery_cleanup
|
recovery_cleanup
|
||||||
|
rm -rf $TMPDIR
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ui_print "- Done"
|
ui_print "- Done"
|
||||||
|
@ -101,11 +101,7 @@ case $? in
|
|||||||
1 ) # Magisk patched
|
1 ) # Magisk patched
|
||||||
ui_print_wrap "- Magisk patched image detected!"
|
ui_print_wrap "- Magisk patched image detected!"
|
||||||
# Find SHA1 of stock boot image
|
# Find SHA1 of stock boot image
|
||||||
if [ -z $SHA1 ]; then
|
[ -z $SHA1 ] && SHA1=`./magiskboot --cpio-stocksha1 ramdisk.cpio`
|
||||||
./magiskboot --cpio-extract ramdisk.cpio init.magisk.rc init.magisk.rc.old
|
|
||||||
SHA1=`grep_prop "# STOCKSHA1" init.magisk.rc.old`
|
|
||||||
rm -f init.magisk.rc.old
|
|
||||||
fi
|
|
||||||
[ ! -z $SHA1 ] && STOCKDUMP=/data/stock_boot_${SHA1}.img
|
[ ! -z $SHA1 ] && STOCKDUMP=/data/stock_boot_${SHA1}.img
|
||||||
if [ -f ${STOCKDUMP}.gz ]; then
|
if [ -f ${STOCKDUMP}.gz ]; then
|
||||||
ui_print_wrap "- Boot image backup found!"
|
ui_print_wrap "- Boot image backup found!"
|
||||||
|
@ -128,10 +128,21 @@ api_level_arch_detect() {
|
|||||||
recovery_actions() {
|
recovery_actions() {
|
||||||
# TWRP bug fix
|
# TWRP bug fix
|
||||||
mount -o bind /dev/urandom /dev/random
|
mount -o bind /dev/urandom /dev/random
|
||||||
|
# Preserve environment varibles
|
||||||
|
OLD_PATH=$PATH
|
||||||
|
OLD_LD_PATH=$LD_LIBRARY_PATH
|
||||||
|
# Extract busybox from Magisk Manager
|
||||||
|
if [ -f $INSTALLER/common/magisk.apk ]; then
|
||||||
|
mkdir -p $TMPDIR/bin
|
||||||
|
[ $ARCH = "arm" -o $ARCH = "arm64" ] && BBPATH=lib/armeabi-v7a || BBPATH=lib/x86
|
||||||
|
unzip -p $INSTALLER/common/magisk.apk $BBPATH/libbusybox.so > $TMPDIR/bin/busybox 2>/dev/null
|
||||||
|
chmod 755 $TMPDIR/bin/busybox
|
||||||
|
$TMPDIR/bin/busybox --install -s $TMPDIR/bin
|
||||||
|
export PATH=$PATH:$TMPDIR/bin
|
||||||
|
fi
|
||||||
# Temporarily block out all custom recovery binaries/libs
|
# Temporarily block out all custom recovery binaries/libs
|
||||||
mv /sbin /sbin_tmp
|
mv /sbin /sbin_tmp
|
||||||
# Add all possible library paths
|
# Add all possible library paths
|
||||||
OLD_LD_PATH=$LD_LIBRARY_PATH
|
|
||||||
$IS64BIT && export LD_LIBRARY_PATH=/system/lib64:/system/vendor/lib64 || export LD_LIBRARY_PATH=/system/lib:/system/vendor/lib
|
$IS64BIT && export LD_LIBRARY_PATH=/system/lib64:/system/vendor/lib64 || export LD_LIBRARY_PATH=/system/lib:/system/vendor/lib
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,6 +150,7 @@ recovery_cleanup() {
|
|||||||
mv /sbin_tmp /sbin
|
mv /sbin_tmp /sbin
|
||||||
# Clear LD_LIBRARY_PATH
|
# Clear LD_LIBRARY_PATH
|
||||||
export LD_LIBRARY_PATH=$OLD_LD_PATH
|
export LD_LIBRARY_PATH=$OLD_LD_PATH
|
||||||
|
export PATH=$OLD_PATH
|
||||||
ui_print "- Unmounting partitions"
|
ui_print "- Unmounting partitions"
|
||||||
umount -l /system
|
umount -l /system
|
||||||
umount -l /vendor 2>/dev/null
|
umount -l /vendor 2>/dev/null
|
||||||
|
Loading…
x
Reference in New Issue
Block a user