On 14 Sep 2015, at 12:05, Marius Stan <[email protected]> wrote:
> I have the following snippet running in acl_check_rcpt, which limits 
> authenticated users to a number of messages per hour:

If you have it in the RCPT ACL, it is run (and the database updated) for every 
RCPT TO command from the connecting system; not only that but in your provided 
ACL section it runs & updates *twice* per RCPT TO:

>  warn    authenticated = *
>          ratelimit = ${lookup mysql{Q_RATELIMIT}} / 1h / strict / 
> $authenticated_id
>          log_message = Authenticated sender rate $authenticated_id 
> $authenticated_sender $sender_rate / $sender_rate_period
> 
>  deny    authenticated = *
>          ratelimit = ${lookup mysql{Q_RATELIMIT}} / 1h / strict / 
> $authenticated_id
>          log_message = Authenticated sender rate $authenticated_id 
> $authenticated_sender $sender_rate / $sender_rate_period
> 
>  accept  authenticated = *
>          control       = submission/sender_retain

To lookup, and not update, the ratelimit DB, use the 'readonly' parameter:

http://www.exim.org/exim-html-current/doc/html/spec_html/ch-access_control_lists.html#SECTratelimiting

Better still, get the positioning of the ratelimit checks right, do a lookup 
(with an update or without, depending where in the flow you are) and store the 
returned value in an ACL variable. Then you can make logical decisions at 
various points in the ACL flow without doing any further lookups.

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

Reply via email to