Optimize logging in Magisk Manager

This commit is contained in:
topjohnwu
2018-10-27 22:06:24 -04:00
parent 1046dd5eda
commit bf4a46d57c
8 changed files with 105 additions and 46 deletions

View File

@@ -15,32 +15,31 @@ static int ver_cb(void *v, int col_num, char **data, char **col_name) {
sqlite3 *get_magiskdb() {
sqlite3 *db;
char *err;
int ret = sqlite3_open(MAGISKDB, &db);
if (ret) {
LOGE("sqlite3 open failure: %s\n", sqlite3_errstr(ret));
return NULL;
}
int ver, upgrade = 0;
sqlite3_exec(db, "PRAGMA user_version", ver_cb, &ver, &err);
sqlite3_exec(db, "PRAGMA user_version", ver_cb, &ver, NULL);
if (ver < 3) {
// Policies
sqlite3_exec(db,
"CREATE TABLE IF NOT EXISTS policies "
"(uid INT, package_name TEXT, policy INT, until INT, "
"logging INT, notification INT, PRIMARY KEY(uid))",
NULL, NULL, &err);
NULL, NULL, NULL);
// Logs
sqlite3_exec(db,
"CREATE TABLE IF NOT EXISTS logs "
"(from_uid INT, package_name TEXT, app_name TEXT, from_pid INT, "
"to_uid INT, action INT, time INT, command TEXT)",
NULL, NULL, &err);
NULL, NULL, NULL);
// Settings
sqlite3_exec(db,
"CREATE TABLE IF NOT EXISTS settings "
"(key TEXT, value INT, PRIMARY KEY(key))",
NULL, NULL, &err);
NULL, NULL, NULL);
ver = 3;
upgrade = 1;
}
@@ -49,12 +48,12 @@ sqlite3 *get_magiskdb() {
sqlite3_exec(db,
"CREATE TABLE IF NOT EXISTS strings "
"(key TEXT, value TEXT, PRIMARY KEY(key))",
NULL, NULL, &err);
NULL, NULL, NULL);
ver = 4;
upgrade = 1;
}
if (ver == 4) {
sqlite3_exec(db, "UPDATE policies SET uid=uid%100000", NULL, NULL, &err);
sqlite3_exec(db, "UPDATE policies SET uid=uid%100000", NULL, NULL, NULL);
/* Skip version 5 */
ver = 6;
upgrade = 1;
@@ -64,7 +63,7 @@ sqlite3 *get_magiskdb() {
// Set version
char query[32];
sprintf(query, "PRAGMA user_version=%d", ver);
sqlite3_exec(db, query, NULL, NULL, &err);
sqlite3_exec(db, query, NULL, NULL, NULL);
}
return db;
}
@@ -102,6 +101,7 @@ int get_db_settings(sqlite3 *db, int key, struct db_settings *dbs) {
}
if (err) {
LOGE("sqlite3_exec: %s\n", err);
sqlite3_free(err);
return 1;
}
return 0;
@@ -141,6 +141,7 @@ int get_db_strings(sqlite3 *db, int key, struct db_strings *str) {
}
if (err) {
LOGE("sqlite3_exec: %s\n", err);
sqlite3_free(err);
return 1;
}
return 0;
@@ -169,6 +170,7 @@ int get_uid_policy(sqlite3 *db, int uid, struct su_access *su) {
sqlite3_exec(db, query, policy_cb, su, &err);
if (err) {
LOGE("sqlite3_exec: %s\n", err);
sqlite3_free(err);
return 1;
}
return 0;

View File

@@ -82,11 +82,37 @@ void app_log(struct su_context *ctx) {
"--ei", "pid", pid,
"--ei", "policy", policy,
"--es", "command", get_command(&ctx->req),
"--ez", "notify", ctx->info->access.notify ? "true" : "false",
NULL
};
silent_run(cmd);
}
void app_notify(struct su_context *ctx) {
char user[8];
setup_user(user, ctx->info);
char fromUid[8];
sprintf(fromUid, "%d",
DB_SET(ctx->info, SU_MULTIUSER_MODE) == MULTIUSER_MODE_OWNER_MANAGED ?
ctx->info->uid % 100000 : ctx->info->uid);
char policy[2];
sprintf(policy, "%d", ctx->info->access.policy);
char *cmd[] = {
AM_PATH, "broadcast",
"-a", "android.intent.action.BOOT_COMPLETED",
"-p", DB_STR(ctx->info, SU_MANAGER),
"--user", user,
"--es", "action", "notify",
"--ei", "from.uid", fromUid,
"--ei", "policy", policy,
NULL
};
silent_run(cmd);
}
void app_connect(const char *socket, struct su_info *info) {
char user[8];
setup_user(user, info);

View File

@@ -54,6 +54,7 @@ struct su_context {
// connect.c
void app_log(struct su_context *ctx);
void app_notify(struct su_context *ctx);
void app_connect(const char *socket, struct su_info *info);
void socket_send_request(int fd, struct su_info *info);

View File

@@ -361,8 +361,10 @@ void su_daemon_handler(int client, struct ucred *credential) {
break;
}
if (info->access.notify || info->access.log)
if (info->access.log)
app_log(&ctx);
else if (info->access.notify)
app_notify(&ctx);
if (info->access.policy == ALLOW) {
char* argv[] = { NULL, NULL, NULL, NULL };