From 1bf39637149445df5fa76fe48a75ce7fa36a540b Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Mon, 21 Feb 2022 12:39:02 +0100 Subject: [PATCH] lib: Fix losing log prefix or IP change when log process is busy The fd for writing to log process is non-blocking. When sending options to log process, it was done with write_full(), which stopped whenever EAGAIN was returned. This error was simply ignored, and the logging code thought that the prefix was successfully changed (or the IP was sent). This mainly caused a problem when processes were reused and log process was busy. The prefix update could have failed, and the following logging would be using the previous session's log prefix, i.e. log lines could have been logged for the wrong user/session. Broken by 9372e48b702a3af5705785e08fbf47b0e37f2047 --- src/lib/failures.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/failures.c b/src/lib/failures.c index 42ce6d7d6f..2273bd4b1c 100644 --- a/src/lib/failures.c +++ b/src/lib/failures.c @@ -726,7 +726,8 @@ static void i_failure_send_option_forced(const char *key, const char *value) str = t_strdup_printf("\001%c%s %s=%s\n", LOG_TYPE_OPTION+1, my_pid, key, value); - (void)write_full(STDERR_FILENO, str, strlen(str)); + (void)log_fd_write(STDERR_FILENO, (const unsigned char *)str, + strlen(str)); } static void i_failure_send_option(const char *key, const char *value) -- 2.47.3