svn commit: r328587 - stable/11/usr.sbin/newsyslog

Eitan Adler eadler at FreeBSD.org
Tue Jan 30 04:50:24 UTC 2018


Author: eadler
Date: Tue Jan 30 04:50:23 2018
New Revision: 328587
URL: https://svnweb.freebsd.org/changeset/base/328587

Log:
  MFC r327451:
  
  newsyslog: implement 'p' flag
  
    Implement the 'p' flag for newsyslog from NetBSD. This flag results in
    the first log file for a given file to not be compressed.
  
    While here, don't change file attributes during a no-op run
  
  PR:	162798

Modified:
  stable/11/usr.sbin/newsyslog/newsyslog.c
  stable/11/usr.sbin/newsyslog/newsyslog.conf.5
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/usr.sbin/newsyslog/newsyslog.c
==============================================================================
--- stable/11/usr.sbin/newsyslog/newsyslog.c	Tue Jan 30 04:06:30 2018	(r328586)
+++ stable/11/usr.sbin/newsyslog/newsyslog.c	Tue Jan 30 04:50:23 2018	(r328587)
@@ -127,6 +127,7 @@ __FBSDID("$FreeBSD$");
 #define	CE_CREATE	0x0100	/* Create the log file if it does not exist. */
 #define	CE_NODUMP	0x0200	/* Set 'nodump' on newly created log file. */
 #define	CE_PID2CMD	0x0400	/* Replace PID file with a shell command.*/
+#define	CE_PLAIN0	0x0800	/* Do not compress zero'th history file */
 
 #define	CE_RFC5424	0x0800	/* Use RFC5424 format rotation message */
 
@@ -1300,6 +1301,9 @@ no_trimat:
 			case 'n':
 				working->flags |= CE_NOSIGNAL;
 				break;
+			case 'p':
+				working->flags |= CE_PLAIN0;
+				break;
 			case 'r':
 				working->flags |= CE_PID2CMD;
 				break;
@@ -1322,7 +1326,6 @@ no_trimat:
 				break;
 			case 'f':	/* Used by OpenBSD for "CE_FOLLOW" */
 			case 'm':	/* Used by OpenBSD for "CE_MONITOR" */
-			case 'p':	/* Used by NetBSD  for "CE_PLAIN0" */
 			default:
 				errx(1, "illegal flag in config file -- %c",
 				    *q);
@@ -1827,8 +1830,18 @@ do_rotate(const struct conf_entry *ent)
 		else {
 			/* XXX - Ought to be checking for failure! */
 			(void)rename(zfile1, zfile2);
+			change_attrs(zfile2, ent);
+			if (ent->compress && !strlen(logfile_suffix)) {
+				/* compress old rotation */
+				struct zipwork_entry zwork;
+
+				memset(&zwork, 0, sizeof(zwork));
+				zwork.zw_conf = ent;
+				zwork.zw_fsize = sizefile(zfile2);
+				strcpy(zwork.zw_fname, zfile2);
+				do_zipwork(&zwork);
+			}
 		}
-		change_attrs(zfile2, ent);
 	}
 
 	if (ent->numlogs > 0) {
@@ -1877,12 +1890,15 @@ do_rotate(const struct conf_entry *ent)
 	if (ent->pid_cmd_file != NULL)
 		swork = save_sigwork(ent);
 	if (ent->numlogs > 0 && ent->compress > COMPRESS_NONE) {
-		/*
-		 * The zipwork_entry will include a pointer to this
-		 * conf_entry, so the conf_entry should not be freed.
-		 */
-		free_or_keep = KEEP_ENT;
-		save_zipwork(ent, swork, ent->fsize, file1);
+		if (!(ent->flags & CE_PLAIN0) ||
+		    strcmp(&file1[strlen(file1) - 2], ".0") != 0) {
+			/*
+			 * The zipwork_entry will include a pointer to this
+			 * conf_entry, so the conf_entry should not be freed.
+			 */
+			free_or_keep = KEEP_ENT;
+			save_zipwork(ent, swork, ent->fsize, file1);
+		}
 	}
 
 	return (free_or_keep);

Modified: stable/11/usr.sbin/newsyslog/newsyslog.conf.5
==============================================================================
--- stable/11/usr.sbin/newsyslog/newsyslog.conf.5	Tue Jan 30 04:06:30 2018	(r328586)
+++ stable/11/usr.sbin/newsyslog/newsyslog.conf.5	Tue Jan 30 04:50:23 2018	(r328587)
@@ -300,6 +300,8 @@ log file using
 .It Cm N
 indicates that there is no process which needs to be signaled
 when this log file is rotated.
+.It Cm p
+indicates that the zero-th rotated file should not be compressed.
 .It Cm R
 if this flag is set the
 .Xr newsyslog 8


More information about the svn-src-all mailing list