mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-22 16:07:39 +00:00
Prevent polluting global shell env
This commit is contained in:
parent
966c6314f8
commit
1fbd053a42
@ -7,8 +7,11 @@ import com.topjohnwu.magisk.core.di.AppContext
|
|||||||
import com.topjohnwu.magisk.core.ktx.getProperty
|
import com.topjohnwu.magisk.core.ktx.getProperty
|
||||||
import com.topjohnwu.magisk.core.model.UpdateInfo
|
import com.topjohnwu.magisk.core.model.UpdateInfo
|
||||||
import com.topjohnwu.magisk.core.repository.NetworkService
|
import com.topjohnwu.magisk.core.repository.NetworkService
|
||||||
|
import com.topjohnwu.superuser.CallbackList
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
import com.topjohnwu.superuser.ShellUtils.fastCmd
|
import com.topjohnwu.superuser.ShellUtils.fastCmd
|
||||||
|
import com.topjohnwu.superuser.ShellUtils.fastCmdResult
|
||||||
|
import kotlinx.coroutines.Runnable
|
||||||
|
|
||||||
val isRunningAsStub get() = Info.stub != null
|
val isRunningAsStub get() = Info.stub != null
|
||||||
|
|
||||||
@ -24,19 +27,25 @@ object Info {
|
|||||||
} else remote
|
} else remote
|
||||||
}
|
}
|
||||||
|
|
||||||
// Device state
|
var isRooted = false
|
||||||
|
var noDataExec = false
|
||||||
|
var patchBootVbmeta = false
|
||||||
|
|
||||||
@JvmStatic var env = Env()
|
@JvmStatic var env = Env()
|
||||||
private set
|
private set
|
||||||
@JvmField var isSAR = false
|
@JvmStatic var isSAR = false
|
||||||
|
private set
|
||||||
var legacySAR = false
|
var legacySAR = false
|
||||||
|
private set
|
||||||
var isAB = false
|
var isAB = false
|
||||||
|
private set
|
||||||
|
var slot = ""
|
||||||
|
private set
|
||||||
@JvmField val isZygiskEnabled = System.getenv("ZYGISK_ENABLED") == "1"
|
@JvmField val isZygiskEnabled = System.getenv("ZYGISK_ENABLED") == "1"
|
||||||
@JvmStatic val isFDE get() = crypto == "block"
|
@JvmStatic val isFDE get() = crypto == "block"
|
||||||
@JvmField var ramdisk = false
|
@JvmStatic var ramdisk = false
|
||||||
var patchBootVbmeta = false
|
private set
|
||||||
var crypto = ""
|
private var crypto = ""
|
||||||
var noDataExec = false
|
|
||||||
var isRooted = false
|
|
||||||
|
|
||||||
var hasGMS = true
|
var hasGMS = true
|
||||||
val isEmulator =
|
val isEmulator =
|
||||||
@ -69,12 +78,39 @@ object Info {
|
|||||||
|
|
||||||
fun init(shell: Shell) {
|
fun init(shell: Shell) {
|
||||||
if (shell.isRoot) {
|
if (shell.isRoot) {
|
||||||
isRooted = true
|
val v = fastCmd(shell, "magisk -v").split(":")
|
||||||
val v = fastCmd(shell, "magisk -v").split(":".toRegex())
|
|
||||||
env = Env(
|
env = Env(
|
||||||
v[0], v.size >= 3 && v[2] == "D",
|
v[0], v.size >= 3 && v[2] == "D",
|
||||||
runCatching { fastCmd("magisk -V").toInt() }.getOrDefault(-1)
|
runCatching { fastCmd("magisk -V").toInt() }.getOrDefault(-1)
|
||||||
)
|
)
|
||||||
|
Config.denyList = fastCmdResult(shell, "magisk --denylist status")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val map = mutableMapOf<String, String>()
|
||||||
|
val list = object : CallbackList<String>(Runnable::run) {
|
||||||
|
override fun onAddElement(e: String) {
|
||||||
|
val split = e.split("=")
|
||||||
|
if (split.size >= 2) {
|
||||||
|
map[split[0]] = split[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
shell.newJob().add("(app_init)").to(list).exec()
|
||||||
|
|
||||||
|
fun getVar(name: String) = map[name] ?: ""
|
||||||
|
fun getBool(name: String) = map[name].toBoolean()
|
||||||
|
|
||||||
|
isSAR = getBool("SYSTEM_AS_ROOT")
|
||||||
|
ramdisk = getBool("RAMDISKEXIST")
|
||||||
|
isAB = getBool("ISAB")
|
||||||
|
patchBootVbmeta = getBool("PATCHVBMETAFLAG")
|
||||||
|
crypto = getVar("CRYPTOTYPE")
|
||||||
|
slot = getVar("SLOT")
|
||||||
|
legacySAR = getBool("LEGACYSAR")
|
||||||
|
|
||||||
|
// Default presets
|
||||||
|
Config.recovery = getBool("RECOVERYMODE")
|
||||||
|
Config.keepVerity = getBool("KEEPVERITY")
|
||||||
|
Config.keepEnc = getBool("KEEPFORCEENCRYPT")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,8 +82,11 @@ abstract class MagiskInstallImpl protected constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findImage(): Boolean {
|
private fun findImage(slot: String): Boolean {
|
||||||
val bootPath = "RECOVERYMODE=${Config.recovery} find_boot_image; echo \"\$BOOTIMAGE\"".fsh()
|
val bootPath = (
|
||||||
|
"(RECOVERYMODE=${Config.recovery} " +
|
||||||
|
"SLOT=$slot find_boot_image; " +
|
||||||
|
"echo \$BOOTIMAGE)").fsh()
|
||||||
if (bootPath.isEmpty()) {
|
if (bootPath.isEmpty()) {
|
||||||
console.add("! Unable to detect target image")
|
console.add("! Unable to detect target image")
|
||||||
return false
|
return false
|
||||||
@ -93,22 +96,14 @@ abstract class MagiskInstallImpl protected constructor(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun findImage(): Boolean {
|
||||||
|
return findImage(Info.slot)
|
||||||
|
}
|
||||||
|
|
||||||
private fun findSecondary(): Boolean {
|
private fun findSecondary(): Boolean {
|
||||||
val slot = "echo \$SLOT".fsh()
|
val slot = if (Info.slot == "_a") "_b" else "_a"
|
||||||
val target = if (slot == "_a") "_b" else "_a"
|
console.add("- Target slot: $slot")
|
||||||
console.add("- Target slot: $target")
|
return findImage(slot)
|
||||||
val bootPath = arrayOf(
|
|
||||||
"SLOT=$target",
|
|
||||||
"find_boot_image",
|
|
||||||
"SLOT=$slot",
|
|
||||||
"echo \"\$BOOTIMAGE\"").fsh()
|
|
||||||
if (bootPath.isEmpty()) {
|
|
||||||
console.add("! Unable to detect target image")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
srcBoot = rootFS.getFile(bootPath)
|
|
||||||
console.add("- Target image: $bootPath")
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun extractFiles(): Boolean {
|
private suspend fun extractFiles(): Boolean {
|
||||||
|
@ -20,8 +20,8 @@ import java.util.jar.JarFile
|
|||||||
|
|
||||||
class ShellInit : Shell.Initializer() {
|
class ShellInit : Shell.Initializer() {
|
||||||
override fun onInit(context: Context, shell: Shell): Boolean {
|
override fun onInit(context: Context, shell: Shell): Boolean {
|
||||||
Info.init(shell)
|
|
||||||
if (shell.isRoot) {
|
if (shell.isRoot) {
|
||||||
|
Info.isRooted = true
|
||||||
RootUtils.bindTask?.let { shell.execTask(it) }
|
RootUtils.bindTask?.let { shell.execTask(it) }
|
||||||
RootUtils.bindTask = null
|
RootUtils.bindTask = null
|
||||||
}
|
}
|
||||||
@ -47,7 +47,8 @@ class ShellInit : Shell.Initializer() {
|
|||||||
if (shell.isRoot) {
|
if (shell.isRoot) {
|
||||||
add("export MAGISKTMP=\$(magisk --path)")
|
add("export MAGISKTMP=\$(magisk --path)")
|
||||||
// Test if we can properly execute stuff in /data
|
// Test if we can properly execute stuff in /data
|
||||||
Info.noDataExec = !shell.newJob().add("$localBB sh -c \"$localBB true\"").exec().isSuccess
|
Info.noDataExec = !shell.newJob()
|
||||||
|
.add("$localBB sh -c '$localBB true'").exec().isSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Info.noDataExec) {
|
if (Info.noDataExec) {
|
||||||
@ -70,26 +71,9 @@ class ShellInit : Shell.Initializer() {
|
|||||||
if (shell.isRoot) {
|
if (shell.isRoot) {
|
||||||
add(context.assets.open("util_functions.sh"))
|
add(context.assets.open("util_functions.sh"))
|
||||||
}
|
}
|
||||||
add("app_init")
|
|
||||||
}.exec()
|
}.exec()
|
||||||
|
|
||||||
fun fastCmd(cmd: String) = ShellUtils.fastCmd(shell, cmd)
|
Info.init(shell)
|
||||||
fun getVar(name: String) = fastCmd("echo \$$name")
|
|
||||||
fun getBool(name: String) = getVar(name).toBoolean()
|
|
||||||
|
|
||||||
Info.isSAR = getBool("SYSTEM_AS_ROOT")
|
|
||||||
Info.ramdisk = getBool("RAMDISKEXIST")
|
|
||||||
Info.isAB = getBool("ISAB")
|
|
||||||
Info.crypto = getVar("CRYPTOTYPE")
|
|
||||||
Info.patchBootVbmeta = getBool("PATCHVBMETAFLAG")
|
|
||||||
Info.legacySAR = getBool("LEGACYSAR")
|
|
||||||
|
|
||||||
// Default presets
|
|
||||||
Config.recovery = getBool("RECOVERYMODE")
|
|
||||||
Config.keepVerity = getBool("KEEPVERITY")
|
|
||||||
Config.keepEnc = getBool("KEEPFORCEENCRYPT")
|
|
||||||
Config.denyList = shell.newJob().add("magisk --denylist status").exec().isSuccess
|
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -186,6 +186,10 @@ check_encryption() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printvar() {
|
||||||
|
eval echo $1=\$$1
|
||||||
|
}
|
||||||
|
|
||||||
##########################
|
##########################
|
||||||
# Non-root util_functions
|
# Non-root util_functions
|
||||||
##########################
|
##########################
|
||||||
@ -224,13 +228,25 @@ grep_prop() { return; }
|
|||||||
#############
|
#############
|
||||||
|
|
||||||
app_init() {
|
app_init() {
|
||||||
mount_partitions
|
mount_partitions >/dev/null
|
||||||
RAMDISKEXIST=false
|
RAMDISKEXIST=false
|
||||||
check_boot_ramdisk && RAMDISKEXIST=true
|
check_boot_ramdisk && RAMDISKEXIST=true
|
||||||
get_flags
|
get_flags >/dev/null
|
||||||
run_migrations
|
run_migrations
|
||||||
SHA1=$(grep_prop SHA1 $MAGISKTMP/.magisk/config)
|
SHA1=$(grep_prop SHA1 $MAGISKTMP/.magisk/config)
|
||||||
check_encryption
|
check_encryption
|
||||||
|
|
||||||
|
# Dump variables
|
||||||
|
printvar SLOT
|
||||||
|
printvar SYSTEM_AS_ROOT
|
||||||
|
printvar RAMDISKEXIST
|
||||||
|
printvar ISAB
|
||||||
|
printvar CRYPTOTYPE
|
||||||
|
printvar PATCHVBMETAFLAG
|
||||||
|
printvar LEGACYSAR
|
||||||
|
printvar RECOVERYMODE
|
||||||
|
printvar KEEPVERITY
|
||||||
|
printvar KEEPFORCEENCRYPT
|
||||||
}
|
}
|
||||||
|
|
||||||
export BOOTMODE=true
|
export BOOTMODE=true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user