X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/8def5aaf652936e25a77eefe235bd333a89512c6..929ba01ccb7fafbe89e4fa60e93ab2b5f4aab1df:/src/src/deliver.c diff --git a/src/src/deliver.c b/src/src/deliver.c index e1e3714cc..dda4897b9 100644 --- a/src/src/deliver.c +++ b/src/src/deliver.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/deliver.c,v 1.28 2006/02/08 16:10:46 ph10 Exp $ */ +/* $Cambridge: exim/src/src/deliver.c,v 1.29 2006/02/21 16:24:19 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -1743,7 +1743,7 @@ if ((pid = fork()) == 0) if (addr->transport->setup != NULL) { - switch((addr->transport->setup)(addr->transport, addr, NULL, + switch((addr->transport->setup)(addr->transport, addr, NULL, uid, gid, &(addr->message))) { case DEFER: @@ -3617,12 +3617,25 @@ for (delivery_count = 0; addr_remote != NULL; delivery_count++) else return_path = new_return_path; } + /* Find the uid, gid, and use_initgroups setting for this transport. Failure + logs and sets up error messages, so we just post-process and continue with + the next address. */ + + if (!findugid(addr, tp, &uid, &gid, &use_initgroups)) + { + remote_post_process(addr, LOG_MAIN|LOG_PANIC, NULL, fallback); + continue; + } + /* If this transport has a setup function, call it now so that it gets run in this process and not in any subprocess. That way, the results of - any setup that are retained by the transport can be reusable. */ + any setup that are retained by the transport can be reusable. One of the + things the setup does is to set the fallback host lists in the addresses. + That is why it is called at this point, before the continue delivery + processing, because that might use the fallback hosts. */ if (tp->setup != NULL) - (void)((tp->setup)(addr->transport, addr, NULL, NULL)); + (void)((tp->setup)(addr->transport, addr, NULL, uid, gid, NULL)); /* If this is a run to continue delivery down an already-established channel, check that this set of addresses matches the transport and @@ -3698,16 +3711,6 @@ for (delivery_count = 0; addr_remote != NULL; delivery_count++) transport_filter_argv = NULL; - /* Find the uid, gid, and use_initgroups setting for this transport. Failure - logs and sets up error messages, so we just post-process and continue with - the next address. */ - - if (!findugid(addr, tp, &uid, &gid, &use_initgroups)) - { - remote_post_process(addr, LOG_MAIN|LOG_PANIC, NULL, fallback); - continue; - } - /* Create the pipe for inter-process communication. If pipe creation fails, it is probably because the value of remote_max_parallel is so large that too many file descriptors for pipes have been created. Arrange