Author: kevans
Date: Thu Dec 26 22:49:19 2019
New Revision: 356103
URL: https://svnweb.freebsd.org/changeset/base/356103

Log:
  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.
  
  Submitted by: sig...@gmail.com
  Reported by:  sig...@gmail.com

Modified:
  head/usr.sbin/cron/cron/do_command.c

Modified: head/usr.sbin/cron/cron/do_command.c
==============================================================================
--- head/usr.sbin/cron/cron/do_command.c        Thu Dec 26 22:47:24 2019        
(r356102)
+++ head/usr.sbin/cron/cron/do_command.c        Thu Dec 26 22:49:19 2019        
(r356103)
@@ -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