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
370015a8
Commit
370015a8
authored
Mar 06, 2019
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Modernize database code (again)
parent
6597b7ad
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
135 additions
and
175 deletions
+135
-175
bootstages.cpp
native/jni/core/bootstages.cpp
+1
-1
db.cpp
native/jni/core/db.cpp
+77
-124
db.h
native/jni/include/db.h
+45
-29
hide_utils.cpp
native/jni/magiskhide/hide_utils.cpp
+5
-14
connect.cpp
native/jni/su/connect.cpp
+1
-1
su.h
native/jni/su/su.h
+3
-3
su_daemon.cpp
native/jni/su/su_daemon.cpp
+3
-3
No files found.
native/jni/core/bootstages.cpp
View file @
370015a8
...
@@ -752,7 +752,7 @@ core_only:
...
@@ -752,7 +752,7 @@ core_only:
}
else
{
}
else
{
// Check whether we have a valid manager installed
// Check whether we have a valid manager installed
db_strings
str
;
db_strings
str
;
get_db_strings
(
&
str
,
SU_MANAGER
);
get_db_strings
(
str
,
SU_MANAGER
);
if
(
validate_manager
(
str
[
SU_MANAGER
],
0
,
nullptr
))
{
if
(
validate_manager
(
str
[
SU_MANAGER
],
0
,
nullptr
))
{
// There is no manager installed, install the stub
// There is no manager installed, install the stub
exec_command_sync
(
"/sbin/magiskinit"
,
"-x"
,
"manager"
,
"/data/magisk.apk"
);
exec_command_sync
(
"/sbin/magiskinit"
,
"-x"
,
"manager"
,
"/data/magisk.apk"
);
...
...
native/jni/core/db.cpp
View file @
370015a8
...
@@ -11,64 +11,31 @@
...
@@ -11,64 +11,31 @@
#define DB_VERSION 9
#define DB_VERSION 9
static
sqlite3
*
mDB
=
nullptr
;
using
namespace
std
;
db_strings
::
db_strings
()
{
memset
(
data
,
0
,
sizeof
(
data
));
}
char
*
db_strings
::
operator
[](
const
char
*
key
)
{
return
data
[
getKeyIdx
(
key
)];
}
const
char
*
db_strings
::
operator
[](
const
char
*
key
)
const
{
return
data
[
getKeyIdx
(
key
)];
}
char
*
db_strings
::
operator
[](
const
int
idx
)
{
static
sqlite3
*
mDB
=
nullptr
;
return
data
[
idx
];
}
const
char
*
db_strings
::
operator
[](
const
int
idx
)
const
{
return
data
[
idx
];
}
int
db_strings
::
getKeyIdx
(
const
char
*
key
)
const
{
int
db_strings
::
getKeyIdx
(
string_view
key
)
const
{
int
idx
=
DB_STRING_NUM
;
int
idx
=
DB_STRING_NUM
;
for
(
int
i
=
0
;
i
<
DB_STRING_NUM
;
++
i
)
{
for
(
int
i
=
0
;
i
<
DB_STRING_NUM
;
++
i
)
{
if
(
strcmp
(
key
,
DB_STRING_KEYS
[
i
])
==
0
)
if
(
key
==
DB_STRING_KEYS
[
i
]
)
idx
=
i
;
idx
=
i
;
}
}
return
idx
;
return
idx
;
}
}
db_settings
::
db_settings
()
:
data
{
db_settings
::
db_settings
()
{
ROOT_ACCESS_APPS_AND_ADB
,
// Default settings
MULTIUSER_MODE_OWNER_ONLY
,
data
[
0
]
=
ROOT_ACCESS_APPS_AND_ADB
;
NAMESPACE_MODE_REQUESTER
,
data
[
1
]
=
MULTIUSER_MODE_OWNER_ONLY
;
1
data
[
2
]
=
NAMESPACE_MODE_REQUESTER
;
}
{}
data
[
3
]
=
1
;
int
&
db_settings
::
operator
[](
const
int
idx
)
{
return
data
[
idx
];
}
const
int
&
db_settings
::
operator
[](
const
int
idx
)
const
{
return
data
[
idx
];
}
int
&
db_settings
::
operator
[](
const
char
*
key
)
{
return
data
[
getKeyIdx
(
key
)];
}
}
const
int
&
db_settings
::
operator
[](
const
char
*
key
)
const
{
int
db_settings
::
getKeyIdx
(
string_view
key
)
const
{
return
data
[
getKeyIdx
(
key
)];
}
int
db_settings
::
getKeyIdx
(
const
char
*
key
)
const
{
int
idx
=
DB_SETTINGS_NUM
;
int
idx
=
DB_SETTINGS_NUM
;
for
(
int
i
=
0
;
i
<
DB_SETTINGS_NUM
;
++
i
)
{
for
(
int
i
=
0
;
i
<
DB_SETTINGS_NUM
;
++
i
)
{
if
(
strcmp
(
key
,
DB_SETTING_KEYS
[
i
])
==
0
)
if
(
key
==
DB_SETTING_KEYS
[
i
]
)
idx
=
i
;
idx
=
i
;
}
}
return
idx
;
return
idx
;
...
@@ -187,7 +154,7 @@ static char *open_and_init_db(sqlite3 *&db) {
...
@@ -187,7 +154,7 @@ static char *open_and_init_db(sqlite3 *&db) {
return
nullptr
;
return
nullptr
;
}
}
char
*
db_exec
(
const
char
*
sql
,
int
(
*
cb
)(
void
*
,
int
,
char
**
,
char
**
),
void
*
v
)
{
char
*
db_exec
(
const
char
*
sql
)
{
char
*
err
;
char
*
err
;
if
(
mDB
==
nullptr
)
{
if
(
mDB
==
nullptr
)
{
err
=
open_and_init_db
(
mDB
);
err
=
open_and_init_db
(
mDB
);
...
@@ -199,139 +166,125 @@ char *db_exec(const char *sql, int (*cb)(void *, int, char**, char**), void *v)
...
@@ -199,139 +166,125 @@ char *db_exec(const char *sql, int (*cb)(void *, int, char**, char**), void *v)
);
);
}
}
if
(
mDB
)
{
if
(
mDB
)
{
sqlite3_exec
(
mDB
,
sql
,
cb
,
v
,
&
err
);
sqlite3_exec
(
mDB
,
sql
,
nullptr
,
nullptr
,
&
err
);
return
err
;
return
err
;
}
}
return
nullptr
;
return
nullptr
;
}
}
static
int
settings_cb
(
void
*
v
,
int
col_num
,
char
**
data
,
char
**
col_name
)
{
char
*
db_exec
(
const
char
*
sql
,
const
db_row_cb
&
fn
)
{
auto
&
cfg
=
*
(
db_settings
*
)
v
;
char
*
err
;
i
nt
value
=
-
1
;
i
f
(
mDB
==
nullptr
)
{
const
char
*
key
=
""
;
err
=
open_and_init_db
(
mDB
)
;
for
(
int
i
=
0
;
i
<
col_num
;
++
i
)
{
db_err_cmd
(
err
,
if
(
strcmp
(
col_name
[
i
],
"key"
)
==
0
)
{
// Open fails, remove and reconstruct
key
=
data
[
i
]
;
unlink
(
MAGISKDB
)
;
}
else
if
(
strcmp
(
col_name
[
i
],
"value"
)
==
0
)
{
err
=
open_and_init_db
(
mDB
);
value
=
atoi
(
data
[
i
]
);
err_ret
(
err
);
}
);
}
}
if
(
key
[
0
]
&&
value
>=
0
)
{
if
(
mDB
)
{
cfg
[
key
]
=
value
;
sqlite3_exec
(
mDB
,
sql
,
[](
void
*
cb
,
int
col_num
,
char
**
data
,
char
**
col_name
)
->
int
{
LOGD
(
"magiskdb: query %s=[%d]
\n
"
,
key
,
value
);
auto
&
func
=
*
reinterpret_cast
<
const
db_row_cb
*>
(
cb
);
db_row
row
;
for
(
int
i
=
0
;
i
<
col_num
;
++
i
)
row
[
col_name
[
i
]]
=
data
[
i
];
return
func
(
row
)
?
0
:
1
;
},
(
void
*
)
&
fn
,
&
err
);
return
err
;
}
}
return
0
;
return
nullptr
;
}
}
int
get_db_settings
(
db_settings
*
dbs
,
int
key
)
{
int
get_db_settings
(
db_settings
&
cfg
,
int
key
)
{
char
*
err
;
char
*
err
;
auto
settings_cb
=
[
&
](
db_row
&
row
)
->
bool
{
cfg
[
row
[
"key"
]]
=
atoi
(
row
[
"value"
].
data
());
LOGD
(
"magiskdb: query %s=[%s]
\n
"
,
row
[
"key"
].
data
(),
row
[
"value"
].
data
());
return
true
;
};
if
(
key
>=
0
)
{
if
(
key
>=
0
)
{
char
query
[
128
];
char
query
[
128
];
sprintf
(
query
,
"SELECT key, value FROM settings WHERE key='%s'"
,
DB_SETTING_KEYS
[
key
]);
sprintf
(
query
,
"SELECT key, value FROM settings WHERE key='%s'"
,
DB_SETTING_KEYS
[
key
]);
err
=
db_exec
(
query
,
settings_cb
,
dbs
);
err
=
db_exec
(
query
,
settings_cb
);
}
else
{
}
else
{
err
=
db_exec
(
"SELECT key, value FROM settings"
,
settings_cb
,
dbs
);
err
=
db_exec
(
"SELECT key, value FROM settings"
,
settings_cb
);
}
}
db_err_cmd
(
err
,
return
1
);
db_err_cmd
(
err
,
return
1
);
return
0
;
return
0
;
}
}
static
int
strings_cb
(
void
*
v
,
int
col_num
,
char
**
data
,
char
**
col_name
)
{
int
get_db_strings
(
db_strings
&
str
,
int
key
)
{
auto
&
str
=
*
(
db_strings
*
)
v
;
const
char
*
key
=
""
,
*
value
=
""
;
for
(
int
i
=
0
;
i
<
col_num
;
++
i
)
{
if
(
strcmp
(
col_name
[
i
],
"key"
)
==
0
)
{
key
=
data
[
i
];
}
else
if
(
strcmp
(
col_name
[
i
],
"value"
)
==
0
)
{
value
=
data
[
i
];
}
}
if
(
key
[
0
]
&&
value
[
0
])
{
strcpy
(
str
[
key
],
value
);
LOGD
(
"magiskdb: query %s=[%s]
\n
"
,
key
,
value
);
}
return
0
;
}
int
get_db_strings
(
db_strings
*
str
,
int
key
)
{
char
*
err
;
char
*
err
;
auto
string_cb
=
[
&
](
db_row
&
row
)
->
bool
{
str
[
row
[
"key"
]]
=
row
[
"value"
];
LOGD
(
"magiskdb: query %s=[%s]
\n
"
,
row
[
"key"
].
data
(),
row
[
"value"
].
data
());
return
true
;
};
if
(
key
>=
0
)
{
if
(
key
>=
0
)
{
char
query
[
128
];
char
query
[
128
];
sprintf
(
query
,
"SELECT key, value FROM strings WHERE key='%s'"
,
DB_STRING_KEYS
[
key
]);
sprintf
(
query
,
"SELECT key, value FROM strings WHERE key='%s'"
,
DB_STRING_KEYS
[
key
]);
err
=
db_exec
(
query
,
string
s_cb
,
str
);
err
=
db_exec
(
query
,
string
_cb
);
}
else
{
}
else
{
err
=
db_exec
(
"SELECT key, value FROM strings"
,
strings_cb
,
str
);
err
=
db_exec
(
"SELECT key, value FROM strings"
,
string_cb
);
}
if
(
err
)
{
LOGE
(
"sqlite3_exec: %s
\n
"
,
err
);
sqlite3_free
(
err
);
return
1
;
}
}
db_err_cmd
(
err
,
return
1
);
return
0
;
return
0
;
}
}
static
int
policy_cb
(
void
*
v
,
int
col_num
,
char
**
data
,
char
**
col_name
)
{
int
get_uid_policy
(
int
uid
,
su_access
&
su
)
{
auto
su
=
(
su_access
*
)
v
;
for
(
int
i
=
0
;
i
<
col_num
;
i
++
)
{
if
(
strcmp
(
col_name
[
i
],
"policy"
)
==
0
)
su
->
policy
=
(
policy_t
)
atoi
(
data
[
i
]);
else
if
(
strcmp
(
col_name
[
i
],
"logging"
)
==
0
)
su
->
log
=
atoi
(
data
[
i
]);
else
if
(
strcmp
(
col_name
[
i
],
"notification"
)
==
0
)
su
->
notify
=
atoi
(
data
[
i
]);
}
LOGD
(
"magiskdb: query policy=[%d] log=[%d] notify=[%d]
\n
"
,
su
->
policy
,
su
->
log
,
su
->
notify
);
return
0
;
}
int
get_uid_policy
(
int
uid
,
struct
su_access
*
su
)
{
char
query
[
256
],
*
err
;
char
query
[
256
],
*
err
;
sprintf
(
query
,
"SELECT policy, logging, notification FROM policies "
sprintf
(
query
,
"SELECT policy, logging, notification FROM policies "
"WHERE uid=%d AND (until=0 OR until>%li)"
,
uid
,
time
(
nullptr
));
"WHERE uid=%d AND (until=0 OR until>%li)"
,
uid
,
time
(
nullptr
));
err
=
db_exec
(
query
,
policy_cb
,
su
);
err
=
db_exec
(
query
,
[
&
](
db_row
&
row
)
->
bool
{
su
.
policy
=
(
policy_t
)
atoi
(
row
[
"policy"
].
data
());
su
.
log
=
atoi
(
row
[
"logging"
].
data
());
su
.
notify
=
atoi
(
row
[
"notification"
].
data
());
LOGD
(
"magiskdb: query policy=[%d] log=[%d] notify=[%d]
\n
"
,
su
.
policy
,
su
.
log
,
su
.
notify
);
return
true
;
});
db_err_cmd
(
err
,
return
1
);
db_err_cmd
(
err
,
return
1
);
return
0
;
return
0
;
}
}
int
validate_manager
(
char
*
alt_pkg
,
int
userid
,
struct
stat
*
st
)
{
int
validate_manager
(
string
&
alt_pkg
,
int
userid
,
struct
stat
*
st
)
{
if
(
st
==
nullptr
)
{
struct
stat
tmp_st
;
struct
stat
stat
;
if
(
st
==
nullptr
)
st
=
&
sta
t
;
st
=
&
tmp_s
t
;
}
// Prefer DE storage
// Prefer DE storage
const
char
*
base
=
access
(
"/data/user_de"
,
F_OK
)
==
0
?
"/data/user_de"
:
"/data/user"
;
const
char
*
base
=
access
(
"/data/user_de"
,
F_OK
)
==
0
?
"/data/user_de"
:
"/data/user"
;
char
app_path
[
128
];
char
app_path
[
128
];
sprintf
(
app_path
,
"%s/%d/%s"
,
base
,
userid
,
alt_pkg
[
0
]
?
alt_pkg
:
"xxx"
);
sprintf
(
app_path
,
"%s/%d/%s"
,
base
,
userid
,
alt_pkg
.
empty
()
?
"xxx"
:
alt_pkg
.
data
()
);
if
(
stat
(
app_path
,
st
))
{
if
(
stat
(
app_path
,
st
))
{
// Check the official package name
// Check the official package name
sprintf
(
app_path
,
"%s/%d/"
JAVA_PACKAGE_NAME
,
base
,
userid
);
sprintf
(
app_path
,
"%s/%d/"
JAVA_PACKAGE_NAME
,
base
,
userid
);
if
(
stat
(
app_path
,
st
))
{
if
(
stat
(
app_path
,
st
))
{
LOGE
(
"su: cannot find manager"
);
LOGE
(
"su: cannot find manager"
);
memset
(
st
,
0
,
sizeof
(
*
st
));
memset
(
st
,
0
,
sizeof
(
*
st
));
alt_pkg
[
0
]
=
'\0'
;
alt_pkg
.
clear
()
;
return
1
;
return
1
;
}
else
{
}
else
{
// Switch to official package if exists
// Switch to official package if exists
strcpy
(
alt_pkg
,
JAVA_PACKAGE_NAME
)
;
alt_pkg
=
JAVA_PACKAGE_NAME
;
}
}
}
}
return
0
;
return
0
;
}
}
static
int
print_cb
(
void
*
v
,
int
col_num
,
char
**
data
,
char
**
col_name
)
{
FILE
*
out
=
(
FILE
*
)
v
;
for
(
int
i
=
0
;
i
<
col_num
;
++
i
)
{
if
(
i
)
fprintf
(
out
,
"|"
);
fprintf
(
out
,
"%s=%s"
,
col_name
[
i
],
data
[
i
]);
}
fprintf
(
out
,
"
\n
"
);
return
0
;
}
void
exec_sql
(
int
client
)
{
void
exec_sql
(
int
client
)
{
char
*
sql
=
read_string
(
client
);
char
*
sql
=
read_string
(
client
);
FILE
*
out
=
fdopen
(
recv_fd
(
client
),
"a"
);
FILE
*
out
=
fdopen
(
recv_fd
(
client
),
"a"
);
char
*
err
=
db_exec
(
sql
,
print_cb
,
out
);
char
*
err
=
db_exec
(
sql
,
[
&
](
db_row
&
row
)
->
bool
{
bool
first
=
false
;
for
(
auto
it
:
row
)
{
if
(
first
)
fprintf
(
out
,
"|"
);
else
first
=
true
;
fprintf
(
out
,
"%s=%s"
,
it
.
first
.
data
(),
it
.
second
.
data
());
}
fprintf
(
out
,
"
\n
"
);
return
true
;
});
free
(
sql
);
free
(
sql
);
fclose
(
out
);
fclose
(
out
);
db_err_cmd
(
err
,
db_err_cmd
(
err
,
...
...
native/jni/include/db.h
View file @
370015a8
#ifndef DB_H
#pragma once
#define DB_H
#include <sqlite3.h>
#include <sqlite3.h>
#include <sys/stat.h>
#include <sys/stat.h>
#include <map>
#include <string>
#include <string_view>
#include <functional>
#define db_err(e) db_err_cmd(e, )
#define db_err(e) db_err_cmd(e, )
#define db_err_cmd(e, cmd) if (e) { \
#define db_err_cmd(e, cmd) if (e) { \
...
@@ -11,6 +14,30 @@
...
@@ -11,6 +14,30 @@
cmd;\
cmd;\
}
}
template
<
class
T
,
size_t
num
>
class
db_data_base
{
public
:
T
&
operator
[](
std
::
string_view
key
)
{
return
data
[
getKeyIdx
(
key
)];
}
const
T
&
operator
[](
std
::
string_view
key
)
const
{
return
data
[
getKeyIdx
(
key
)];
}
T
&
operator
[](
int
key
)
{
return
data
[
key
];
}
const
T
&
operator
[](
int
key
)
const
{
return
data
[
key
];
}
protected
:
T
data
[
num
+
1
];
virtual
int
getKeyIdx
(
std
::
string_view
key
)
const
=
0
;
};
/***************
/***************
* DB Settings *
* DB Settings *
***************/
***************/
...
@@ -55,17 +82,12 @@ enum {
...
@@ -55,17 +82,12 @@ enum {
NAMESPACE_MODE_ISOLATE
NAMESPACE_MODE_ISOLATE
};
};
class
db_settings
{
class
db_settings
:
public
db_data_base
<
int
,
DB_SETTINGS_NUM
>
{
public
:
public
:
db_settings
();
db_settings
();
int
&
operator
[](
const
char
*
);
const
int
&
operator
[](
const
char
*
)
const
;
protected
:
int
&
operator
[](
const
int
);
int
getKeyIdx
(
std
::
string_view
key
)
const
override
;
const
int
&
operator
[](
const
int
)
const
;
private
:
int
data
[
DB_SETTINGS_NUM
+
1
];
int
getKeyIdx
(
const
char
*
)
const
;
};
};
/**************
/**************
...
@@ -84,17 +106,9 @@ enum {
...
@@ -84,17 +106,9 @@ enum {
SU_MANAGER
=
0
SU_MANAGER
=
0
};
};
class
db_strings
{
class
db_strings
:
public
db_data_base
<
std
::
string
,
DB_STRING_NUM
>
{
public
:
protected
:
db_strings
();
int
getKeyIdx
(
std
::
string_view
key
)
const
override
;
char
*
operator
[](
const
char
*
);
const
char
*
operator
[](
const
char
*
)
const
;
char
*
operator
[](
const
int
);
const
char
*
operator
[](
const
int
)
const
;
private
:
char
data
[
DB_STRING_NUM
+
1
][
128
];
int
getKeyIdx
(
const
char
*
)
const
;
};
};
/*************
/*************
...
@@ -135,12 +149,14 @@ struct su_access {
...
@@ -135,12 +149,14 @@ struct su_access {
* Public Functions *
* Public Functions *
********************/
********************/
sqlite3
*
get_magiskdb
(
sqlite3
*&
db
);
typedef
std
::
map
<
std
::
string_view
,
std
::
string_view
>
db_row
;
int
get_db_settings
(
db_settings
*
dbs
,
int
key
=
-
1
);
typedef
std
::
function
<
bool
(
db_row
&
)
>
db_row_cb
;
int
get_db_strings
(
db_strings
*
str
,
int
key
=
-
1
);
int
get_uid_policy
(
int
uid
,
struct
su_access
*
su
);
int
get_db_settings
(
db_settings
&
cfg
,
int
key
=
-
1
);
int
validate_manager
(
char
*
alt_pkg
,
int
userid
,
struct
stat
*
st
);
int
get_db_strings
(
db_strings
&
str
,
int
key
=
-
1
);
int
get_uid_policy
(
int
uid
,
su_access
&
su
);
int
validate_manager
(
std
::
string
&
alt_pkg
,
int
userid
,
struct
stat
*
st
);
void
exec_sql
(
int
client
);
void
exec_sql
(
int
client
);
char
*
db_exec
(
const
char
*
sql
,
int
(
*
cb
)(
void
*
,
int
,
char
**
,
char
**
)
=
nullptr
,
void
*
v
=
nullptr
);
char
*
db_exec
(
const
char
*
sql
);
char
*
db_exec
(
const
char
*
sql
,
const
db_row_cb
&
fn
);
#endif //DB_H
native/jni/magiskhide/hide_utils.cpp
View file @
370015a8
...
@@ -204,24 +204,15 @@ static void init_list(const char *pkg, const char *proc) {
...
@@ -204,24 +204,15 @@ static void init_list(const char *pkg, const char *proc) {
kill_process
(
proc
);
kill_process
(
proc
);
}
}
static
int
db_init_list
(
void
*
,
int
col_num
,
char
**
data
,
char
**
cols
)
{
char
*
pkg
,
*
proc
;
for
(
int
i
=
0
;
i
<
col_num
;
++
i
)
{
if
(
strcmp
(
cols
[
i
],
"package_name"
)
==
0
)
pkg
=
data
[
i
];
else
if
(
strcmp
(
cols
[
i
],
"process"
)
==
0
)
proc
=
data
[
i
];
}
init_list
(
pkg
,
proc
);
return
0
;
}
#define LEGACY_LIST MODULEROOT "/.core/hidelist"
#define LEGACY_LIST MODULEROOT "/.core/hidelist"
bool
init_list
()
{
bool
init_list
()
{
LOGD
(
"hide_list: initialize
\n
"
);
LOGD
(
"hide_list: initialize
\n
"
);
char
*
err
=
db_exec
(
"SELECT * FROM hidelist"
,
db_init_list
);
char
*
err
=
db_exec
(
"SELECT * FROM hidelist"
,
[](
db_row
&
row
)
->
bool
{
init_list
(
row
[
"package_name"
].
data
(),
row
[
"process"
].
data
());
return
true
;
});
db_err_cmd
(
err
,
return
false
);
db_err_cmd
(
err
,
return
false
);
// Migrate old hide list into database
// Migrate old hide list into database
...
@@ -328,7 +319,7 @@ int stop_magiskhide() {
...
@@ -328,7 +319,7 @@ int stop_magiskhide() {
void
auto_start_magiskhide
()
{
void
auto_start_magiskhide
()
{
db_settings
dbs
;
db_settings
dbs
;
get_db_settings
(
&
dbs
,
HIDE_CONFIG
);
get_db_settings
(
dbs
,
HIDE_CONFIG
);
if
(
dbs
[
HIDE_CONFIG
])
{
if
(
dbs
[
HIDE_CONFIG
])
{
new_daemon_thread
([](
auto
)
->
void
*
{
new_daemon_thread
([](
auto
)
->
void
*
{
launch_magiskhide
(
-
1
);
launch_magiskhide
(
-
1
);
...
...
native/jni/su/connect.cpp
View file @
370015a8
...
@@ -33,7 +33,7 @@ static inline const char *get_command(const struct su_request *to) {
...
@@ -33,7 +33,7 @@ static inline const char *get_command(const struct su_request *to) {
static
void
silent_run
(
const
char
**
args
,
struct
su_info
*
info
)
{
static
void
silent_run
(
const
char
**
args
,
struct
su_info
*
info
)
{
char
component
[
128
];
char
component
[
128
];
sprintf
(
component
,
"%s/a.h"
,
info
->
str
[
SU_MANAGER
]);
sprintf
(
component
,
"%s/a.h"
,
info
->
str
[
SU_MANAGER
]
.
data
()
);
args
[
5
]
=
component
;
args
[
5
]
=
component
;
exec_t
exec
{
exec_t
exec
{
.
pre_exec
=
[]()
->
void
{
.
pre_exec
=
[]()
->
void
{
...
...
native/jni/su/su.h
View file @
370015a8
...
@@ -23,9 +23,9 @@ public:
...
@@ -23,9 +23,9 @@ public:
int
count
;
/* Just a count for debugging purpose */
int
count
;
/* Just a count for debugging purpose */
/* These values should be guarded with internal lock */
/* These values should be guarded with internal lock */
struct
db_settings
cfg
;
db_settings
cfg
;
struct
db_strings
str
;
db_strings
str
;
s
truct
s
u_access
access
;
su_access
access
;
struct
stat
mgr_st
;
struct
stat
mgr_st
;
/* These should be guarded with global cache lock */
/* These should be guarded with global cache lock */
...
...
native/jni/su/su_daemon.cpp
View file @
370015a8
...
@@ -63,8 +63,8 @@ void su_info::deRef() {
...
@@ -63,8 +63,8 @@ void su_info::deRef() {
static
void
database_check
(
su_info
*
info
)
{
static
void
database_check
(
su_info
*
info
)
{
int
uid
=
info
->
uid
;
int
uid
=
info
->
uid
;
get_db_settings
(
&
info
->
cfg
);
get_db_settings
(
info
->
cfg
);
get_db_strings
(
&
info
->
str
);
get_db_strings
(
info
->
str
);
// Check multiuser settings
// Check multiuser settings
switch
(
info
->
cfg
[
SU_MULTIUSER_MODE
])
{
switch
(
info
->
cfg
[
SU_MULTIUSER_MODE
])
{
...
@@ -83,7 +83,7 @@ static void database_check(su_info *info) {
...
@@ -83,7 +83,7 @@ static void database_check(su_info *info) {
}
}
if
(
uid
>
0
)
if
(
uid
>
0
)
get_uid_policy
(
uid
,
&
info
->
access
);
get_uid_policy
(
uid
,
info
->
access
);
// We need to check our manager
// We need to check our manager
if
(
info
->
access
.
log
||
info
->
access
.
notify
)
if
(
info
->
access
.
log
||
info
->
access
.
notify
)
...
...
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