[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    Re: [PATCH] sysklogd: add timestamp option to ignore message timestamps
From:       Denys Vlasenko <vda.linux () googlemail ! com>
Date:       2018-08-26 15:31:56
Message-ID: CAK1hOcMWT5WShvRvB2PtTTzfJ=H7-MocyL3+E33HjwbVGFEwjA () mail ! gmail ! com
[Download RAW message or body]

Applied, thanks!
On Thu, Aug 9, 2018 at 11:25 AM Peter Korsgaard <peter@korsgaard.com> wrote:
>
> 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@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@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
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic