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
This commit is contained in:
parent
e211e5fec6
commit
6795e26b8a
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user