From: Michael Tremer Date: Sat, 30 Sep 2023 12:13:33 +0000 (+0000) Subject: jail: Keep log messages in the logger X-Git-Tag: 0.9.30~1589 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=19e50d86c4bc52a6639c172f649c555569532630;p=pakfire.git jail: Keep log messages in the logger Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/jail.c b/src/libpakfire/jail.c index 2ffca2b2f..62c31a746 100644 --- a/src/libpakfire/jail.c +++ b/src/libpakfire/jail.c @@ -549,7 +549,7 @@ static int pakfire_jail_handle_signals(struct pakfire_jail* jail) { All log messages will be sent to the parent process through their respective pipes. */ -static void pakfire_jail_log(void* data, int priority, const char* file, +static void pakfire_jail_log_redirect(void* data, int priority, const char* file, int line, const char* fn, const char* format, va_list args) { struct pakfire_jail_pipes* pipes = (struct pakfire_jail_pipes*)data; int fd; @@ -741,6 +741,14 @@ static int pakfire_jail_get_pipe_to_write(struct pakfire_jail* jail, int (*fds)[ return *fd_write; } +static int pakfire_jail_log(struct pakfire* pakfire, void* data, int priority, + const char* line, const size_t length) { + // Pass everything to the parent logger + pakfire_log_condition(pakfire, priority, 0, "%.*s", (int)length, line); + + return 0; +} + static int pakfire_jail_wait(struct pakfire_jail* jail, struct pakfire_jail_exec* ctx) { int epollfd = -1; struct epoll_event ev; @@ -918,22 +926,19 @@ static int pakfire_jail_wait(struct pakfire_jail* jail, struct pakfire_jail_exec buffer = &ctx->buffers.log_INFO; priority = LOG_INFO; - callback = jail->callbacks.log; - data = jail->callbacks.log_data; + callback = pakfire_jail_log; } else if (fd == log_ERROR) { buffer = &ctx->buffers.log_ERROR; priority = LOG_ERR; - callback = jail->callbacks.log; - data = jail->callbacks.log_data; + callback = pakfire_jail_log; } else if (fd == log_DEBUG) { buffer = &ctx->buffers.log_DEBUG; priority = LOG_DEBUG; - callback = jail->callbacks.log; - data = jail->callbacks.log_data; + callback = pakfire_jail_log; // Handle anything from the log pipes } else if (fd == stdout) { @@ -1633,7 +1638,7 @@ static int pakfire_jail_child(struct pakfire_jail* jail, struct pakfire_jail_exe int r; // Redirect any logging to our log pipe - pakfire_set_log_callback(jail->pakfire, pakfire_jail_log, &ctx->pipes); + pakfire_set_log_callback(jail->pakfire, pakfire_jail_log_redirect, &ctx->pipes); // Fetch my own PID pid_t pid = getpid();