On Mon, 12 Dec 2005, Tony Finch wrote:

On Sat, 10 Dec 2005, Magnus Holmgren wrote:
Giuliano Gavazzi skrev:

In short, how do I detect that a redirect router has successfully
redirected an address?

Suggestion: Set address_data in the redirect routers (make sure that you
have preconditions that fail for addresses not handled by the routers),

This is what I do. We have virtual domains in the form of aliases files.
Some domains have "escape routes" for special case addresses (such as
ticketing systems) which are only valid internally to our mail hub and by
arrangement with the target system. E.g. there might be an escape route in
the botolph.cam.ac.uk domain for rt.botolph.cam.ac.uk.
[...]
If you use address_data for other purposes it becomes more complicated,
of course.

If you add keyword/value pairs to address_data then you can use ${extract
to pull out the various parts. If you are careful you can then use if for
multiple purposes.

Tony, thank you you too! I modified the routers last night but I am not too happy about that complication, maybe I need to think about it with a clear mind. I too have alias based virtual domains (I like being able to add a domain simply adding a new directory built from a template). Also, as I wrote before, I have three (yes, three) redirect routers just for aliases, one for special case foo-whatever, another for foo[-optional] local parts, and a third for the system wide aliases. This is what I got (with a better naming system):

# domain aliases, for optionally suffixed local_parts
domain_aliases_unspec:
 driver = redirect
 allow_fail
 allow_defer
 domains = +local_domains
 address_data = ${extract{field}{$address_data}} aliased=\
  ${lookup{$local_part}lsearch{DOMAINS_DIR/$domain/alias}{$value}fail}
 data = ${extract{aliased}{$address_data}}
 file_transport = address_file
 pipe_transport = address_pipe

# domain aliases, catch all suffixes
domain_aliases:
 driver = redirect
 allow_fail
 allow_defer
 domains = +local_domains
 local_part_suffix_optional
 local_part_suffix = -* : +*
 address_data = ${extract{field}{$address_data}} aliased=\
  ${lookup{$local_part}lsearch{DOMAINS_DIR/$domain/alias}{$value}fail}
 data = ${extract{aliased}{$address_data}}
 file_transport = address_file
 pipe_transport = address_pipe


# common aliases
system_aliases:
 driver = redirect
 allow_fail
 allow_defer
 domains = +local_domains
 local_part_suffix_optional
 local_part_suffix = -* : +*
 address_data = ${extract{field}{$address_data}} aliased=\
  ${lookup{$local_part}lsearch{GLOBAL_DIR/alias}{$value}fail}
 data = ${extract{aliased}{$address_data}}
 file_transport = address_file
 pipe_transport = address_pipe


here I preserve an eventual field=value field that might be also stored in address_data. Also, I fail when the lookup fails so that address_data is not reset (normally at least one of these aliases will fail to lookup)..

The localuser router then checks that the aliased field is not empty::

localuser:
 driver = accept
debug_print = \n\n\n*************** \ndebug:$address_data\n***************\n\n\n
 check_local_user
 domains = +local_domains
 local_part_suffix_optional
 local_part_suffix = -* : +*
 condition = ${if !eq {${extract{aliased}{$address_data}}}{} {1}{0}}
 transport = local_delivery
 headers_remove = X-Spam-Report:X-Spam-Score:X-Spam-Score-Int:\
  X-XPoint-AntiAbuse:X-Spam-Status:X-Spam-Level:\
  X-Spam-Checker-Version:X-Fortune:X-Disclaimer


I do not like it that much but it works. And it all works so well with the local sender verify (called by a sender verify for authenticated users)::

local_sender_verify:
 driver = redirect
# verify_only
 verify_sender
 allow_fail
 allow_defer
 data = [EMAIL PROTECTED]
 local_part_suffix_optional
 local_part_suffix = -* : +*
 domains = +local_domains
 condition = ${if eq{$local_part}{$authenticated_id}{no}{yes}}
 fail_verify_sender

but this is the topic for another post...

Thanks again

Giuliano

--
## List details at http://www.exim.org/mailman/listinfo/exim-users ## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://www.exim.org/eximwiki/

Reply via email to