mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-12-15 17:51:51 +00:00
Several minor fixes/improvements
This commit is contained in:
@@ -75,8 +75,8 @@ impl MagiskD {
|
|||||||
let tmp_bb = buf.append_path(get_magisk_tmp()).append_path(BBPATH);
|
let tmp_bb = buf.append_path(get_magisk_tmp()).append_path(BBPATH);
|
||||||
tmp_bb.mkdirs(0o755).ok();
|
tmp_bb.mkdirs(0o755).ok();
|
||||||
tmp_bb.append_path("busybox");
|
tmp_bb.append_path("busybox");
|
||||||
tmp_bb.follow_link().chmod(0o755).log_ok();
|
|
||||||
busybox.copy_to(tmp_bb).ok();
|
busybox.copy_to(tmp_bb).ok();
|
||||||
|
tmp_bb.follow_link().chmod(0o755).log_ok();
|
||||||
|
|
||||||
// Install busybox applets
|
// Install busybox applets
|
||||||
Command::new(&tmp_bb)
|
Command::new(&tmp_bb)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use crate::consts::{LOG_PIPE, LOGFILE};
|
|||||||
use crate::ffi::get_magisk_tmp;
|
use crate::ffi::get_magisk_tmp;
|
||||||
use crate::logging::LogFile::{Actual, Buffer};
|
use crate::logging::LogFile::{Actual, Buffer};
|
||||||
use base::{
|
use base::{
|
||||||
FsPathBuilder, LogLevel, LoggedResult, ReadExt, Utf8CStr, Utf8CStrBuf, WriteExt,
|
FsPathBuilder, LogLevel, LoggedResult, ReadExt, ResultExt, Utf8CStr, Utf8CStrBuf, WriteExt,
|
||||||
const_format::concatcp, cstr, libc, new_daemon_thread, raw_cstr, update_logger,
|
const_format::concatcp, cstr, libc, new_daemon_thread, raw_cstr, update_logger,
|
||||||
};
|
};
|
||||||
use bytemuck::{Pod, Zeroable, bytes_of, write_zeroes};
|
use bytemuck::{Pod, Zeroable, bytes_of, write_zeroes};
|
||||||
@@ -328,7 +328,7 @@ pub fn start_log_daemon() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let _: LoggedResult<()> = try {
|
let _: LoggedResult<()> = try {
|
||||||
path.mkfifo(0o666)?;
|
path.mkfifo(0o666).log_ok();
|
||||||
chown(path.as_utf8_cstr(), Some(Uid::from(0)), Some(Gid::from(0)))?;
|
chown(path.as_utf8_cstr(), Some(Uid::from(0)), Some(Gid::from(0)))?;
|
||||||
let read = path.open(OFlag::O_RDWR | OFlag::O_CLOEXEC)?;
|
let read = path.open(OFlag::O_RDWR | OFlag::O_CLOEXEC)?;
|
||||||
let write = path.open(OFlag::O_WRONLY | OFlag::O_CLOEXEC)?;
|
let write = path.open(OFlag::O_WRONLY | OFlag::O_CLOEXEC)?;
|
||||||
|
|||||||
@@ -234,14 +234,11 @@ int su_client_main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
if (atty) {
|
if (atty) {
|
||||||
// We need a PTY. Get one.
|
// We need a PTY. Get one.
|
||||||
write_int(fd, 1);
|
|
||||||
int ptmx = recv_fd(fd);
|
int ptmx = recv_fd(fd);
|
||||||
setup_sighandlers(sighandler);
|
setup_sighandlers(sighandler);
|
||||||
// If stdin is not a tty, and if we pump to ptmx, our process may intercept the input to ptmx and
|
// If stdin is not a tty, and if we pump to ptmx, our process may intercept the input to ptmx and
|
||||||
// output to stdout, which cause the target process lost input.
|
// output to stdout, which cause the target process lost input.
|
||||||
pump_tty(ptmx, atty & ATTY_IN);
|
pump_tty(ptmx, atty & ATTY_IN);
|
||||||
} else {
|
|
||||||
write_int(fd, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the exit code
|
// Get the exit code
|
||||||
@@ -335,9 +332,10 @@ void exec_root_shell(int client, int pid, SuRequest &req, MntNsMode mode) {
|
|||||||
int infd = recv_fd(client);
|
int infd = recv_fd(client);
|
||||||
int outfd = recv_fd(client);
|
int outfd = recv_fd(client);
|
||||||
int errfd = recv_fd(client);
|
int errfd = recv_fd(client);
|
||||||
|
int ptsfd = -1;
|
||||||
|
|
||||||
// App need a PTY
|
// App need a PTY
|
||||||
if (read_int(client)) {
|
if (infd < 0 || outfd < 0 || errfd < 0) {
|
||||||
string pts;
|
string pts;
|
||||||
string ptmx;
|
string ptmx;
|
||||||
auto magiskpts = get_magisk_tmp() + "/"s SHELLPTS;
|
auto magiskpts = get_magisk_tmp() + "/"s SHELLPTS;
|
||||||
@@ -370,24 +368,18 @@ void exec_root_shell(int client, int pid, SuRequest &req, MntNsMode mode) {
|
|||||||
// Opening the TTY has to occur after the
|
// Opening the TTY has to occur after the
|
||||||
// fork() and setsid() so that it becomes
|
// fork() and setsid() so that it becomes
|
||||||
// our controlling TTY and not the daemon's
|
// our controlling TTY and not the daemon's
|
||||||
int ptsfd = xopen(pts_slave.data(), O_RDWR);
|
ptsfd = xopen(pts_slave.data(), O_RDWR);
|
||||||
|
|
||||||
if (infd < 0)
|
|
||||||
infd = ptsfd;
|
|
||||||
if (outfd < 0)
|
|
||||||
outfd = ptsfd;
|
|
||||||
if (errfd < 0)
|
|
||||||
errfd = ptsfd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap out stdin, stdout, stderr
|
// Swap out stdin, stdout, stderr
|
||||||
xdup2(infd, STDIN_FILENO);
|
xdup2(infd < 0 ? ptsfd : infd, STDIN_FILENO);
|
||||||
xdup2(outfd, STDOUT_FILENO);
|
xdup2(outfd < 0 ? ptsfd : outfd, STDOUT_FILENO);
|
||||||
xdup2(errfd, STDERR_FILENO);
|
xdup2(errfd < 0 ? ptsfd : errfd, STDERR_FILENO);
|
||||||
|
|
||||||
close(infd);
|
close(infd);
|
||||||
close(outfd);
|
close(outfd);
|
||||||
close(errfd);
|
close(errfd);
|
||||||
|
close(ptsfd);
|
||||||
close(client);
|
close(client);
|
||||||
|
|
||||||
// Handle namespaces
|
// Handle namespaces
|
||||||
|
|||||||
Reference in New Issue
Block a user