diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2024-06-14 22:47:51 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-06-21 15:32:34 +0200 |
commit | afd9cdc9bb48fdff18d6506e6f5051de35490397 (patch) | |
tree | 10156a46f48450a90b1b3bd0065dd44a8d16ec31 /passt.c | |
parent | 8c2f24a5604ad908d6d65b64bf7675e04e2d7277 (diff) | |
download | passt-afd9cdc9bb48fdff18d6506e6f5051de35490397.tar passt-afd9cdc9bb48fdff18d6506e6f5051de35490397.tar.gz passt-afd9cdc9bb48fdff18d6506e6f5051de35490397.tar.bz2 passt-afd9cdc9bb48fdff18d6506e6f5051de35490397.tar.lz passt-afd9cdc9bb48fdff18d6506e6f5051de35490397.tar.xz passt-afd9cdc9bb48fdff18d6506e6f5051de35490397.tar.zst passt-afd9cdc9bb48fdff18d6506e6f5051de35490397.zip |
log, passt: Always print to stderr before initialisation is complete
After commit 15001b39ef1d ("conf: set the log level much earlier"), we
had a phase during initialisation when messages wouldn't be printed to
standard error anymore.
Commit f67238aa864d ("passt, log: Call __openlog() earlier, log to
stderr until we detach") fixed that, but only for the case where no
log files are given.
If a log file is configured, vlogmsg() will not call passt_vsyslog(),
but during initialisation, LOG_PERROR is set, so to avoid duplicated
prints (which would result from passt_vsyslog() printing to stderr),
we don't call fprintf() from vlogmsg() either.
This is getting a bit too complicated. Instead of abusing LOG_PERROR,
define an internal logging flag that clearly represents that we're not
done with the initialisation phase yet.
If this flag is not set, make sure we always print to stderr, if the
log mask matches.
Reported-by: Yalan Zhang <yalzhang@redhat.com>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'passt.c')
-rw-r--r-- | passt.c | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -200,8 +200,8 @@ void exit_handler(int signal) int main(int argc, char **argv) { struct epoll_event events[EPOLL_EVENTS]; - char *log_name, argv0[PATH_MAX], *name; int nfds, i, devnull_fd = -1; + char argv0[PATH_MAX], *name; struct ctx c = { 0 }; struct rlimit limit; struct timespec now; @@ -225,7 +225,7 @@ 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); + __openlog("pasta", 0, LOG_DAEMON); sa.sa_handler = pasta_child_handler; if (sigaction(SIGCHLD, &sa, NULL)) { @@ -240,7 +240,7 @@ int main(int argc, char **argv) c.mode = MODE_PASTA; } else if (strstr(name, "passt")) { - __openlog(log_name = "passt", LOG_PERROR, LOG_DAEMON); + __openlog("passt", 0, LOG_DAEMON); c.mode = MODE_PASST; } else { @@ -303,13 +303,12 @@ int main(int argc, char **argv) die("Failed to sandbox process, exiting"); if (!c.foreground) - __openlog(log_name, 0, LOG_DAEMON); - - if (!c.foreground) __daemon(c.pidfile_fd, devnull_fd); else pidfile_write(c.pidfile_fd, getpid()); + log_runtime = true; + if (pasta_child_pid) kill(pasta_child_pid, SIGUSR1); |