logger(1): fix timestamps in case of long run

An example:

( echo test; sleep 2; echo test2 ) | logger -h /var/run/log

Before fix, logger assigned same timestamp to both records.

Fixes:		65547fb33d
Reported by:	Vadim Goncharov
MFC after:	1 week
This commit is contained in:
Eugene Grosbein 2023-04-27 23:43:16 +07:00
parent 7ee4066db1
commit 83fd35b3f3

View File

@ -198,22 +198,23 @@ main(int argc, char *argv[])
if (host == NULL)
cap_openlog(capsyslog, tag, logflags, 0);
(void )time(&now);
(void )ctime_r(&now, tbuf);
tbuf[19] = '\0';
timestamp = tbuf + 4;
if (hostname == NULL) {
hostname = hbuf;
(void )gethostname(hbuf, MAXHOSTNAMELEN);
*strchrnul(hostname, '.') = '\0';
}
timestamp = tbuf + 4;
/* log input line if appropriate */
if (argc > 0) {
char *p, *endp;
size_t len;
(void )time(&now);
(void )ctime_r(&now, tbuf);
tbuf[19] = '\0';
for (p = buf, endp = buf + sizeof(buf) - 2; *argv;) {
len = strlen(*argv);
if (p + len > endp && p > buf) {
@ -235,9 +236,14 @@ main(int argc, char *argv[])
logmessage(pri, timestamp, hostname, tag, socks, nsock,
buf);
} else
while (fgets(buf, sizeof(buf), stdin) != NULL)
while (fgets(buf, sizeof(buf), stdin) != NULL) {
(void )time(&now);
(void )ctime_r(&now, tbuf);
tbuf[19] = '\0';
logmessage(pri, timestamp, hostname, tag, socks, nsock,
buf);
}
exit(0);
}