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-stable
mailing list