conf, passt: Don't try to log to stderr after we close it

If we don't run in foreground, we close standard error as we
daemonise, so it makes no sense to check if the controlling terminal
is an interactive terminal or if --force-stderr was given, to decide
if we want to log to standard error.

Make --force-stderr depend on --foreground.

Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
Stefano Brivio 2024-06-06 17:18:32 +02:00
parent 65923ba798
commit b74801645c
2 changed files with 4 additions and 1 deletions

3
conf.c
View file

@ -1631,6 +1631,9 @@ void conf(struct ctx *c, int argc, char **argv)
conf_ugid(runas, &uid, &gid); conf_ugid(runas, &uid, &gid);
if (!c->foreground && c->force_stderr)
die("Can't log to standard error if not running in foreground");
if (logfile) { if (logfile) {
logfile_init(c->mode == MODE_PASTA ? "pasta" : "passt", logfile_init(c->mode == MODE_PASTA ? "pasta" : "passt",
logfile, logsize); logfile, logsize);

View file

@ -302,7 +302,7 @@ int main(int argc, char **argv)
if (isolate_prefork(&c)) if (isolate_prefork(&c))
die("Failed to sandbox process, exiting"); die("Failed to sandbox process, exiting");
if (!c.force_stderr && !isatty(fileno(stderr))) if (!c.foreground || (!c.force_stderr && !isatty(fileno(stderr))))
__openlog(log_name, 0, LOG_DAEMON); __openlog(log_name, 0, LOG_DAEMON);
if (!c.foreground) if (!c.foreground)