/* * Copyright (C) 2017 Madura A. (madura.x86@gmail.com) * */ #include #include #include #include #include #include #include #include #include #define MAX_MATCHES 32 #define MAX_ARGS 1024 #define MAX_ARGS_LEN 4096 static void loader_main() __attribute__((constructor)); char cmdline[MAX_ARGS_LEN]; char *args[MAX_ARGS]; char loader[] = "firejail"; char confFile[256]; char *names[MAX_MATCHES]; #ifdef DEBUG #define DBG printf #else #define DBG #endif void remove_trailing_spaces(char *str) { while (!isspace(*str)) { str++; } while (*str != '\0') { *str = '\0'; str++; } } void read_cmdline() { int fd = open("/proc/self/cmdline", O_RDONLY); ssize_t ret = 0, total = 0; char* wcmdbuf = cmdline; while ((ret = read(fd, wcmdbuf, 1)) != 0) { wcmdbuf++; total += ret; if (total > MAX_ARGS_LEN) { printf("Not enough memory\n"); close(fd); return ; } } close(fd); } void make_args() { int cI = 0, argI=0; char* argstart = &cmdline[0]; for (;cI