svn commit: r356191 - in stable: 11/usr.sbin/cron/cron 12/usr.sbin/cron/cron

Kyle Evans kevans at FreeBSD.org
Mon Dec 30 00:16:59 UTC 2019


Author: kevans
Date: Mon Dec 30 00:16:58 2019
New Revision: 356191
URL: https://svnweb.freebsd.org/changeset/base/356191

Log:
  MFC r356103: cron(8): use proper variable to determine mailer process status
  
  While the mailer is normally opened/set if the mailto is set, this is not
  the case if the grandchild actually didn't produce any output. This change
  corrects the situation to only attempt to kill/close the mail process if it
  was actually opened in the first place.
  
  The reporter initially stumbled on the -n (suppress mail on success) flag
  leading to a SIGKILL of the process group, but simultaneously
  discovered/reported the behavior with !-n jobs if MAILTO was set and no
  output happened.
  
  All of these places that are checking mailto should actually be checking
  whether mail is set, so do that for consistency+correctness.
  
  This set of bugs were introduced by r352668.

Modified:
  stable/11/usr.sbin/cron/cron/do_command.c
Directory Properties:
  stable/11/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/12/usr.sbin/cron/cron/do_command.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/11/usr.sbin/cron/cron/do_command.c
==============================================================================
--- stable/11/usr.sbin/cron/cron/do_command.c	Mon Dec 30 00:04:17 2019	(r356190)
+++ stable/11/usr.sbin/cron/cron/do_command.c	Mon Dec 30 00:16:58 2019	(r356191)
@@ -460,6 +460,8 @@ child_process(e, u)
 			_exit(ERROR_EXIT);
 		}
 
+		mail = NULL;
+
 		ch = getc(in);
 		if (ch != EOF) {
 			Debug(DPROC|DEXT,
@@ -531,7 +533,7 @@ child_process(e, u)
 
 			while (EOF != (ch = getc(in))) {
 				bytes++;
-				if (mailto)
+				if (mail)
 					putc(ch, mail);
 			}
 		}
@@ -555,12 +557,12 @@ child_process(e, u)
 		 */
 		if (WIFEXITED(waiter) && WEXITSTATUS(waiter) == 0
 		    && (e->flags & MAIL_WHEN_ERR) == MAIL_WHEN_ERR
-		    && mailto) {
+		    && mail) {
 			Debug(DPROC, ("[%d] %s executed successfully, mail suppressed\n",
 				getpid(), "grandchild command job"))
 			kill(mailpid, SIGKILL);
 			(void)fclose(mail);
-			mailto = NULL;
+			mail = NULL;
 		}
 
 
@@ -568,7 +570,7 @@ child_process(e, u)
 		 * mailing...
 		 */
 
-		if (mailto) {
+		if (mail) {
 			Debug(DPROC, ("[%d] closing pipe to mail\n",
 				getpid()))
 			/* Note: the pclose will probably see


More information about the svn-src-all mailing list