Adjustments for unified binary
This commit is contained in:
parent
e103676b65
commit
3800b4b45c
@ -2,10 +2,11 @@ LOCAL_PATH := $(call my-dir)
|
|||||||
|
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
LOCAL_MODULE := su
|
LOCAL_MODULE := su
|
||||||
LOCAL_STATIC_LIBRARIES := libselinux
|
LOCAL_STATIC_LIBRARIES := libselinux libsqlite3
|
||||||
LOCAL_C_INCLUDES := jni/selinux/libselinux/include/ jni/selinux/libsepol/include/ jni/su/sqlite3/
|
LOCAL_C_INCLUDES := jni/selinux/libselinux/include/ jni/selinux/libsepol/include/ jni/sqlite3/
|
||||||
LOCAL_SRC_FILES := su.c daemon.c activity.c db.c utils.c pts.c sqlite3/sqlite3.c
|
LOCAL_SRC_FILES := su.c daemon.c activity.c db.c utils.c pts.c
|
||||||
LOCAL_CFLAGS := -DSQLITE_OMIT_LOAD_EXTENSION -std=gnu11
|
LOCAL_CFLAGS := -DSQLITE_OMIT_LOAD_EXTENSION -DINDEP_BINARY
|
||||||
include $(BUILD_EXECUTABLE)
|
include $(BUILD_EXECUTABLE)
|
||||||
|
|
||||||
include jni/selinux/libselinux/Android.mk
|
include jni/selinux/libselinux/Android.mk
|
||||||
|
include jni/sqlite3/Android.mk
|
||||||
|
34
indep_bin.h
Normal file
34
indep_bin.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/* This file is here because is uses some same macros in magisk.h
|
||||||
|
* So we have to remove them from su.h.
|
||||||
|
* However, if we want to build our own binary, we still have to define them
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _INDEP_BIN_H_
|
||||||
|
#define _INDEP_BIN_H_
|
||||||
|
|
||||||
|
#ifdef LOG_TAG
|
||||||
|
#undef LOG_TAG
|
||||||
|
#endif
|
||||||
|
#define LOG_TAG "su"
|
||||||
|
|
||||||
|
// fallback to using /system/bin/log.
|
||||||
|
// can't use liblog.so because this is a static binary.
|
||||||
|
#ifndef LOGE
|
||||||
|
#define LOGE exec_loge
|
||||||
|
#endif
|
||||||
|
#ifndef LOGD
|
||||||
|
#define LOGD exec_logd
|
||||||
|
#endif
|
||||||
|
#ifndef LOGW
|
||||||
|
#define LOGW exec_logw
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
#define PLOGE(fmt,args...) LOGE(fmt " failed with %d: %s", ##args, errno, strerror(errno))
|
||||||
|
#define PLOGEV(fmt,err,args...) LOGE(fmt " failed with %d: %s", ##args, err, strerror(err))
|
||||||
|
|
||||||
|
int su_main(int argc, char *argv[]);
|
||||||
|
|
||||||
|
#endif
|
137414
sqlite3/sqlite3.c
137414
sqlite3/sqlite3.c
File diff suppressed because it is too large
Load Diff
7160
sqlite3/sqlite3.h
7160
sqlite3/sqlite3.h
File diff suppressed because it is too large
Load Diff
18
su.c
18
su.c
@ -45,6 +45,12 @@
|
|||||||
#include "su.h"
|
#include "su.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
|
#ifdef INDEP_BINARY
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
return su_main(argc, argv);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
extern int is_daemon;
|
extern int is_daemon;
|
||||||
extern int daemon_from_uid;
|
extern int daemon_from_uid;
|
||||||
extern int daemon_from_pid;
|
extern int daemon_from_pid;
|
||||||
@ -595,16 +601,12 @@ static char *concat_commands(int argc, char *argv[]) {
|
|||||||
return strdup(command);
|
return strdup(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int su_main(int argc, char *argv[]) {
|
||||||
if (argc == 2 && strcmp(argv[1], "--daemon") == 0) {
|
if (argc == 2 && strcmp(argv[1], "--daemon") == 0) {
|
||||||
//Everything we'll exec will be in su, not su_daemon
|
//Everything we'll exec will be in su, not su_daemon
|
||||||
setexeccon("u:r:su:s0");
|
setexeccon("u:r:su:s0");
|
||||||
return run_daemon();
|
return run_daemon();
|
||||||
}
|
}
|
||||||
return su_main(argc, argv);
|
|
||||||
}
|
|
||||||
|
|
||||||
int su_main(int argc, char *argv[]) {
|
|
||||||
int ppid = getppid();
|
int ppid = getppid();
|
||||||
if ((geteuid() != AID_ROOT && getuid() != AID_ROOT) ||
|
if ((geteuid() != AID_ROOT && getuid() != AID_ROOT) ||
|
||||||
(get_api_version() >= 18 && getuid() == AID_SHELL) ||
|
(get_api_version() >= 18 && getuid() == AID_SHELL) ||
|
||||||
@ -863,7 +865,7 @@ int su_main_nodaemon(int argc, char **argv) {
|
|||||||
|
|
||||||
mkdir(REQUESTOR_CACHE_PATH, 0770);
|
mkdir(REQUESTOR_CACHE_PATH, 0770);
|
||||||
if (chown(REQUESTOR_CACHE_PATH, st.st_uid, st.st_gid)) {
|
if (chown(REQUESTOR_CACHE_PATH, st.st_uid, st.st_gid)) {
|
||||||
PLOGE("chown (%s, %ld, %ld)", REQUESTOR_CACHE_PATH, st.st_uid, st.st_gid);
|
PLOGE("chown (%s, %u, %u)", REQUESTOR_CACHE_PATH, st.st_uid, st.st_gid);
|
||||||
deny(&ctx);
|
deny(&ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -872,11 +874,11 @@ int su_main_nodaemon(int argc, char **argv) {
|
|||||||
deny(&ctx);
|
deny(&ctx);
|
||||||
}
|
}
|
||||||
if (setegid(st.st_gid)) {
|
if (setegid(st.st_gid)) {
|
||||||
PLOGE("setegid (%lu)", st.st_gid);
|
PLOGE("setegid (%u)", st.st_gid);
|
||||||
deny(&ctx);
|
deny(&ctx);
|
||||||
}
|
}
|
||||||
if (seteuid(st.st_uid)) {
|
if (seteuid(st.st_uid)) {
|
||||||
PLOGE("seteuid (%lu)", st.st_uid);
|
PLOGE("seteuid (%u)", st.st_uid);
|
||||||
deny(&ctx);
|
deny(&ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
34
su.h
34
su.h
@ -18,10 +18,12 @@
|
|||||||
#ifndef SU_h
|
#ifndef SU_h
|
||||||
#define SU_h 1
|
#define SU_h 1
|
||||||
|
|
||||||
#ifdef LOG_TAG
|
#ifdef INDEP_BINARY
|
||||||
#undef LOG_TAG
|
#include "indep_bin.h"
|
||||||
|
#else
|
||||||
|
#include "magisk.h"
|
||||||
#endif
|
#endif
|
||||||
#define LOG_TAG "su"
|
|
||||||
|
|
||||||
#ifndef AID_SHELL
|
#ifndef AID_SHELL
|
||||||
#define AID_SHELL (get_shell_uid())
|
#define AID_SHELL (get_shell_uid())
|
||||||
@ -178,30 +180,4 @@ int su_main_nodaemon(int argc, char *argv[]);
|
|||||||
// deadbeat dad fork.
|
// deadbeat dad fork.
|
||||||
int fork_zero_fucks();
|
int fork_zero_fucks();
|
||||||
|
|
||||||
// fallback to using /system/bin/log.
|
|
||||||
// can't use liblog.so because this is a static binary.
|
|
||||||
#ifndef LOGE
|
|
||||||
#define LOGE exec_loge
|
|
||||||
#endif
|
|
||||||
#ifndef LOGD
|
|
||||||
#define LOGD exec_logd
|
|
||||||
#endif
|
|
||||||
#ifndef LOGW
|
|
||||||
#define LOGW exec_logw
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
#undef LOGE
|
|
||||||
#define LOGE(fmt,args...) fprintf(stderr, fmt, ##args)
|
|
||||||
#undef LOGD
|
|
||||||
#define LOGD(fmt,args...) fprintf(stderr, fmt, ##args)
|
|
||||||
#undef LOGW
|
|
||||||
#define LOGW(fmt,args...) fprintf(stderr, fmt, ##args)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <string.h>
|
|
||||||
#define PLOGE(fmt,args...) LOGE(fmt " failed with %d: %s", ##args, errno, strerror(errno))
|
|
||||||
#define PLOGEV(fmt,err,args...) LOGE(fmt " failed with %d: %s", ##args, err, strerror(err))
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user