[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