If syslogd encounters an error while processing syslog.conf the
error message goes to the console since logging has not been setup
yet.

However, in this case, neither f->f_lasttime nor f->f_prevhost are
set.  This results in 15 NUL bytes and two space characters preceding
the actual message on the console.

The trivial fix is to check for the empty strings in fprintlog().
Alternately, we could set the timestamp and hostname in logmsg()
before calling fprintlog() in the !Initialized case.

 - todd

Index: usr.sbin/syslogd/syslogd.c
===================================================================
RCS file: /cvs/src/usr.sbin/syslogd/syslogd.c,v
retrieving revision 1.205
diff -u -p -u -r1.205 syslogd.c
--- usr.sbin/syslogd/syslogd.c  2 Apr 2016 19:55:10 -0000       1.205
+++ usr.sbin/syslogd/syslogd.c  1 Jul 2016 13:06:04 -0000
@@ -1738,20 +1738,36 @@ fprintlog(struct filed *f, int flags, ch
                v->iov_base = "";
                v->iov_len = 0;
                v++;
-       } else {
+       } else if (f->f_lasttime[0] != '\0') {
                v->iov_base = f->f_lasttime;
                v->iov_len = 15;
                v++;
                v->iov_base = " ";
                v->iov_len = 1;
                v++;
+       } else {
+               v->iov_base = "";
+               v->iov_len = 0;
+               v++;
+               v->iov_base = "";
+               v->iov_len = 0;
+               v++;
+       }
+       if (f->f_prevhost[0] != '\0') {
+               v->iov_base = f->f_prevhost;
+               v->iov_len = strlen(v->iov_base);
+               v++;
+               v->iov_base = " ";
+               v->iov_len = 1;
+               v++;
+       } else {
+               v->iov_base = "";
+               v->iov_len = 0;
+               v++;
+               v->iov_base = "";
+               v->iov_len = 0;
+               v++;
        }
-       v->iov_base = f->f_prevhost;
-       v->iov_len = strlen(v->iov_base);
-       v++;
-       v->iov_base = " ";
-       v->iov_len = 1;
-       v++;
 
        if (msg) {
                v->iov_base = msg;

Reply via email to