From: Jan Klemkow Subject: Re: newsyslog: fix time and size logic To: tech@openbsd.org Date: Thu, 17 Oct 2024 10:06:28 +0200 ping On Wed, Sep 18, 2024 at 11:36:54PM GMT, Jan Klemkow wrote: > On Mon, Sep 09, 2024 at 01:05:14PM +0200, Jan Klemkow wrote: > > if we use time and size parameter for logfile rotation, just the time > > parameter is used. Caused by the return next to the debug print (see > > below). If we removed the return statement, the logic changed to (time > > || size). The manpage is also adjusted to clarify this behavior. > > Last diff always rotates logs. This diff fixes this issue and rotates > when time is up or log it too big. ok? bye, Jan Index: newsyslog.8 =================================================================== RCS file: /cvs/src/usr.bin/newsyslog/newsyslog.8,v diff -u -p -r1.55 newsyslog.8 --- newsyslog.8 22 Apr 2024 14:16:14 -0000 1.55 +++ newsyslog.8 18 Sep 2024 21:29:32 -0000 @@ -253,6 +253,14 @@ If an interval is specified, the log fil many hours have passed since the last rotation. When both a time and an interval are specified, both conditions must be satisfied for the rotation to take place. +If the +.Ar size +field is set and not +.Ql * +or +.Ql 0 , +the file will be rotated either if the size is +exceeded or the specified time or interval is reached. .Pp There is no provision for the specification of a time zone. There is little point in specifying an explicit minutes or seconds Index: newsyslog.c =================================================================== RCS file: /cvs/src/usr.bin/newsyslog/newsyslog.c,v diff -u -p -r1.114 newsyslog.c --- newsyslog.c 22 Apr 2024 14:20:35 -0000 1.114 +++ newsyslog.c 18 Sep 2024 21:27:36 -0000 @@ -313,7 +313,8 @@ do_entry(struct conf_entry *ent) difftime(timenow, ent->trim_at) >= 60 * 60) { DPRINTF(("--> will trim at %s", ctime(&ent->trim_at))); - return; + if (ent->size <= 0 || size < ent->size) + return; } else if (ent->hours <= 0) { DPRINTF(("--> time is up\n")); }