aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/cron
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2019-12-26 22:49:19 +0000
committerKyle Evans <kevans@FreeBSD.org>2019-12-26 22:49:19 +0000
commit6795e26b8a77d9c954dfe811e4f5d7a2e529d987 (patch)
tree87ff949dbcdc242decb65298e6ad8ff0a8d1258a /usr.sbin/cron
parente211e5fec6622350914807ab9c92db34e0756a56 (diff)
downloadsrc-6795e26b8a77d9c954dfe811e4f5d7a2e529d987.tar.gz
src-6795e26b8a77d9c954dfe811e4f5d7a2e529d987.zip
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: sigsys@gmail.com Reported by: sigsys@gmail.com
Notes
Notes: svn path=/head/; revision=356103
Diffstat (limited to 'usr.sbin/cron')
-rw-r--r--usr.sbin/cron/cron/do_command.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/usr.sbin/cron/cron/do_command.c b/usr.sbin/cron/cron/do_command.c
index 3810e5290285..4a9a49e6c8ae 100644
--- a/usr.sbin/cron/cron/do_command.c
+++ b/usr.sbin/cron/cron/do_command.c
@@ -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