Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
695c8bc5
Commit
695c8bc5
authored
Dec 17, 2019
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Detect package name for copying binaries
Close #2152
parent
06c42d05
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
19 deletions
+33
-19
bootstages.cpp
native/jni/core/bootstages.cpp
+11
-11
db.cpp
native/jni/core/db.cpp
+20
-7
db.h
native/jni/include/db.h
+2
-1
No files found.
native/jni/core/bootstages.cpp
View file @
695c8bc5
...
...
@@ -317,13 +317,15 @@ static int bind_mount(const char *from, const char *to, bool log) {
static
bool
magisk_env
()
{
LOGI
(
"* Initializing Magisk environment
\n
"
);
string
pkg
;
check_manager
(
&
pkg
);
char
install_dir
[
128
];
sprintf
(
install_dir
,
"%s/0/%s/install"
,
APP_DATA_DIR
,
pkg
.
data
());
// Alternative binaries paths
constexpr
const
char
*
alt_bin
[]
=
{
"/cache/data_adb/magisk"
,
"/data/magisk"
,
"/data/data/com.topjohnwu.magisk/install"
,
"/data/user_de/0/com.topjohnwu.magisk/install"
};
for
(
auto
&
alt
:
alt_bin
)
{
const
char
*
alt_bin
[]
=
{
"/cache/data_adb/magisk"
,
"/data/magisk"
,
install_dir
};
for
(
auto
alt
:
alt_bin
)
{
struct
stat
st
;
if
(
lstat
(
alt
,
&
st
)
!=
-
1
)
{
if
(
S_ISLNK
(
st
.
st_mode
))
{
...
...
@@ -781,11 +783,9 @@ void boot_complete(int client) {
rename
(
MANAGERAPK
,
"/data/magisk.apk"
);
install_apk
(
"/data/magisk.apk"
);
}
else
{
// Check whether we have a valid manager installed
db_strings
str
;
get_db_strings
(
str
,
SU_MANAGER
);
if
(
validate_manager
(
str
[
SU_MANAGER
],
0
,
nullptr
))
{
// There is no manager installed, install the stub
// Check whether we have manager installed
if
(
!
check_manager
())
{
// Install stub
exec_command_sync
(
"/sbin/magiskinit"
,
"-x"
,
"manager"
,
"/data/magisk.apk"
);
install_apk
(
"/data/magisk.apk"
);
}
...
...
native/jni/core/db.cpp
View file @
695c8bc5
...
...
@@ -246,28 +246,41 @@ int get_uid_policy(su_access &su, int uid) {
return
0
;
}
int
validate_manager
(
string
&
alt_pkg
,
int
userid
,
struct
stat
*
st
)
{
bool
check_manager
(
string
*
pkg
)
{
db_strings
str
;
get_db_strings
(
str
,
SU_MANAGER
);
bool
ret
=
validate_manager
(
str
[
SU_MANAGER
],
0
,
nullptr
);
if
(
pkg
)
{
if
(
ret
)
pkg
->
swap
(
str
[
SU_MANAGER
]);
else
*
pkg
=
"xxx"
;
/* Make sure the return pkg can never exist */
}
return
ret
;
}
bool
validate_manager
(
string
&
pkg
,
int
userid
,
struct
stat
*
st
)
{
struct
stat
tmp_st
;
if
(
st
==
nullptr
)
st
=
&
tmp_st
;
// Prefer DE storage
char
app_path
[
128
];
sprintf
(
app_path
,
"%s/%d/%s"
,
APP_DATA_DIR
,
userid
,
alt_pkg
.
empty
()
?
"xxx"
:
alt_
pkg
.
data
());
if
(
stat
(
app_path
,
st
))
{
sprintf
(
app_path
,
"%s/%d/%s"
,
APP_DATA_DIR
,
userid
,
pkg
.
data
());
if
(
pkg
.
empty
()
||
stat
(
app_path
,
st
))
{
// Check the official package name
sprintf
(
app_path
,
"%s/%d/"
JAVA_PACKAGE_NAME
,
APP_DATA_DIR
,
userid
);
if
(
stat
(
app_path
,
st
))
{
LOGE
(
"su: cannot find manager"
);
memset
(
st
,
0
,
sizeof
(
*
st
));
alt_
pkg
.
clear
();
return
1
;
pkg
.
clear
();
return
false
;
}
else
{
// Switch to official package if exists
alt_
pkg
=
JAVA_PACKAGE_NAME
;
pkg
=
JAVA_PACKAGE_NAME
;
}
}
return
0
;
return
true
;
}
void
exec_sql
(
int
client
)
{
...
...
native/jni/include/db.h
View file @
695c8bc5
...
...
@@ -155,7 +155,8 @@ typedef std::function<bool(db_row&)> db_row_cb;
int
get_db_settings
(
db_settings
&
cfg
,
int
key
=
-
1
);
int
get_db_strings
(
db_strings
&
str
,
int
key
=
-
1
);
int
get_uid_policy
(
su_access
&
su
,
int
uid
);
int
validate_manager
(
std
::
string
&
alt_pkg
,
int
userid
,
struct
stat
*
st
);
bool
check_manager
(
std
::
string
*
pkg
=
nullptr
);
bool
validate_manager
(
std
::
string
&
pkg
,
int
userid
,
struct
stat
*
st
);
void
exec_sql
(
int
client
);
char
*
db_exec
(
const
char
*
sql
);
char
*
db_exec
(
const
char
*
sql
,
const
db_row_cb
&
fn
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment