e07@nikhefh.nikhef.nl (Eric Wassenaar) (06/15/91)
The syserr() call after the execve() in openmailer() in deliver.c
clears errno which is checked afterwards to determine the proper
exit status.
This causes delivery via non-LocalMailers to fail instead of
being requeued in case of temporary lack of o.s. resources.
openmailer()
{
execve(m->m_mailer, pvp, UserEnviron);
syserr("Cannot exec %s", m->m_mailer);
if (m == LocalMailer || errno == EIO || errno == EAGAIN ||
#if defined(EPROCLIM)
errno == EPROCLIM ||
#endif /* EPROCLIM */
errno == ENOMEM)
_exit(EX_TEMPFAIL);
else
_exit(EX_UNAVAILABLE);
errno should be saved just after the execve() call in a separate
variable to be checked after the syserr() call.
By the way, I think EX_OSERR is a more appropriate status than
EX_TEMPFAIL. It will cause a more descriptive message than the
plain "Deferred" you use to see in these cases.
Eric Wassenaar
--
Organization: NIKHEF-H, National Institute for Nuclear and High-Energy Physics
Address: Kruislaan 409, P.O. Box 41882, 1009 DB Amsterdam, the Netherlands
Phone: +31 20 592 0412, Home: +31 20 6909449, Telefax: +31 20 592 5155
Internet: e07@nikhef.nl