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
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to