[PATCH] sysklogd: add timestamp option to ignore message timestamps
Peter Korsgaard
peter at korsgaard.com
Sun Aug 19 11:05:02 UTC 2018
>>>>> "Peter" == Peter Korsgaard <peter at korsgaard.com> writes:
Ping?
Comments, feedback?
> Some syslog producers provide inconsistent timestamps, so provide an option
> to ignore the message timestamps and always locally timestamp. In order to
> implement this, invert the valid-timestamp check, but only use the timestamp
> if this option is not enabled.
> This is in line with what what other syslogd implementations do:
> From sysklogd syslogd.c:
> * Sun Nov 7 12:28:47 CET 2004: Martin Schulze <joey at infodrom.org>
> * Discard any timestamp information found in received syslog
> * messages. This will affect local messages sent from a
> * different timezone.
> rsyslog's imuxsock module similary has an (enabled by default)
> IgnoreTimestamp option:
> https://www.rsyslog.com/doc/v8-stable/configuration/modules/imuxsock.html
> function old new delta
> .rodata 14706 14738 +32
> usage_messages 2342 2373 +31
> timestamp_and_log 709 724 +15
> syslogd_main 2187 2190 +3
> ------------------------------------------------------------------------------
> (add/remove: 0/0 grow/shrink: 4/0 up/down: 81/0) Total: 81 bytes
> Signed-off-by: Peter Korsgaard <peter at korsgaard.com>
> ---
> sysklogd/syslogd.c | 25 +++++++++++++++++--------
> 1 file changed, 17 insertions(+), 8 deletions(-)
> diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
> index 4265f4f90..e966208c2 100644
> --- a/sysklogd/syslogd.c
> +++ b/sysklogd/syslogd.c
> @@ -140,6 +140,7 @@
> //usage: )
> //usage: "\n -l N Log only messages more urgent than prio N (1-8)"
> //usage: "\n -S Smaller output"
> +//usage: "\n -t Ignore message timestamps"
> //usage: IF_FEATURE_SYSLOGD_DUP(
> //usage: "\n -D Drop duplicates"
> //usage: )
> @@ -316,6 +317,7 @@ enum {
> OPTBIT_outfile, // -O
> OPTBIT_loglevel, // -l
> OPTBIT_small, // -S
> + OPTBIT_timestamp, // -t
> IF_FEATURE_ROTATE_LOGFILE(OPTBIT_filesize ,) // -s
> IF_FEATURE_ROTATE_LOGFILE(OPTBIT_rotatecnt ,) // -b
> IF_FEATURE_REMOTE_LOG( OPTBIT_remotelog ,) // -R
> @@ -330,6 +332,7 @@ enum {
> OPT_outfile = 1 << OPTBIT_outfile ,
> OPT_loglevel = 1 << OPTBIT_loglevel,
> OPT_small = 1 << OPTBIT_small ,
> + OPT_timestamp = 1 << OPTBIT_timestamp,
> OPT_filesize = IF_FEATURE_ROTATE_LOGFILE((1 << OPTBIT_filesize )) + 0,
> OPT_rotatecnt = IF_FEATURE_ROTATE_LOGFILE((1 << OPTBIT_rotatecnt )) + 0,
> OPT_remotelog = IF_FEATURE_REMOTE_LOG( (1 << OPTBIT_remotelog )) + 0,
> @@ -339,7 +342,7 @@ enum {
> OPT_cfg = IF_FEATURE_SYSLOGD_CFG( (1 << OPTBIT_cfg )) + 0,
> OPT_kmsg = IF_FEATURE_KMSG_SYSLOG( (1 << OPTBIT_kmsg )) + 0,
> };
> -#define OPTION_STR "m:nO:l:S" \
> +#define OPTION_STR "m:nO:l:St" \
> IF_FEATURE_ROTATE_LOGFILE("s:" ) \
> IF_FEATURE_ROTATE_LOGFILE("b:" ) \
> IF_FEATURE_REMOTE_LOG( "R:*") \
> @@ -813,21 +816,27 @@ static void parse_fac_prio_20(int pri, char *res20)
> * that there is no timestamp, short-circuiting the test. */
> static void timestamp_and_log(int pri, char *msg, int len)
> {
> - char *timestamp;
> + char *timestamp = NULL;
> time_t now;
> /* Jan 18 00:11:22 msg... */
> /* 01234567890123456 */
> - if (len < 16 || msg[3] != ' ' || msg[6] != ' '
> - || msg[9] != ':' || msg[12] != ':' || msg[15] != ' '
> + if (len >= 16 && msg[3] == ' ' && msg[6] == ' '
> + && msg[9] == ':' && msg[12] == ':' && msg[15] == ' '
> ) {
> + if (!(option_mask32 & OPT_timestamp)) {
> + /* use message timestamp */
> + timestamp = msg;
> + now = 0;
> + }
> + msg += 16;
> + }
> +
> + if (!timestamp) {
> time(&now);
> timestamp = ctime(&now) + 4; /* skip day of week */
> - } else {
> - now = 0;
> - timestamp = msg;
> - msg += 16;
> }
> +
> timestamp[15] = '\0';
> if (option_mask32 & OPT_kmsg) {
> --
> 2.11.0
--
Bye, Peter Korsgaard
More information about the busybox
mailing list