From 48ce6ddfde98185060510a021cde369933246191 Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Thu, 18 Feb 2021 11:18:49 -0500 Subject: add logging of user and command when executed --- exec/exec.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/exec/exec.c b/exec/exec.c index 4a8b22f..f00f768 100644 --- a/exec/exec.c +++ b/exec/exec.c @@ -1,12 +1,34 @@ -#define _POSIX_C_SOURCE 200809L +#define _XOPEN_SOURCE 700 #include +#include +#include #include #include +#include #include +#define PRIVEXEC_LOG_ID "privexec" #define NOT_RUN (126) #define NOT_FOUND (127) +#ifndef ARG_MAX +#define ARG_MAX _POSIX_ARG_MAX +#endif + +void log_execution(int argc, char *argv[]) +{ + char cmd[ARG_MAX] = ""; + strncat(cmd, argv[1], sizeof(cmd) - 1); + for (int i = 2; i < argc; i++) { + strncat(cmd, " ", sizeof(cmd) - 1); + strncat(cmd, argv[i], sizeof(cmd) - 1); + } + + openlog(PRIVEXEC_LOG_ID, LOG_PID, LOG_AUTH); + syslog(LOG_INFO, "UID %jd running \"%s\"", (intmax_t)getuid(), cmd); + closelog(); +} + int main(int argc, char *argv[]) { if (argc < 2 || argv == NULL) { @@ -14,6 +36,8 @@ int main(int argc, char *argv[]) return NOT_RUN; } + log_execution(argc, argv); + setuid(geteuid()); execvp(argv[1], argv + 1); fprintf(stderr, "%s: %s: %s\n", argv[0], argv[1], strerror(errno)); -- cgit v1.2.1