]> git.ipfire.org Git - pakfire.git/commitdiff
jail: Keep log messages in the logger
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 30 Sep 2023 12:13:33 +0000 (12:13 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 30 Sep 2023 12:13:33 +0000 (12:13 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/jail.c

index 2ffca2b2fc0302ca4bbf2c393102bfad009adbed..62c31a7467a815754b029dae1f7f730b7ca8d44b 100644 (file)
@@ -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();