Re: [EXIM] Hook for testing DNS entry existence

Kezdőlap
Üzenet törlése
Válasz az üzenetre
Szerző: Philip Hazel
Dátum:  
Címzett: Malcolm Beattie
CC: exim-users
Tárgy: Re: [EXIM] Hook for testing DNS entry existence
On Mon, 7 Sep 1998, Malcolm Beattie wrote:

> rising to 30000 over a year or two. The cluster contains a number
> of IMAP servers in its domain named imap1, imap2, etc. The cluster
> frontends are the designated DNS name servers for that domain and
> have entries of the form "username.domain...." mapping to the
> user's actual IMAP server.


I imagine that the person who runs our central IMAP server (20,000+
users) is sighing with relief that he doesn't have to cope with that
scenario. We run just a single IMAP server. But that's by the way...

> it is almost (but not quite) acceptable
> just to to do:
>
>     # Transports
>     cluster_smtp:
>    driver = smtp
>    hosts = ${local_part}.DOMAIN

>
>     # Directors

>
>     local_delivery:
>    domains = DOMAIN:*.DOMAIN
>    driver = localuser
>    require_files = ${home}/INBOX
>    transport = local_delivery

>
>     cluster_redirect:
>    domains = DOMAIN
>    driver = smartuser
>    transport = cluster_smtp

>
> However, mistakes in the username part of addresses would (I should
> think) end up being bounced to the sending user as some sort of "no
> such hostname" error (since badusername.domain does not exist)


Worse than that. A failure to lookup a host in the smtp transport is
considered to be a configuration failure rather than a user error. Exim
is likely to hang on to the message and keep trying to deliver it rather
than bouncing it immediately.

There isn't (unless I've forgotten some hidden feature) any way
of testing the existence of a remote host in a director (since directors
are supposedly doing stuff on the local host). What you would like to do
would be to throw the address at a router, but there's no way to do
that. However, there *is* a way to throw addresses from routers to
directors. I wonder if this couldn't be turned inside-out along the
lines of:

*Remove* DOMAIN:*.DOMAIN from local_domains, so such addresses are first
passed to the routers. Have these as your firsts two routers:

# Try for a suitable local host for local users not on this host, i.e.
# those for whom there is no home directory:

  semilocalusers:
    domains = DOMAIN:*.DOMAIN
    require_files = !/home/$local_part/INBOX 
    driver = domainlist
    transport = smtp 
    route_list = * $local_part.DOMAIN byname
    host_find_failed = fail_soft   


# Not entirely pretty, since you can't use $home (but you could do a
# lookup in /etc/passwd to find it if you really wanted to).

# Those with a home directory, or those without a remote host, will fall
# through to here. Pass them to the directors.

  localusers:
    domains = DOMAIN:*.DOMAIN
    driver = domainlist
    route_list = * 127.0.0.1
    self = local  


I haven't tested any of that. If it doesn't work out, then you might
have to patch the dnsdb lookup code to get it to lookup A records as
well as TXT records. It wouldn't be a huge patch.

-- 
Philip Hazel            University of Cambridge Computing Service,
ph10@???      Cambridge, England. Phone: +44 1223 334714.



--
*** Exim information can be found at http://www.exim.org/ ***