## OpenIPC Wiki [Mục lục](../README.md) Các thủ thuật thú vị ------------------ ### Chia sẻ kết quả của lệnh qua web ```bash | nc seashells.io 1337 ``` ### Điều chỉnh syslogd để hoạt động với các múi giờ khác GMT Một số triển khai `syslog()` như musl's luôn gửi dấu thời gian theo UTC. Đoạn mã sau thêm một tùy chọn mới vào `syslogd`, `-Z`, để giả định dấu thời gian đến luôn là UTC và điều chỉnh chúng theo múi giờ địa phương (của syslogd) trước khi ghi log. ```diff Signed-off-by: Shiz --- 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)" @@ -234,6 +235,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 }; /* Jan 18 00:11:22 msg... */ /* 01234567890123456 */ if (len < 16 || msg[3] != ' ' || msg[6] != ' ' || msg[9] != ':' || msg[12] != ':' || msg[15] != ' ' ) { - now = time(NULL); + time(&now); timestamp = ctime(&now) + 4; /* skip day of week */ } else { - if (G.adjustTimezone && strptime(msg, "%b %e %T", &nowtm)) { - now = mktime(&nowtm) - timezone; + if (G.adjustTimezone && strptime(msg, "%b %d %T", &nowtm)) { + now = mktime(&nowtm); + if (now != (time_t)-1) { + now -= timezone; + } else { + now = 0; + } timestamp = ctime(&now) + 4; /* skip day of week */ } else { now = 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; -- ``` _từ [sysklogd: thêm tùy chọn -Z để điều chỉnh múi giờ của thông điệp](http://lists.busybox.net/pipermail/busybox/2017-May/085437.html)_