On Sun, 18 Sep 2005, Brian Candler wrote:
>
> - invoking another user-written filter at RCPT stage would allow users to
> customise policy for message rejection. For example, Exim could previously
> set $acl_m0 to the number of RBL lists which a message has triggered, and
> then the user could write
>
> if $acl_m0 is not below 3 then fail endif
>
> to bounce messages matching 3 or more RBLs. Right now, if you want to give
> this sort of control to users you have to write complex ACLs which perform
> external lookups for these parameters.
Actually, if you change the userforward router in the right way, you can
cause it to run the user's filter as part of recipient verification. This
requires a bit of care, because the filter must be run as the exim user,
not as the recipient user. Essentially what you have to do is remove
no_verify (so that the filter run is attempted) and check_local_user (to
avoid the side-effect of Exim trying to switch to the recipient user's
id), and add a require_files check (because the built-in check in the
redirect router's file option isn't quite what you want).
> - if there were string expansions or 'if' conditions for RBL lookups and
> suchlike, users could directly set their RCPT TO policies without help from
> the ACL.
Isn't dnsdb enough for this? However the syntax is not for the faint of
heart...
> <sky colour="blue">
> I wonder what Exim 5 would look like if the ACL language and the filter
> language were merged?
> </sky>
Exim has about 5 little languages: filters (2 kinds), ACLs, string
expansions, and matching lists. You could view the first two as the
statement part of a language and the latter two as the expression part, so
this count is a little inflated.
I used to think that Tcl could be made into a decent configuration
language for Exim, but my preference for typed statically checked
languages means I now think Haskell is the right answer. In both cases,
Exim just becomes a library of functions with a main program that sets
things up and calls the postmaster's configuration code at appropriate
times.
Tony.
--
<fanf@???> <dot@???>
http://dotat.at/ ${sg{\N${sg{\
N\}{([^N]*)(.)(.)(.*)}{\$1\$3\$2\$1\$3\n\$2\$3\$4\$3\n\$3\$2\$4}}\
\N}{([^N]*)(.)(.)(.*)}{\$1\$3\$2\$1\$3\n\$2\$3\$4\$3\n\$3\$2\$4}}