From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by passt.top (Postfix, from userid 1000) id 0EE7D5A026F; Tue, 12 Mar 2024 23:34:48 +0100 (CET) From: Stefano Brivio To: passt-dev@passt.top Subject: [PATCH] passt, log: Call __openlog() earlier, log to stderr until we detach Date: Tue, 12 Mar 2024 23:34:48 +0100 Message-Id: <20240312223448.649997-1-sbrivio@redhat.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: WNRY4VQKVDI6DDPQ7X4EOSD6AZR3WRAD X-Message-ID-Hash: WNRY4VQKVDI6DDPQ7X4EOSD6AZR3WRAD X-MailFrom: sbrivio@passt.top X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Paul Holzinger , David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Paul reports that, with commit 15001b39ef1d ("conf: set the log level much earlier"), early messages aren't reported to standard error anymore. The reason is that, once the log mask is changed from LOG_EARLY, we don't force logging to stderr, and this mechanism was abused to have early errors on stderr. Now that we drop LOG_EARLY earlier on, this doesn't work anymore. Call __openlog() as soon as we know the mode we're running as, using LOG_PERROR. Then, once we detach, if we're not running from an interactive terminal and logging to standard error is not forced, drop LOG_PERROR from the options. While at it, make sure we don't print messages to standard error reporting that we couldn't log to the system logger, if we didn't open a connection yet. That's expected. Reported-by: Paul Holzinger Fixes: 15001b39ef1d ("conf: set the log level much earlier") Signed-off-by: Stefano Brivio --- log.c | 2 +- passt.c | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/log.c b/log.c index eafaca2..bdd31b4 100644 --- a/log.c +++ b/log.c @@ -174,7 +174,7 @@ void passt_vsyslog(int pri, const char *format, va_list ap) if (log_opt & LOG_PERROR) fprintf(stderr, "%s", buf + prefix_len); - if (send(log_sock, buf, n, 0) != n) + if (log_sock >= 0 && send(log_sock, buf, n, 0) != n) fprintf(stderr, "Failed to send %i bytes to syslog\n", n); } diff --git a/passt.c b/passt.c index f430648..e4cb11e 100644 --- a/passt.c +++ b/passt.c @@ -225,6 +225,8 @@ int main(int argc, char **argv) strncpy(argv0, argv[0], PATH_MAX - 1); name = basename(argv0); if (strstr(name, "pasta")) { + __openlog(log_name = "pasta", LOG_PERROR, LOG_DAEMON); + sa.sa_handler = pasta_child_handler; if (sigaction(SIGCHLD, &sa, NULL)) { die("Couldn't install signal handlers: %s", @@ -237,18 +239,16 @@ int main(int argc, char **argv) } c.mode = MODE_PASTA; - log_name = "pasta"; } else if (strstr(name, "passt")) { + __openlog(log_name = "passt", LOG_PERROR, LOG_DAEMON); + c.mode = MODE_PASST; - log_name = "passt"; } else { exit(EXIT_FAILURE); } madvise(pkt_buf, TAP_BUF_BYTES, MADV_HUGEPAGE); - __openlog(log_name, 0, LOG_DAEMON); - c.epollfd = epoll_create1(EPOLL_CLOEXEC); if (c.epollfd == -1) { perror("epoll_create1"); @@ -269,9 +269,6 @@ int main(int argc, char **argv) conf(&c, argc, argv); trace_init(c.trace); - if (c.force_stderr || isatty(fileno(stdout))) - __openlog(log_name, LOG_PERROR, LOG_DAEMON); - pasta_netns_quit_init(&c); tap_sock_init(&c); @@ -314,6 +311,9 @@ int main(int argc, char **argv) if (isolate_prefork(&c)) die("Failed to sandbox process, exiting"); + if (!c.force_stderr && !isatty(fileno(stdout))) + __openlog(log_name, 0, LOG_DAEMON); + if (!c.foreground) __daemon(pidfile_fd, devnull_fd); else -- 2.39.2