[Exim] Alias router only processes first recipient?

Startseite
Nachricht löschen
Nachricht beantworten
Autor: Juha Saarinen
Datum:  
To: exim-users
Betreff: [Exim] Alias router only processes first recipient?
I'm running Exim 4.0.4 with this "out-of-the-box" System Aliases router:


system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup{$local_part}lsearch{/etc/aliases}}
file_transport = address_file
pipe_transport = address_pipe

The aliases file looks as it always has:

bin:            root
daemon:         root
adm:            root
lp:             root
sync:           root
shutdown:       root
halt:           root
mail:           root
news:           root
uucp:           root


# Person who should get root's mail
root:           juha



[etc]

I was testing a new alias, when I noticed that the router only processes
the first recipient in To:, ignoring all the others.

Here's the debug output:

# exim -d -bt webmaster@??? postmaster@???
root@??? > debug 2>&1

Berkeley DB: Sleepycat Software: Berkeley DB 3.2.9: (January 24, 2001)
changed uid/gid: forcing real = effective
uid=0 gid=0
auxiliary group list: <none>
trusted user
admin user
originator: uid=0 gid=0 login=root name=root
sender address = root@???
Address testing: uid=0 gid=93 euid=0 egid=93
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Testing webmaster@???
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Considering webmaster@???
active address webmaster@???
local_part=webmaster domain=saarinen.org
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

routing webmaster@???

--------> dnslookup router <--------
local_part=webmaster domain=saarinen.org
checking domains
saarinen.org in "@ : saarinen.org : taitoltd.com : futhermucker.net"? yes
(matched "saarinen.org")
saarinen.org in "! +local_domains"? no (matched "! +local_domains")
cached lookup data = NULL
dnslookup router skipped: domains mismatch



--------> system_aliases router <--------
local_part=webmaster domain=saarinen.org
calling system_aliases router
rda_interpret (string): ${lookup{$local_part}lsearch{/etc/aliases}}
search_open: lsearch "/etc/aliases"
search_find: file="/etc/aliases"
key="webmaster" partial=-1
LRU list:
8/etc/aliases
End
internal_search_find: file="/etc/aliases"
type=lsearch key="webmaster"
file lookup required for webmaster
in /etc/aliases
lookup yielded: juha
expanded: juha
file is not a filter file
parse_forward_list: juha
extract item: juha
system_aliases router generated juha@???
errors_to=NULL transport=NULL
uid=unset gid=unset home=NULL
routed by system_aliases router
envelope to: webmaster@???
transport: <none>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Considering juha@???
active address juha@???
local_part=juha domain=saarinen.org
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


[That looks OK to me.]


routing juha@???
--------> dnslookup router <--------
local_part=juha domain=saarinen.org
checking domains
saarinen.org in "@ : saarinen.org : taitoltd.com : futhermucker.net"? yes
(matched "saarinen.org")
saarinen.org in "! +local_domains"? no (matched "! +local_domains")
cached lookup data = NULL
dnslookup router skipped: domains mismatch
--------> system_aliases router <--------
local_part=juha domain=saarinen.org
calling system_aliases router
rda_interpret (string): ${lookup{$local_part}lsearch{/etc/aliases}}
search_open: lsearch "/etc/aliases"
cached open
search_find: file="/etc/aliases"
key="juha" partial=-1
LRU list:
8/etc/aliases
End
internal_search_find: file="/etc/aliases"
type=lsearch key="juha"
file lookup required for juha
in /etc/aliases
lookup failed
expanded:
file is not a filter file
parse_forward_list:
system_aliases router declined for juha@???
--------> userforward router <--------
local_part=juha domain=saarinen.org
checking for local user
calling userforward router
rda_interpret (file): $home/.forward
expanded: /home/juha/.forward
stat(/home/juha/.)=0
/home/juha/.forward does not exist
userforward router declined for juha@???
--------> localuser router <--------
local_part=juha domain=saarinen.org
checking domains
saarinen.org in "saarinen.org"? yes (matched "saarinen.org")
checking for local user
calling localuser router
localuser router called for juha@???
domain = saarinen.org
set transport local_delivery
queued for local_delivery transport: local_part = juha
domain = saarinen.org
errors_to=NULL
domain_data=NULL localpart_data=NULL
routed by localuser router
envelope to: juha@???
transport: local_delivery

[All good so far]

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Testing postmaster@???
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Considering postaster@???
active address postmaster@???
local_part=postmaster domain=saarinen.org
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

routing postmaster@???
--------> dnslookup router <--------
local_part=postmaster domain=saarinen.org
checking domains
saarinen.org in "@ : saarinen.org : taitoltd.com : futhermucker.net"? yes
(matched "saarinen.org")
saarinen.org in "! +local_domains"? no (matched "! +local_domains")
cached lookup data = NULL
dnslookup router skipped: domains mismatch
--------> system_aliases router <--------
local_part=postmaster domain=saarinen.org
calling system_aliases router
rda_interpret (string): ${lookup{$local_part}lsearch{/etc/aliases}}
search_open: lsearch "/etc/aliases"
cached open
search_find: file="/etc/aliases"
key="postmaster" partial=-1
LRU list:
8/etc/aliases
End
internal_search_find: file="/etc/aliases"
type=lsearch key="webmaster"
file lookup required for postmaster
in /etc/aliases
lookup yielded: juha
expanded: juha
file is not a filter file
parse_forward_list: juha
extract item: juha
system_aliases router generated juha@???
errors_to=NULL transport=NULL
uid=unset gid=unset home=NULL
routed by system_aliases router
envelope to: postmaster@???
transport: <none>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Considering juha@???
active address juha@???
local_part=juha domain=saarinen.org
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

routing juha@???
--------> dnslookup router <--------
local_part=juha domain=saarinen.org
checking domains
saarinen.org in "@ : saarinen.org : taitoltd.com : futhermucker.net"? yes
(matched "saarinen.org")
saarinen.org in "! +local_domains"? no (matched "! +local_domains")
cached lookup data = NULL
dnslookup router skipped: domains mismatch
--------> system_aliases router <--------
local_part=juha domain=saarinen.org
calling system_aliases router
rda_interpret (string): ${lookup{$local_part}lsearch{/etc/aliases}}
search_open: lsearch "/etc/aliases"
cached open
search_find: file="/etc/aliases"
key="juha" partial=-1
LRU list:
8/etc/aliases
End
internal_search_find: file="/etc/aliases"
type=lsearch key="juha"
file lookup required for juha
in /etc/aliases
lookup failed
expanded:
file is not a filter file
parse_forward_list:
system_aliases router declined for juha@???

<two skipped virtual domain routers snipped>

--------> userforward router <--------
local_part=juha domain=saarinen.org
checking for local user
calling userforward router
rda_interpret (file): $home/.forward
expanded: /home/juha/.forward
stat(/home/juha/.)=0
/home/juha/.forward does not exist
userforward router declined for juha@???
--------> localuser router <--------
local_part=juha domain=saarinen.org
checking domains
saarinen.org in "saarinen.org"? yes (matched "saarinen.org")
checking for local user
calling localuser router
localuser router called for juha@???
domain = saarinen.org
queued for local_delivery transport: local_part = juha
domain = saarinen.org
errors_to=NULL
domain_data=NULL localpart_data=NULL
routed by localuser router
envelope to: juha@???
transport: local_delivery

[So, that should end up in my mail box, but it doesn't.]

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Testing root@???
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Considering root@???
active address root@???
local_part=root domain=saarinen.org
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

routing root@???
--------> dnslookup router <--------
local_part=root domain=saarinen.org
checking domains
saarinen.org in "@ : saarinen.org : taitoltd.com : futhermucker.net"? yes
(matched "saarinen.org")
saarinen.org in "! +local_domains"? no (matched "! +local_domains")
cached lookup data = NULL
dnslookup router skipped: domains mismatch
--------> system_aliases router <--------
local_part=root domain=saarinen.org
calling system_aliases router
rda_interpret (string): ${lookup{$local_part}lsearch{/etc/aliases}}
search_open: lsearch "/etc/aliases"
cached open
search_find: file="/etc/aliases"
key="root" partial=-1
LRU list:
8/etc/aliases
End
internal_search_find: file="/etc/aliases"
type=lsearch key="root"
file lookup required for root
in /etc/aliases
lookup yielded: juha
expanded: juha
file is not a filter file
parse_forward_list: juha
extract item: juha
system_aliases router generated juha@???
errors_to=NULL transport=NULL
uid=unset gid=unset home=NULL
routed by system_aliases router
envelope to: root@???
transport: <none>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Considering juha@???
active address juha@???
local_part=juha domain=saarinen.org
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

routing juha@???
--------> dnslookup router <--------
local_part=juha domain=saarinen.org
checking domains
saarinen.org in "@ : saarinen.org : taitoltd.com : futhermucker.net"? yes
(matched "saarinen.org")
saarinen.org in "! +local_domains"? no (matched "! +local_domains")
cached lookup data = NULL
dnslookup router skipped: domains mismatch
--------> system_aliases router <--------
local_part=juha domain=saarinen.org
calling system_aliases router
rda_interpret (string): ${lookup{$local_part}lsearch{/etc/aliases}}
search_open: lsearch "/etc/aliases"
cached open
search_find: file="/etc/aliases"
key="juha" partial=-1
LRU list:
8/etc/aliases
End
internal_search_find: file="/etc/aliases"
type=lsearch key="juha"
file lookup required for juha
in /etc/aliases
lookup failed
expanded:
file is not a filter file
parse_forward_list:
system_aliases router declined for juha@???

[two skipped virtual domain routers snipped]

--------> userforward router <--------
local_part=juha domain=saarinen.org
checking for local user
calling userforward router
rda_interpret (file): $home/.forward
expanded: /home/juha/.forward
stat(/home/juha/.)=0
/home/juha/.forward does not exist
userforward router declined for juha@???
--------> localuser router <--------
local_part=juha domain=saarinen.org
checking domains
saarinen.org in "saarinen.org"? yes (matched "saarinen.org")
checking for local user
calling localuser router
localuser router called for juha@???
domain = saarinen.org
queued for local_delivery transport: local_part = juha
domain = saarinen.org
errors_to=NULL
domain_data=NULL localpart_data=NULL
routed by localuser router
envelope to: juha@???
transport: local_delivery
search_tidyup called
>>>>>>>>>>>>>>>>>> Exim pid=3388 terminating with rc=0 >>>>>>>>>>>>>>>>>>

juha@???
    <-- webmaster@???
  router = localuser, transport = local_delivery
juha@???
    <-- postmaster@???
  router = localuser, transport = local_delivery
juha@???
    <-- root@???
  router = localuser, transport = local_delivery



I only get the message to the first recipient, however. I thought it was a
Courier-IMAP problem at first, as the debug output indicates that all
messages were routed, but looking at Exim's main.log, I only see one
instance of delivery:


2002-05-22 10:43:30 17AILq-0000v9-00 <= juha@???
H=den2.saarinen.org [192.168.1.12] P=esmtp S=547
id=Pine.WNT.4.43.0205221043030.2024-100000@???

2002-05-22 10:43:30 17AILq-0000v9-00 => juha <root@???>
R=localuser T=local_delivery
2002-05-22 10:43:30 17AILq-0000v9-00 Completed

Putting the other addresses in the cc: field has the same effect.

If you have:

alias1:        account1
alias2:        account2


and put alias1, alias2 as the recipients, the message gets delivered to
account1 and account2 as expected (but not to any further aliases either
account might have).

What am I missing here? Is this a feature?

--
Juha Saarinen