Since this is a musl (only ?) feature i would suggest to make that selectable.
re, wh Am 08.05.2017 23:45, schrieb Shiz: > Some syslog() implementations like musl's[1] always send timestamps in UTC. > This change adds a new option to syslogd, -Z, to assume incoming timestamps > are always UTC and adjust them to the local timezone (of the syslogd) before > logging. > > [1]: http://www.openwall.com/lists/musl/2014/01/29/1 > > Signed-off-by: Shiz <[email protected]> > --- > sysklogd/syslogd.c | 23 +++++++++++++++++++---- > 1 file changed, 19 insertions(+), 4 deletions(-) > > diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c > index d64ff27..159336e 100644 > --- a/sysklogd/syslogd.c > +++ b/sysklogd/syslogd.c > @@ -122,6 +122,7 @@ > //usage: "(this version of syslogd ignores /etc/syslog.conf)\n" > //usage: ) > //usage: "\n -n Run in foreground" > +//usage: "\n -Z Adjust incoming UTC times to local time" > //usage: IF_FEATURE_REMOTE_LOG( > //usage: "\n -R HOST[:PORT] Log to HOST:PORT (default PORT:514)" > //usage: "\n -L Log locally and via network (default is > network only if -R)" > @@ -233,6 +234,8 @@ typedef struct logRule_t { > /*int markInterval;*/ \ > /* level of messages to be logged */ \ > int logLevel; \ > + /* whether to adjust message timezone */\ > + int adjustTimezone; \ > IF_FEATURE_ROTATE_LOGFILE( \ > /* max size of file before rotation */ \ > unsigned logFileSize; \ > @@ -316,6 +319,7 @@ enum { > OPTBIT_outfile, // -O > OPTBIT_loglevel, // -l > OPTBIT_small, // -S > + OPTBIT_adjusttz, // -Z > IF_FEATURE_ROTATE_LOGFILE(OPTBIT_filesize ,) // -s > IF_FEATURE_ROTATE_LOGFILE(OPTBIT_rotatecnt ,) // -b > IF_FEATURE_REMOTE_LOG( OPTBIT_remotelog ,) // -R > @@ -330,6 +334,7 @@ enum { > OPT_outfile = 1 << OPTBIT_outfile , > OPT_loglevel = 1 << OPTBIT_loglevel, > OPT_small = 1 << OPTBIT_small , > + OPT_adjusttz = 1 << OPTBIT_adjusttz, > 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 +344,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:SZ" \ > IF_FEATURE_ROTATE_LOGFILE("s:" ) \ > IF_FEATURE_ROTATE_LOGFILE("b:" ) \ > IF_FEATURE_REMOTE_LOG( "R:*") \ > @@ -815,17 +820,23 @@ static void timestamp_and_log(int pri, char *msg, int > len) > { > char *timestamp; > time_t now; > + struct tm nowtm = { .tm_isdst = 0 }; why ? is there a bug ? > > /* Jan 18 00:11:22 msg... */ > /* 01234567890123456 */ > if (len < 16 || msg[3] != ' ' || msg[6] != ' ' > || msg[9] != ':' || msg[12] != ':' || msg[15] != ' ' > ) { > - time(&now); > + now = time(NULL); is the same > timestamp = ctime(&now) + 4; /* skip day of week */ > } else { > - now = 0; > - timestamp = msg; > + if (G.adjustTimezone && strptime(msg, "%b %e %T", &nowtm)) { > + now = mktime(&nowtm) - timezone; > + timestamp = ctime(&now) + 4; /* skip day of week */ > + } else { > + now = 0; > + timestamp = msg; > + } It is more easy to disable the feature if you do now = 0; timestamp = msg; if (G.adjustTimezone && strptime(msg, "%b %e %T", &nowtm)) { now = mktime(&nowtm) - timezone; timestamp = ctime(&now) + 4; /* skip day of week */ } just my 2 cents, re, wh > msg += 16; > } > timestamp[15] = '\0'; > @@ -1130,6 +1141,10 @@ int syslogd_main(int argc UNUSED_PARAM, char **argv) > if (opts & OPT_loglevel) // -l > G.logLevel = xatou_range(opt_l, 1, 8); > //if (opts & OPT_small) // -S > + if (opts & OPT_adjusttz) { // -Z > + G.adjustTimezone = 1; > + tzset(); > + } > #if ENABLE_FEATURE_ROTATE_LOGFILE > if (opts & OPT_filesize) // -s > G.logFileSize = xatou_range(opt_s, 0, INT_MAX/1024) * 1024; _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
