Author: delphij
Date: Wed Jan 20 01:07:38 2010
New Revision: 202668
URL: http://svn.freebsd.org/changeset/base/202668

Log:
  Add a new option, -P, which reverts newsyslog(8) to the old behavior,
  which stops to proceed further, as it is possible that processes which
  fails to create PID file get screwed by rotation.
  
  Requested by: stas
  MFC after:    2 weeks
  X-MFC with:   r200806

Modified:
  head/usr.sbin/newsyslog/newsyslog.8
  head/usr.sbin/newsyslog/newsyslog.c

Modified: head/usr.sbin/newsyslog/newsyslog.8
==============================================================================
--- head/usr.sbin/newsyslog/newsyslog.8 Wed Jan 20 00:54:51 2010        
(r202667)
+++ head/usr.sbin/newsyslog/newsyslog.8 Wed Jan 20 01:07:38 2010        
(r202668)
@@ -17,7 +17,7 @@
 .\" the suitability of this software for any purpose.  It is
 .\" provided "as is" without express or implied warranty.
 .\"
-.Dd February 24, 2005
+.Dd January 19, 2010
 .Dt NEWSYSLOG 8
 .Os
 .Sh NAME
@@ -25,7 +25,7 @@
 .Nd maintain system log files to manageable sizes
 .Sh SYNOPSIS
 .Nm
-.Op Fl CFNnrsv
+.Op Fl CFNPnrsv
 .Op Fl R Ar tagname
 .Op Fl a Ar directory
 .Op Fl d Ar directory
@@ -169,6 +169,10 @@ This option is intended to be used with 
 or
 .Fl CC
 options when creating log files is the only objective.
+.It Fl P
+Prevent further action if we should send signal but the
+.Dq pidfile
+is empty or does not exist.
 .It Fl R Ar tagname
 Specify that
 .Nm

Modified: head/usr.sbin/newsyslog/newsyslog.c
==============================================================================
--- head/usr.sbin/newsyslog/newsyslog.c Wed Jan 20 00:54:51 2010        
(r202667)
+++ head/usr.sbin/newsyslog/newsyslog.c Wed Jan 20 01:07:38 2010        
(r202668)
@@ -167,6 +167,7 @@ int needroot = 1;           /* Root privs are nec
 int noaction = 0;              /* Don't do anything, just show it */
 int norotate = 0;              /* Don't rotate */
 int nosignal;                  /* Do not send any signals */
+int enforcepid = 0;            /* If PID file does not exist or empty, do 
nothing */
 int force = 0;                 /* Force the trim no matter what */
 int rotatereq = 0;             /* -R = Always rotate the file(s) as given */
                                /*    on the command (this also requires   */
@@ -580,7 +581,7 @@ parse_args(int argc, char **argv)
                *p = '\0';
 
        /* Parse command line options. */
-       while ((ch = getopt(argc, argv, "a:d:f:nrsvCD:FNR:")) != -1)
+       while ((ch = getopt(argc, argv, "a:d:f:nrsvCD:FNPR:")) != -1)
                switch (ch) {
                case 'a':
                        archtodir++;
@@ -624,6 +625,9 @@ parse_args(int argc, char **argv)
                case 'N':
                        norotate++;
                        break;
+               case 'P':
+                       enforcepid++;
+                       break;
                case 'R':
                        rotatereq++;
                        requestor = strdup(optarg);
@@ -1779,7 +1783,7 @@ set_swpid(struct sigwork_entry *swork, c
 
        f = fopen(ent->pid_file, "r");
        if (f == NULL) {
-               if (errno == ENOENT) {
+               if (errno == ENOENT && enforcepid == 0) {
                        /*
                         * Warn if the PID file doesn't exist, but do
                         * not consider it an error.  Most likely it
@@ -1801,7 +1805,7 @@ set_swpid(struct sigwork_entry *swork, c
                 * has terminated, so it should be safe to rotate any
                 * log files that the process would have been using.
                 */
-               if (feof(f)) {
+               if (feof(f) && enforcepid == 0) {
                        swork->sw_pidok = 1;
                        warnx("pid file is empty: %s", ent->pid_file);
                } else
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to