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