After a bit of code skimming, I find that this is
the point in exim, in child.c, child_open_uid()
where it happens:
if (envp == NULL) execv(CS argv[0], (char *const *)argv);
else execve(CS argv[0], (char *const *)argv, (char *const *)envp);
/* Failed to execv. Signal this failure using EX_EXECFAILED. We are
losing the actual errno we got back, because there is no way to return
this. */
CHILD_FAILED:
_exit(EX_EXECFAILED); /* Note: must be _exit(), NOT exit() */
Philip defines EX_EXECFAILED to 127 in exim.h, so I
will be this is where the fail occurs, rather than
a shell or pipe problem as I thought. Since it loses
the actual return, I can't tell what really is going
wrong.
Helpful suggestions or even rants on my stupidity
and ancestry are welcome so long as they contain an
answer ;-)
--
------------------------------------------------------
Dale Amon amon@??? +44-7802-188325
International linux systems consultancy
Hardware & software system design, security
and networking, systems programming and Admin
"Have Laptop, Will Travel"
------------------------------------------------------