svn commit: r332100 - in head: . lib/libc/gen sys/sys

Oliver Pinter oliver.pinter at hardenedbsd.org
Thu Mar 14 23:10:08 UTC 2019


On Friday, April 6, 2018, Ed Schouten <ed at freebsd.org> wrote:

> Author: ed
> Date: Fri Apr  6 13:00:45 2018
> New Revision: 332100
> URL: https://svnweb.freebsd.org/changeset/base/332100
>
> Log:
>   Let syslog(3) use RFC 5424.
>
>   With r332099 changing syslogd(8) to parse RFC 5424 formatted syslog
>   messages, go ahead and also change the syslog(3) libc function to
>   generate them. Compared to RFC 3164, RFC 5424 has various advantages,
>   such as sub-second precision for log entry timestamps.
>
>   As this change could have adverse effects when not updating syslogd(8)
>   or using a different system logging daemon, add a notice to UPDATING and
>   increase __FreeBSD_version.
>
>   Differential Revision:        https://reviews.freebsd.org/D14926


+= relnotes = yes


>
> Modified:
>   head/UPDATING
>   head/lib/libc/gen/syslog.3
>   head/lib/libc/gen/syslog.c
>   head/sys/sys/param.h
>
> Modified: head/UPDATING
> ============================================================
> ==================
> --- head/UPDATING       Fri Apr  6 12:57:01 2018        (r332099)
> +++ head/UPDATING       Fri Apr  6 13:00:45 2018        (r332100)
> @@ -51,6 +51,45 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW:
>
>  ****************************** SPECIAL WARNING:
> ******************************
>
> +20180406:
> +       In addition to supporting RFC 3164 formatted messages, the
> +       syslogd(8) service is now capable of parsing RFC 5424 formatted
> +       log messages. The main benefit of using RFC 5424 is that clients
> +       may now send log messages with timestamps containing year numbers,
> +       microseconds and time zone offsets.
> +
> +       Similarly, the syslog(3) C library function has been altered to
> +       send RFC 5424 formatted messages to the local system logging
> +       daemon. On systems using syslogd(8), this change should have no
> +       negative impact, as long as syslogd(8) and the C library are
> +       updated at the same time. On systems using a different system
> +       logging daemon, it may be necessary to make configuration
> +       adjustments, depending on the software used.
> +
> +       When using syslog-ng, add the 'syslog-protocol' flag to local
> +       input sources to enable parsing of RFC 5424 formatted messages:
> +
> +               source src {
> +                       unix-dgram("/var/run/log" flags(syslog-protocol));
> +               }
> +
> +       When using rsyslog, disable the 'SysSock.UseSpecialParser' option
> +       of the 'imuxsock' module to let messages be processed by the
> +       regular RFC 3164/5424 parsing pipeline:
> +
> +               module(load="imuxsock" SysSock.UseSpecialParser="off")
> +
> +       Do note that these changes only affect communication between local
> +       applications and syslogd(8). The format that syslogd(8) uses to
> +       store messages on disk or forward messages to other systems
> +       remains unchanged. syslogd(8) still uses RFC 3164 for these
> +       purposes. Options to customize this behaviour will be added in the
> +       future. Utilities that process log files stored in /var/log are
> +       thus expected to continue to function as before.
> +
> +       __FreeBSD_version has been incremented to 1200061 to denote this
> +       change.
> +
>  20180328:
>         Support for token ring networks has been removed. If you
>         have "device token" in your kernel config you should remove
>
> Modified: head/lib/libc/gen/syslog.3
> ============================================================
> ==================
> --- head/lib/libc/gen/syslog.3  Fri Apr  6 12:57:01 2018        (r332099)
> +++ head/lib/libc/gen/syslog.3  Fri Apr  6 13:00:45 2018        (r332100)
> @@ -28,7 +28,7 @@
>  .\"     @(#)syslog.3   8.1 (Berkeley) 6/4/93
>  .\" $FreeBSD$
>  .\"
> -.Dd November 5, 2017
> +.Dd April 6, 2018
>  .Dt SYSLOG 3
>  .Os
>  .Sh NAME
> @@ -156,6 +156,9 @@ Write the message to standard error output as well to
>  .It Dv LOG_PID
>  Log the process id with each message: useful for identifying
>  instantiations of daemons.
> +On
> +.Fx ,
> +this option is enabled by default.
>  .El
>  .Pp
>  The
>
> Modified: head/lib/libc/gen/syslog.c
> ============================================================
> ==================
> --- head/lib/libc/gen/syslog.c  Fri Apr  6 12:57:01 2018        (r332099)
> +++ head/lib/libc/gen/syslog.c  Fri Apr  6 13:00:45 2018        (r332100)
> @@ -36,9 +36,10 @@ static char sccsid[] = "@(#)syslog.c 8.5 (Berkeley) 4/
>  __FBSDID("$FreeBSD$");
>
>  #include "namespace.h"
> -#include <sys/types.h>
> +#include <sys/param.h>
>  #include <sys/socket.h>
>  #include <sys/syslog.h>
> +#include <sys/time.h>
>  #include <sys/uio.h>
>  #include <sys/un.h>
>  #include <netdb.h>
> @@ -134,11 +135,13 @@ syslog(int pri, const char *fmt, ...)
>  static void
>  vsyslog1(int pri, const char *fmt, va_list ap)
>  {
> -       int cnt;
> +       struct timeval now;
> +       struct tm tm;
>         char ch, *p;
> -       time_t now;
> -       int fd, saved_errno;
> -       char *stdp, tbuf[2048], fmt_cpy[1024], timbuf[26], errstr[64];
> +       long tz_offset;
> +       int cnt, fd, saved_errno;
> +       char hostname[MAXHOSTNAMELEN], *stdp, tbuf[2048], fmt_cpy[1024],
> +           errstr[64], tz_sign;
>         FILE *fp, *fmt_fp;
>         struct bufcookie tbuf_cookie;
>         struct bufcookie fmt_cookie;
> @@ -168,24 +171,46 @@ vsyslog1(int pri, const char *fmt, va_list ap)
>         if (fp == NULL)
>                 return;
>
> -       /* Build the message. */
> -       (void)time(&now);
> -       (void)fprintf(fp, "<%d>", pri);
> -       (void)fprintf(fp, "%.15s ", ctime_r(&now, timbuf) + 4);
> +       /* Build the message according to RFC 5424. Tag and version. */
> +       (void)fprintf(fp, "<%d>1 ", pri);
> +       /* Timestamp similar to RFC 3339. */
> +       if (gettimeofday(&now, NULL) == 0 &&
> +           localtime_r(&now.tv_sec, &tm) != NULL) {
> +               if (tm.tm_gmtoff < 0) {
> +                       tz_sign = '-';
> +                       tz_offset = -tm.tm_gmtoff;
> +               } else {
> +                       tz_sign = '+';
> +                       tz_offset = tm.tm_gmtoff;
> +               }
> +
> +               (void)fprintf(fp,
> +                   "%04d-%02d-%02d"            /* Date. */
> +                   "T%02d:%02d:%02d.%06ld"     /* Time. */
> +                   "%c%02ld:%02ld ",           /* Time zone offset. */
> +                   tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
> +                   tm.tm_hour, tm.tm_min, tm.tm_sec, now.tv_usec,
> +                   tz_sign, tz_offset / 3600, (tz_offset % 3600) / 60);
> +       } else
> +               (void)fprintf(fp, "- ");
> +       /* Hostname. */
> +       (void)gethostname(hostname, sizeof(hostname));
> +       (void)fprintf(fp, "%s ", hostname);
>         if (LogStat & LOG_PERROR) {
>                 /* Transfer to string buffer */
>                 (void)fflush(fp);
>                 stdp = tbuf + (sizeof(tbuf) - tbuf_cookie.left);
>         }
> +       /*
> +        * Application name, process ID, message ID and structured data.
> +        * Provide the process ID regardless of whether LOG_PID has been
> +        * specified, as it provides valuable information. Many
> +        * applications tend not to use this, even though they should.
> +        */
>         if (LogTag == NULL)
>                 LogTag = _getprogname();
> -       if (LogTag != NULL)
> -               (void)fprintf(fp, "%s", LogTag);
> -       if (LogStat & LOG_PID)
> -               (void)fprintf(fp, "[%d]", getpid());
> -       if (LogTag != NULL) {
> -               (void)fprintf(fp, ": ");
> -       }
> +       (void)fprintf(fp, "%s %d - - ",
> +           LogTag == NULL ? "-" : LogTag, getpid());
>
>         /* Check to see if we can skip expanding the %m */
>         if (strstr(fmt, "%m")) {
> @@ -313,7 +338,7 @@ vsyslog1(int pri, const char *fmt, va_list ap)
>                 struct iovec iov[2];
>                 struct iovec *v = iov;
>
> -               p = strchr(tbuf, '>') + 1;
> +               p = strchr(tbuf, '>') + 3;
>                 v->iov_base = p;
>                 v->iov_len = cnt - (p - tbuf);
>                 ++v;
>
> Modified: head/sys/sys/param.h
> ============================================================
> ==================
> --- head/sys/sys/param.h        Fri Apr  6 12:57:01 2018        (r332099)
> +++ head/sys/sys/param.h        Fri Apr  6 13:00:45 2018        (r332100)
> @@ -60,7 +60,7 @@
>   *             in the range 5 to 9.
>   */
>  #undef __FreeBSD_version
> -#define __FreeBSD_version 1200060      /* Master, propagated to newvers */
> +#define __FreeBSD_version 1200061      /* Master, propagated to newvers */
>
>  /*
>   * __FreeBSD_kernel__ indicates that this system uses the kernel of
> FreeBSD,
> _______________________________________________
> svn-src-head at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscribe at freebsd.org"
>


More information about the svn-src-all mailing list