git: d556719e15d6 - main - syslogd: Keep console and tty descriptors open

From: Mark Johnston <markj_at_FreeBSD.org>
Date: Mon, 16 Oct 2023 13:12:27 UTC
The branch main has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=d556719e15d643ba9619bbbeab550eed87614525

commit d556719e15d643ba9619bbbeab550eed87614525
Author:     Jake Freeland <jfree@FreeBSD.org>
AuthorDate: 2023-10-15 20:34:06 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2023-10-16 13:11:58 +0000

    syslogd: Keep console and tty descriptors open
    
    Console and tty descriptors are initially opened in parse_action() to
    determine whether they are valid using isatty(). That descriptor is then
    closed because it is never accessed by syslogd again; ttymsg() will reopen
    the tty/console under a new descriptor when needed.
    
    If the user attempts to log to a tty that is inactive outside of
    syslogd, then syslogd must keep that descriptor open so the tty remains
    accessible. For example, logging to `/dev/ttyvb` requires the initial
    `/dev/ttyvb` descriptor to stay open so the user can view its buffer at
    any time via CTRL+ALT+F12.
    
    As a result, console and tty descriptors must remain open until a
    potential configuration reload or a system shutdown. The given
    descriptor will be closed in close_filed() in such circumstances.
    
    PR:             274454
    Fixes:          c3175a6e1c5a ("syslogd: Do not open console descriptor")
    Reported by:    Trond Endrestøl <Trond.Endrestol@ximalas.info>
    Reviewed by:    markj
    Differential Revision:  https://reviews.freebsd.org/D42215
---
 usr.sbin/syslogd/syslogd.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c
index 7db5bab11008..11d1033651a8 100644
--- a/usr.sbin/syslogd/syslogd.c
+++ b/usr.sbin/syslogd/syslogd.c
@@ -3053,9 +3053,6 @@ parse_action(const char *p, struct filed *f)
 				f->f_type = F_TTY;
 			(void)strlcpy(f->fu_fname, p + sizeof(_PATH_DEV) - 1,
 			    sizeof(f->fu_fname));
-			/* This will be reopened by ttymsg(). */
-			close(f->f_file);
-			f->f_file = -1;
 		} else {
 			(void)strlcpy(f->fu_fname, p, sizeof(f->fu_fname));
 			f->f_type = F_FILE;