On Tue, 20 Apr 2004, Philip Hazel wrote:
> Absolutely correct. Thanks for doing most of the debugging work. I have
> now reproduced the problem, and fixed it. The patch is below. The actual
> operative part is moving the handler reset into the re-exec case, but I
> did some other related tidying. The ChangeLog reads:
>
> 1. Change 4.24/6 introduced a bug because the SIGALRM handler was disabled
> before starting a queue runner without re-exec. This happened only when
> deliver_drop_privilege was set. The effect of the bug was that timeouts
> during subsequent deliveries caused crashes instead of being properly
> handled. The handler is now left at its default (and expected) setting.
>
> 2. The other case in which a daemon avoids a re-exec is to
> deliver an incoming message, again when
> deliver_drop_privilege is set. The bug described in (1) was
> not present in this case, but the tidying up of the other
> signals was missing. I have made the two cases consistent.
I think it should be noted that the problem can also occur
as a result of running Exim as root. That seems to be the
reason why it happened to me.
if (geteuid() != root_uid && !deliver_drop_privilege)
-aw