don't use Result on handle_daemon_action

This commit is contained in:
5ec1cff
2023-12-11 20:10:28 +08:00
parent 99048699fc
commit 5d95f627bf
2 changed files with 18 additions and 20 deletions

View File

@@ -1,6 +1,7 @@
mod kernelsu; mod kernelsu;
mod magisk; mod magisk;
#[derive(Debug)]
pub enum RootImpl { pub enum RootImpl {
None, None,
TooOld, TooOld,

View File

@@ -61,9 +61,7 @@ pub fn main() -> Result<()> {
} }
_ => { _ => {
thread::spawn(move || { thread::spawn(move || {
if let Err(e) = handle_daemon_action(action, stream, &context) { handle_daemon_action(action, stream, &context);
log::warn!("Error handling daemon action: {}\n{}", e, e.backtrace());
}
}); });
} }
} }
@@ -188,7 +186,7 @@ fn spawn_companion(name: &str, lib_fd: RawFd) -> Result<Option<UnixStream>> {
exit(0) exit(0)
} }
fn handle_daemon_action(action: DaemonSocketAction, mut stream: UnixStream, context: &Context) -> Result<()> { fn handle_daemon_action(action: DaemonSocketAction, mut stream: UnixStream, context: &Context) {
match action { match action {
DaemonSocketAction::RequestLogcatFd => { DaemonSocketAction::RequestLogcatFd => {
loop { loop {
@@ -196,13 +194,13 @@ fn handle_daemon_action(action: DaemonSocketAction, mut stream: UnixStream, cont
Ok(level) => level, Ok(level) => level,
Err(_) => break, Err(_) => break,
}; };
let tag = stream.read_string()?; let tag = stream.read_string().unwrap();
let message = stream.read_string()?; let message = stream.read_string().unwrap();
utils::log_raw(level as i32, &tag, &message)?; utils::log_raw(level as i32, &tag, &message).unwrap();
} }
} }
DaemonSocketAction::GetProcessFlags => { DaemonSocketAction::GetProcessFlags => {
let uid = stream.read_u32()? as i32; let uid = stream.read_u32().unwrap() as i32;
let mut flags = ProcessFlags::empty(); let mut flags = ProcessFlags::empty();
if root_impl::uid_granted_root(uid) { if root_impl::uid_granted_root(uid) {
flags |= ProcessFlags::PROCESS_GRANTED_ROOT; flags |= ProcessFlags::PROCESS_GRANTED_ROOT;
@@ -213,21 +211,21 @@ fn handle_daemon_action(action: DaemonSocketAction, mut stream: UnixStream, cont
match root_impl::get_impl() { match root_impl::get_impl() {
root_impl::RootImpl::KernelSU => flags |= ProcessFlags::PROCESS_ROOT_IS_KSU, root_impl::RootImpl::KernelSU => flags |= ProcessFlags::PROCESS_ROOT_IS_KSU,
root_impl::RootImpl::Magisk => flags |= ProcessFlags::PROCESS_ROOT_IS_MAGISK, root_impl::RootImpl::Magisk => flags |= ProcessFlags::PROCESS_ROOT_IS_MAGISK,
_ => unreachable!(), _ => panic!("wrong root impl: {:?}", root_impl::get_impl()),
} }
log::trace!("Uid {} granted root: {}", uid, flags.contains(ProcessFlags::PROCESS_GRANTED_ROOT)); log::trace!("Uid {} granted root: {}", uid, flags.contains(ProcessFlags::PROCESS_GRANTED_ROOT));
log::trace!("Uid {} on denylist: {}", uid, flags.contains(ProcessFlags::PROCESS_ON_DENYLIST)); log::trace!("Uid {} on denylist: {}", uid, flags.contains(ProcessFlags::PROCESS_ON_DENYLIST));
stream.write_u32(flags.bits())?; stream.write_u32(flags.bits()).unwrap();
} }
DaemonSocketAction::ReadModules => { DaemonSocketAction::ReadModules => {
stream.write_usize(context.modules.len())?; stream.write_usize(context.modules.len()).unwrap();
for module in context.modules.iter() { for module in context.modules.iter() {
stream.write_string(&module.name)?; stream.write_string(&module.name).unwrap();
stream.send_fd(module.lib_fd.as_raw_fd())?; stream.send_fd(module.lib_fd.as_raw_fd()).unwrap();
} }
} }
DaemonSocketAction::RequestCompanionSocket => { DaemonSocketAction::RequestCompanionSocket => {
let index = stream.read_usize()?; let index = stream.read_usize().unwrap();
let module = &context.modules[index]; let module = &context.modules[index];
let mut companion = module.companion.lock().unwrap(); let mut companion = module.companion.lock().unwrap();
if let Some(Some(sock)) = companion.as_ref() { if let Some(Some(sock)) = companion.as_ref() {
@@ -255,23 +253,22 @@ fn handle_daemon_action(action: DaemonSocketAction, mut stream: UnixStream, cont
Some(Some(sock)) => { Some(Some(sock)) => {
if let Err(e) = sock.send_fd(stream.as_raw_fd()) { if let Err(e) = sock.send_fd(stream.as_raw_fd()) {
log::error!("Failed to send companion fd socket of module `{}`: {}", module.name, e); log::error!("Failed to send companion fd socket of module `{}`: {}", module.name, e);
stream.write_u8(0)?; stream.write_u8(0).unwrap();
} }
// Ok: Send by companion // Ok: Send by companion
} }
_ => { _ => {
stream.write_u8(0)?; stream.write_u8(0).unwrap();
} }
} }
} }
DaemonSocketAction::GetModuleDir => { DaemonSocketAction::GetModuleDir => {
let index = stream.read_usize()?; let index = stream.read_usize().unwrap();
let module = &context.modules[index]; let module = &context.modules[index];
let dir = format!("{}/{}", constants::PATH_MODULES_DIR, module.name); let dir = format!("{}/{}", constants::PATH_MODULES_DIR, module.name);
let dir = fs::File::open(dir)?; let dir = fs::File::open(dir).unwrap();
stream.send_fd(dir.as_raw_fd())?; stream.send_fd(dir.as_raw_fd()).unwrap();
} }
_ => {} _ => {}
} }
Ok(())
} }