Add RFC 5424 syslog message output to syslogd.


Add RFC 5424 syslog message output to syslogd.

  • Move all of the code responsible for transmitting log messages into a separate function, fprintlog_write().
  • Instead of manually modifying a list of iovecs, add a structure iovlist with some helper functions.
  • Alter the F_FORW (UDP message forwarding) case to also use iovecs like the other cases. Use sendmsg() instead of sendto().
  • In the case of F_FORW, truncate the message to a size dependent on the address family (AF_INET, AF_INET6), as proposed by RFC 5426.
  • Move all traditional message formatting into fprintlog_bsd(). Get rid of some of the string copying and snprintf()'ing. Simply emit more iovecs to get the job done.
  • Increase ttymsg()'s limit of 7 iovecs to 32. Add a definition for this limit, so it can be reused by iovlist.
  • Add fprintlog_rfc5424() to emit RFC 5424 formatted log entries.
  • Add a "-O" command line option to enable RFC 5424 formatting. It would have been nicer if we supported "-o rfc5424", just like on NetBSD. Unfortunately, the "-o" flag is already used for a different purpose on FreeBSD.
  • Don't truncate hostnames in the RFC 5424 case, as suggested by that specific RFC.

For people interested in using this, this feature can be enabled by
adding the following line to /etc/rc.conf:

syslogd_flags="-s -O rfc5424"

Differential Revision: https://reviews.freebsd.org/D15011


edAuthored on
Differential Revision
D15011: Add RFC 5424 syslog message output to syslogd.
rS332509: Make first a 'bool' instead of a 'boolean_t'.