Date: Thu, 17 Jul 2008 12:11:34 GMT From: gavin@FreeBSD.org To: arne_woerner@yahoo.com, gavin@FreeBSD.org, freebsd-bugs@FreeBSD.org, gavin@FreeBSD.org Subject: Re: bin/100018: newsyslog(8) does not check size if time_at is used Message-ID: <200807171211.m6HCBYfO092980@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
Synopsis: newsyslog(8) does not check size if time_at is used State-Changed-From-To: open->feedback State-Changed-By: gavin State-Changed-When: Thu Jul 17 11:22:53 UTC 2008 State-Changed-Why: To submitter: Can you try the following patch please? It works for me, and I've been running it on a couple of machines for a few weeks without problem, but more testers would be beneficial! Index: src/usr.sbin/newsyslog/newsyslog.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/newsyslog/newsyslog.c,v retrieving revision 1.108 diff -u -r1.108 newsyslog.c --- src/usr.sbin/newsyslog/newsyslog.c 30 Jan 2008 22:11:59 -0000 1.108 +++ src/usr.sbin/newsyslog/newsyslog.c 17 Jul 2008 12:06:53 -0000 @@ -424,11 +424,13 @@ { #define REASON_MAX 80 int modtime; + int check_time_rotate; fk_entry free_or_keep; double diffsecs; char temp_reason[REASON_MAX]; free_or_keep = FREE_ENT; + check_time_rotate = 0; if (verbose) { if (ent->flags & CE_COMPACT) printf("%s <%dZ>: ", ent->log, ent->numlogs); @@ -476,7 +478,6 @@ printf("--> will trim at %s", ptimeget_ctime(ent->trim_at)); } - return (free_or_keep); } else if (diffsecs >= 3600.0) { /* * trim_at is more than an hour in the past, @@ -491,7 +492,6 @@ printf("--> will trim at %s", ptimeget_ctime(ent->trim_at)); } - return (free_or_keep); } else if (verbose && noaction && dbg_at_times) { /* * If we are just debugging at-times, then @@ -501,9 +501,10 @@ */ printf("\n\t--> timematch at %s", ptimeget_ctime(ent->trim_at)); - return (free_or_keep); - } else if (verbose && ent->hours <= 0) { - printf("--> time is up\n"); + } else if (ent->hours <= 0) { + if (verbose) + printf("--> time is up\n"); + check_time_rotate = 1; } } if (verbose && (ent->trsize > 0)) @@ -526,7 +527,8 @@ ent->rotate = 1; snprintf(temp_reason, REASON_MAX, " due to size>%dK", ent->trsize); - } else if (ent->hours <= 0 && (ent->flags & CE_TRIMAT)) { + } else if ((ent->hours <= 0 && (ent->flags & CE_TRIMAT)) && + check_time_rotate) { ent->rotate = 1; } else if ((ent->hours > 0) && ((modtime >= ent->hours) || (modtime < 0))) { Responsible-Changed-From-To: freebsd-bugs->gavin Responsible-Changed-By: gavin Responsible-Changed-When: Thu Jul 17 11:22:53 UTC 2008 Responsible-Changed-Why: Track http://www.freebsd.org/cgi/query-pr.cgi?pr=100018
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807171211.m6HCBYfO092980>