Download raw body.
syslogd: ISO8601 timestamp format in UTC by default
As some people have shown an interest in this (see httpd: add timestamps
to fastcgi error log), here is an initial version for switching syslogd
to ISO8601 timestamps by default.
Personally, I would welcome it. So far, I have only tested it locally. I
have NO larger syslogd server up and running.
Rafael
diff --git a/usr.sbin/syslogd/parsemsg.c b/usr.sbin/syslogd/parsemsg.c
index a28ac9752c5..a2e0d345bb0 100644
--- a/usr.sbin/syslogd/parsemsg.c
+++ b/usr.sbin/syslogd/parsemsg.c
@@ -27,7 +27,7 @@
#include "parsemsg.h"
#include "syslogd.h"
-size_t parsemsg_timestamp_bsd(const char *, char *);
+size_t parsemsg_timestamp_bsd(const char *);
size_t parsemsg_timestamp_v1(const char *, char *);
size_t parsemsg_prog(const char *, char *);
@@ -41,7 +41,8 @@ parsemsg(const char *msgstr, struct msg *msg)
if (msg->m_pri &~ (LOG_FACMASK|LOG_PRIMASK))
msg->m_pri = -1;
- if ((n = parsemsg_timestamp_bsd(msgstr, msg->m_timestamp)) == 0)
+ msg->m_timestamp[0] = '\0';
+ if ((n = parsemsg_timestamp_bsd(msgstr)) == 0)
n = parsemsg_timestamp_v1(msgstr, msg->m_timestamp);
msgstr += n;
@@ -83,21 +84,18 @@ parsemsg_priority(const char *msg, int *pri)
}
size_t
-parsemsg_timestamp_bsd(const char *msg, char *timestamp)
+parsemsg_timestamp_bsd(const char *msg)
{
size_t i;
- timestamp[0] = '\0';
for (i = 0; i < 16; i++) {
if (msg[i] == '\0')
return 0;
}
- if (msg[3] == ' ' && msg[6] == ' ' && msg[9] == ':' && msg[12] == ':' &&
- msg[15] == ' ') {
- /* BSD syslog TIMESTAMP, RFC 3164 */
- if (!ZuluTime)
- strlcpy(timestamp, msg, 16);
+ if (msg[3] == ' ' && msg[6] == ' ' && msg[9] == ':' &&
+ msg[12] == ':' && msg[15] == ' ') {
+ /* BSD syslog TIMESTAMP, RFC 3164, ignored */
return 16;
}
diff --git a/usr.sbin/syslogd/syslogd.8 b/usr.sbin/syslogd/syslogd.8
index 038be0574f3..fb7fd8b2232 100644
--- a/usr.sbin/syslogd/syslogd.8
+++ b/usr.sbin/syslogd/syslogd.8
@@ -177,9 +177,8 @@ attacks over the network, including attackers remotely filling logs.
Do not perform remote server certificate and hostname validation
when sending messages.
.It Fl Z
-Generate timestamps in ISO format.
-This includes the year and the timezone, and all logging is done
-in UTC.
+This option is ignored and only accepted for backward compatibility.
+Timestamps are always generated in ISO 8601 format in UTC.
.El
.Pp
The options
diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c
index af76ec2e181..eefcee99feb 100644
--- a/usr.sbin/syslogd/syslogd.c
+++ b/usr.sbin/syslogd/syslogd.c
@@ -229,7 +229,6 @@ int MarkSeq = 0; /* mark sequence number */
int Repeat = 0; /* 0 msg repeated, 1 in files only, 2 never */
int SecureMode = 1; /* when true, speak only unix domain socks */
int NoDNS = 0; /* when true, refrain from doing DNS lookups */
-int ZuluTime = 0; /* display date and time in UTC ISO format */
int IncludeHostname = 0; /* include RFC 3164 hostnames when forwarding */
int Family = PF_UNSPEC; /* protocol family, may disable IPv4 or IPv6 */
@@ -484,8 +483,7 @@ main(int argc, char *argv[])
case 'V': /* do not verify certificates */
NoVerify = 1;
break;
- case 'Z': /* time stamps in UTC ISO format */
- ZuluTime = 1;
+ case 'Z': /* OBSOLETE, UTC ISO is the default */
break;
default:
usage();
@@ -1771,21 +1769,17 @@ struct timeval now;
void
current_time(char *timestamp)
{
- (void)gettimeofday(&now, NULL);
-
- if (ZuluTime) {
- struct tm *tm;
- size_t l;
+ struct tm *tm;
+ size_t l;
- tm = gmtime(&now.tv_sec);
- l = strftime(timestamp, 33, "%FT%T", tm);
- /*
- * Use only millisecond precision as some time has
- * passed since syslog(3) was called.
- */
- snprintf(timestamp + l, 33 - l, ".%03ldZ", now.tv_usec / 1000);
- } else
- strlcpy(timestamp, ctime(&now.tv_sec) + 4, 16);
+ (void)gettimeofday(&now, NULL);
+ tm = gmtime(&now.tv_sec);
+ l = strftime(timestamp, 33, "%FT%T", tm);
+ /*
+ * Use only millisecond precision as some time has
+ * passed since syslog(3) was called.
+ */
+ snprintf(timestamp + l, 33 - l, ".%03ldZ", now.tv_usec / 1000);
}
/*
diff --git a/usr.sbin/syslogd/syslogd.h b/usr.sbin/syslogd/syslogd.h
index b7c630da299..b9bf7e41e86 100644
--- a/usr.sbin/syslogd/syslogd.h
+++ b/usr.sbin/syslogd/syslogd.h
@@ -23,8 +23,6 @@
#include <stdarg.h>
-extern int ZuluTime;
-
/* Privilege separation */
void priv_init(int, int, int, int, char **);
__dead void priv_exec(const char *, int, int, int, char **);
syslogd: ISO8601 timestamp format in UTC by default