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;
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;
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) {
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();