aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJake Freeland <jfree@FreeBSD.org>2023-09-01 02:51:12 +0000
committerMark Johnston <markj@FreeBSD.org>2023-09-28 15:51:54 +0000
commitc3175a6e1c5a4b6337368ea140e3a3837b327ef2 (patch)
tree0524ae654c9f0ebd53625486dfabbca1eb666467
parent5b44c24f8524558b4e4c4c24dc465e9f4eed5ae9 (diff)
downloadsrc-c3175a6e1c5a4b6337368ea140e3a3837b327ef2.tar.gz
src-c3175a6e1c5a4b6337368ea140e3a3837b327ef2.zip
syslogd: Do not open console descriptor
Setup consfile filed for logging while Initialized is false, but do not bother opening the console. Close console/tty descriptors after parsing, as well. The ttymsg() function will re-open these descriptors for us. Also, remove references to the ctty global variable since it will always be _PATH_CONSOLE. Reviewed by: markj MFC after: 3 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D41380
-rw-r--r--usr.sbin/syslogd/syslogd.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c
index 5ccea8ce424b..9f4c21cab026 100644
--- a/usr.sbin/syslogd/syslogd.c
+++ b/usr.sbin/syslogd/syslogd.c
@@ -154,7 +154,6 @@ static char sccsid[] = "@(#)syslogd.c 8.3 (Berkeley) 4/4/94";
static const char *ConfFile = _PATH_LOGCONF;
static const char *PidFile = _PATH_LOGPID;
-static const char ctty[] = _PATH_CONSOLE;
static const char include_str[] = "include";
static const char include_ext[] = ".conf";
@@ -800,6 +799,12 @@ main(int argc, char *argv[])
if (Sflag == 0)
addsock(_PATH_LOG_PRIV, NULL, S_IRUSR | S_IWUSR);
+ consfile.f_type = F_CONSOLE;
+ consfile.f_file = -1;
+ (void)strlcpy(consfile.fu_fname, _PATH_CONSOLE + sizeof(_PATH_DEV) - 1,
+ sizeof(consfile.fu_fname));
+ (void)strlcpy(bootfile, getbootfile(), sizeof(bootfile));
+
if ((!Foreground) && (!Debug)) {
ppid = waitdaemon(30);
if (ppid < 0) {
@@ -810,11 +815,6 @@ main(int argc, char *argv[])
} else if (Debug)
setlinebuf(stdout);
- consfile.f_type = F_CONSOLE;
- (void)strlcpy(consfile.fu_fname, ctty + sizeof(_PATH_DEV) - 1,
- sizeof(consfile.fu_fname));
- (void)strlcpy(bootfile, getbootfile(), sizeof(bootfile));
-
kq = kqueue();
if (kq == -1) {
warn("failed to initialize kqueue");
@@ -1651,20 +1651,9 @@ logmsg(int pri, const struct logtime *timestamp, const char *hostname,
/* log the message to the particular outputs */
if (!Initialized) {
- f = &consfile;
- /*
- * Open in non-blocking mode to avoid hangs during open
- * and close(waiting for the port to drain).
- */
- f->f_file = open(ctty, O_WRONLY | O_NONBLOCK, 0);
-
- if (f->f_file >= 0) {
- f->f_lasttime = *timestamp;
- fprintlog_first(f, hostname, app_name, procid, msgid,
- structured_data, msg, flags);
- close(f->f_file);
- f->f_file = -1;
- }
+ consfile.f_lasttime = *timestamp;
+ fprintlog_first(&consfile, hostname, app_name, procid,
+ msgid, structured_data, msg, flags);
return;
}
@@ -3049,12 +3038,15 @@ parse_action(const char *p, struct filed *f)
if (syncfile)
f->f_flags |= FFLAG_SYNC;
if (isatty(f->f_file)) {
- if (strcmp(p, ctty) == 0)
+ if (strcmp(p, _PATH_CONSOLE) == 0)
f->f_type = F_CONSOLE;
else
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;