mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-04-30 14:34:28 +02:00
Use static methods in cxx-rs
This commit is contained in:
parent
58a25a3e2b
commit
59622d1688
@ -146,7 +146,7 @@ static void handle_request_async(int client, int code, const sock_cred &cred) {
|
|||||||
break;
|
break;
|
||||||
case +RequestCode::ZYGOTE_RESTART: {
|
case +RequestCode::ZYGOTE_RESTART: {
|
||||||
LOGI("** zygote restarted\n");
|
LOGI("** zygote restarted\n");
|
||||||
auto &daemon = MagiskD();
|
auto &daemon = MagiskD::Get();
|
||||||
daemon.prune_su_access();
|
daemon.prune_su_access();
|
||||||
scan_deny_apps();
|
scan_deny_apps();
|
||||||
daemon.zygisk_reset(false);
|
daemon.zygisk_reset(false);
|
||||||
@ -154,7 +154,7 @@ static void handle_request_async(int client, int code, const sock_cred &cred) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case +RequestCode::SQLITE_CMD:
|
case +RequestCode::SQLITE_CMD:
|
||||||
MagiskD().db_exec(client);
|
MagiskD::Get().db_exec(client);
|
||||||
break;
|
break;
|
||||||
case +RequestCode::REMOVE_MODULES: {
|
case +RequestCode::REMOVE_MODULES: {
|
||||||
int do_reboot = read_int(client);
|
int do_reboot = read_int(client);
|
||||||
@ -162,12 +162,12 @@ static void handle_request_async(int client, int code, const sock_cred &cred) {
|
|||||||
write_int(client, 0);
|
write_int(client, 0);
|
||||||
close(client);
|
close(client);
|
||||||
if (do_reboot) {
|
if (do_reboot) {
|
||||||
MagiskD().reboot();
|
MagiskD::Get().reboot();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case +RequestCode::ZYGISK:
|
case +RequestCode::ZYGISK:
|
||||||
MagiskD().zygisk_handler(client);
|
MagiskD::Get().zygisk_handler(client);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
__builtin_unreachable();
|
__builtin_unreachable();
|
||||||
@ -289,7 +289,7 @@ static void handle_request(pollfd *pfd) {
|
|||||||
exec_task([=, fd = client.release()] { handle_request_async(fd, code, cred); });
|
exec_task([=, fd = client.release()] { handle_request_async(fd, code, cred); });
|
||||||
} else {
|
} else {
|
||||||
exec_task([=, fd = client.release()] {
|
exec_task([=, fd = client.release()] {
|
||||||
MagiskD().boot_stage_handler(fd, code);
|
MagiskD::Get().boot_stage_handler(fd, code);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -332,7 +332,7 @@ static void daemon_entry() {
|
|||||||
setcon(MAGISK_PROC_CON);
|
setcon(MAGISK_PROC_CON);
|
||||||
|
|
||||||
rust::daemon_entry();
|
rust::daemon_entry();
|
||||||
SDK_INT = MagiskD().sdk_int();
|
SDK_INT = MagiskD::Get().sdk_int();
|
||||||
|
|
||||||
// Escape from cgroup
|
// Escape from cgroup
|
||||||
int pid = getpid();
|
int pid = getpid();
|
||||||
|
@ -73,6 +73,10 @@ pub struct MagiskD {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl MagiskD {
|
impl MagiskD {
|
||||||
|
pub fn get() -> &'static MagiskD {
|
||||||
|
unsafe { MAGISKD.get().unwrap_unchecked() }
|
||||||
|
}
|
||||||
|
|
||||||
pub fn is_recovery(&self) -> bool {
|
pub fn is_recovery(&self) -> bool {
|
||||||
self.is_recovery
|
self.is_recovery
|
||||||
}
|
}
|
||||||
@ -300,7 +304,3 @@ fn check_data() -> bool {
|
|||||||
}
|
}
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_magiskd() -> &'static MagiskD {
|
|
||||||
unsafe { MAGISKD.get().unwrap_unchecked() }
|
|
||||||
}
|
|
||||||
|
@ -73,10 +73,6 @@ impl Default for MntNsMode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_default_db_settings() -> DbSettings {
|
|
||||||
DbSettings::default()
|
|
||||||
}
|
|
||||||
|
|
||||||
impl DbEntryKey {
|
impl DbEntryKey {
|
||||||
fn to_str(self) -> &'static str {
|
fn to_str(self) -> &'static str {
|
||||||
match self {
|
match self {
|
||||||
|
@ -370,7 +370,7 @@ int enable_deny() {
|
|||||||
|
|
||||||
denylist_enforced = true;
|
denylist_enforced = true;
|
||||||
|
|
||||||
if (!MagiskD().zygisk_enabled()) {
|
if (!MagiskD::Get().zygisk_enabled()) {
|
||||||
if (new_daemon_thread(&logcat)) {
|
if (new_daemon_thread(&logcat)) {
|
||||||
denylist_enforced = false;
|
denylist_enforced = false;
|
||||||
return DenyResponse::ERROR;
|
return DenyResponse::ERROR;
|
||||||
@ -385,7 +385,7 @@ int enable_deny() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MagiskD().set_db_setting(DbEntryKey::DenylistConfig, true);
|
MagiskD::Get().set_db_setting(DbEntryKey::DenylistConfig, true);
|
||||||
return DenyResponse::OK;
|
return DenyResponse::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -393,13 +393,13 @@ int disable_deny() {
|
|||||||
if (denylist_enforced.exchange(false)) {
|
if (denylist_enforced.exchange(false)) {
|
||||||
LOGI("* Disable DenyList\n");
|
LOGI("* Disable DenyList\n");
|
||||||
}
|
}
|
||||||
MagiskD().set_db_setting(DbEntryKey::DenylistConfig, false);
|
MagiskD::Get().set_db_setting(DbEntryKey::DenylistConfig, false);
|
||||||
return DenyResponse::OK;
|
return DenyResponse::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initialize_denylist() {
|
void initialize_denylist() {
|
||||||
if (!denylist_enforced) {
|
if (!denylist_enforced) {
|
||||||
if (MagiskD().get_db_setting(DbEntryKey::DenylistConfig))
|
if (MagiskD::Get().get_db_setting(DbEntryKey::DenylistConfig))
|
||||||
enable_deny();
|
enable_deny();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
|
#include <base.hpp>
|
||||||
|
|
||||||
#include "socket.hpp"
|
#include "socket.hpp"
|
||||||
#include "../core-rs.hpp"
|
#include "../core-rs.hpp"
|
||||||
|
|
||||||
@ -26,10 +28,17 @@ enum class RespondCode : int {
|
|||||||
END
|
END
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ModuleInfo;
|
||||||
|
|
||||||
extern std::string native_bridge;
|
extern std::string native_bridge;
|
||||||
|
|
||||||
|
// Daemon
|
||||||
int connect_daemon(int req, bool create = false);
|
int connect_daemon(int req, bool create = false);
|
||||||
|
const char *get_magisk_tmp();
|
||||||
void unlock_blocks();
|
void unlock_blocks();
|
||||||
|
bool setup_magisk_env();
|
||||||
|
bool check_key_combo();
|
||||||
|
void restore_zygisk_prop();
|
||||||
|
|
||||||
// Poll control
|
// Poll control
|
||||||
using poll_callback = void(*)(pollfd*);
|
using poll_callback = void(*)(pollfd*);
|
||||||
@ -50,6 +59,10 @@ void disable_modules();
|
|||||||
void remove_modules();
|
void remove_modules();
|
||||||
|
|
||||||
// Scripting
|
// Scripting
|
||||||
|
void install_apk(rust::Utf8CStr apk);
|
||||||
|
void uninstall_pkg(rust::Utf8CStr pkg);
|
||||||
|
void exec_common_scripts(rust::Utf8CStr stage);
|
||||||
|
void exec_module_scripts(rust::Utf8CStr stage, const rust::Vec<ModuleInfo> &module_list);
|
||||||
void exec_script(const char *script);
|
void exec_script(const char *script);
|
||||||
void clear_pkg(const char *pkg, int user_id);
|
void clear_pkg(const char *pkg, int user_id);
|
||||||
[[noreturn]] void install_module(const char *file);
|
[[noreturn]] void install_module(const char *file);
|
||||||
@ -61,3 +74,10 @@ void initialize_denylist();
|
|||||||
void scan_deny_apps();
|
void scan_deny_apps();
|
||||||
bool is_deny_target(int uid, std::string_view process);
|
bool is_deny_target(int uid, std::string_view process);
|
||||||
void revert_unmount(int pid = -1) noexcept;
|
void revert_unmount(int pid = -1) noexcept;
|
||||||
|
void update_deny_flags(int uid, rust::Str process, uint32_t &flags);
|
||||||
|
|
||||||
|
// Rust bindings
|
||||||
|
static inline rust::Utf8CStr get_magisk_tmp_rs() { return get_magisk_tmp(); }
|
||||||
|
static inline rust::String resolve_preinit_dir_rs(rust::Utf8CStr base_dir) {
|
||||||
|
return resolve_preinit_dir(base_dir.c_str());
|
||||||
|
}
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <base.hpp>
|
|
||||||
|
|
||||||
struct ModuleInfo;
|
|
||||||
|
|
||||||
const char *get_magisk_tmp();
|
|
||||||
bool setup_magisk_env();
|
|
||||||
bool check_key_combo();
|
|
||||||
void disable_modules();
|
|
||||||
void exec_common_scripts(rust::Utf8CStr stage);
|
|
||||||
void exec_module_scripts(rust::Utf8CStr stage, const rust::Vec<ModuleInfo> &module_list);
|
|
||||||
void install_apk(rust::Utf8CStr apk);
|
|
||||||
void uninstall_pkg(rust::Utf8CStr pkg);
|
|
||||||
void update_deny_flags(int uid, rust::Str process, uint32_t &flags);
|
|
||||||
void initialize_denylist();
|
|
||||||
void restore_zygisk_prop();
|
|
||||||
|
|
||||||
// Rust bindings
|
|
||||||
static inline rust::Utf8CStr get_magisk_tmp_rs() { return get_magisk_tmp(); }
|
|
||||||
static inline rust::String resolve_preinit_dir_rs(rust::Utf8CStr base_dir) {
|
|
||||||
return resolve_preinit_dir(base_dir.c_str());
|
|
||||||
}
|
|
@ -7,13 +7,11 @@
|
|||||||
#![allow(clippy::missing_safety_doc)]
|
#![allow(clippy::missing_safety_doc)]
|
||||||
|
|
||||||
use base::Utf8CStr;
|
use base::Utf8CStr;
|
||||||
use daemon::{daemon_entry, get_magiskd, MagiskD};
|
use daemon::{daemon_entry, MagiskD};
|
||||||
use db::get_default_db_settings;
|
|
||||||
use logging::{android_logging, setup_logfile, zygisk_close_logd, zygisk_get_logd, zygisk_logging};
|
use logging::{android_logging, setup_logfile, zygisk_close_logd, zygisk_get_logd, zygisk_logging};
|
||||||
use mount::{clean_mounts, find_preinit_device, revert_unmount};
|
use mount::{clean_mounts, find_preinit_device, revert_unmount};
|
||||||
use resetprop::{persist_delete_prop, persist_get_prop, persist_get_props, persist_set_prop};
|
use resetprop::{persist_delete_prop, persist_get_prop, persist_get_props, persist_set_prop};
|
||||||
use socket::{recv_fd, recv_fds, send_fd, send_fds};
|
use socket::{recv_fd, recv_fds, send_fd, send_fds};
|
||||||
use su::get_default_root_settings;
|
|
||||||
use zygisk::zygisk_should_load_module;
|
use zygisk::zygisk_should_load_module;
|
||||||
|
|
||||||
#[path = "../include/consts.rs"]
|
#[path = "../include/consts.rs"]
|
||||||
@ -74,7 +72,7 @@ pub mod ffi {
|
|||||||
#[cxx_name = "Utf8CStr"]
|
#[cxx_name = "Utf8CStr"]
|
||||||
type Utf8CStrRef<'a> = base::ffi::Utf8CStrRef<'a>;
|
type Utf8CStrRef<'a> = base::ffi::Utf8CStrRef<'a>;
|
||||||
|
|
||||||
include!("include/ffi.hpp");
|
include!("include/core.hpp");
|
||||||
|
|
||||||
#[cxx_name = "get_magisk_tmp_rs"]
|
#[cxx_name = "get_magisk_tmp_rs"]
|
||||||
fn get_magisk_tmp() -> Utf8CStrRef<'static>;
|
fn get_magisk_tmp() -> Utf8CStrRef<'static>;
|
||||||
@ -236,12 +234,17 @@ pub mod ffi {
|
|||||||
#[cxx_name = "get_root_settings"]
|
#[cxx_name = "get_root_settings"]
|
||||||
fn get_root_settings_for_cxx(&self, uid: i32, settings: &mut RootSettings) -> bool;
|
fn get_root_settings_for_cxx(&self, uid: i32, settings: &mut RootSettings) -> bool;
|
||||||
|
|
||||||
#[cxx_name = "DbSettings"]
|
#[Self = DbSettings]
|
||||||
fn get_default_db_settings() -> DbSettings;
|
#[cxx_name = "New"]
|
||||||
#[cxx_name = "RootSettings"]
|
fn default() -> DbSettings;
|
||||||
fn get_default_root_settings() -> RootSettings;
|
|
||||||
#[cxx_name = "MagiskD"]
|
#[Self = RootSettings]
|
||||||
fn get_magiskd() -> &'static MagiskD;
|
#[cxx_name = "New"]
|
||||||
|
fn default() -> RootSettings;
|
||||||
|
|
||||||
|
#[Self = MagiskD]
|
||||||
|
#[cxx_name = "Get"]
|
||||||
|
fn get() -> &'static MagiskD;
|
||||||
}
|
}
|
||||||
unsafe extern "C++" {
|
unsafe extern "C++" {
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
@ -26,7 +26,7 @@ static void set_script_env() {
|
|||||||
char new_path[4096];
|
char new_path[4096];
|
||||||
ssprintf(new_path, sizeof(new_path), "%s:%s", getenv("PATH"), get_magisk_tmp());
|
ssprintf(new_path, sizeof(new_path), "%s:%s", getenv("PATH"), get_magisk_tmp());
|
||||||
setenv("PATH", new_path, 1);
|
setenv("PATH", new_path, 1);
|
||||||
if (MagiskD().zygisk_enabled())
|
if (MagiskD::Get().zygisk_enabled())
|
||||||
setenv("ZYGISK_ENABLED", "1", 1);
|
setenv("ZYGISK_ENABLED", "1", 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -139,7 +139,3 @@ impl MagiskD {
|
|||||||
granted
|
granted
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_default_root_settings() -> RootSettings {
|
|
||||||
RootSettings::default()
|
|
||||||
}
|
|
||||||
|
@ -18,7 +18,7 @@ static pthread_mutex_t cache_lock = PTHREAD_MUTEX_INITIALIZER;
|
|||||||
static shared_ptr<su_info> cached;
|
static shared_ptr<su_info> cached;
|
||||||
|
|
||||||
su_info::su_info(int uid) :
|
su_info::su_info(int uid) :
|
||||||
uid(uid), eval_uid(-1), cfg(DbSettings()), access(RootSettings()),
|
uid(uid), eval_uid(-1), cfg(DbSettings::New()), access(RootSettings::New()),
|
||||||
mgr_uid(-1), timestamp(0), _lock(PTHREAD_MUTEX_INITIALIZER) {}
|
mgr_uid(-1), timestamp(0), _lock(PTHREAD_MUTEX_INITIALIZER) {}
|
||||||
|
|
||||||
su_info::~su_info() {
|
su_info::~su_info() {
|
||||||
@ -44,7 +44,7 @@ void su_info::refresh() {
|
|||||||
|
|
||||||
void su_info::check_db() {
|
void su_info::check_db() {
|
||||||
eval_uid = uid;
|
eval_uid = uid;
|
||||||
auto &daemon = MagiskD();
|
auto &daemon = MagiskD::Get();
|
||||||
daemon.get_db_settings(cfg);
|
daemon.get_db_settings(cfg);
|
||||||
|
|
||||||
// Check multiuser settings
|
// Check multiuser settings
|
||||||
|
2
native/src/external/cxx-rs
vendored
2
native/src/external/cxx-rs
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 49f3912d9c6e02dc05facccce5dbda5451016ab2
|
Subproject commit 0ea6d507cee40da9581b71bd531a4e3ac0a37164
|
Loading…
x
Reference in New Issue
Block a user