Fix from Dean Brooks for ratelimit per_rcpt in acl_not_smtp.
authorTony Finch <dot@dot.at>
Wed, 7 Jun 2006 15:06:25 +0000 (15:06 +0000)
committerTony Finch <dot@dot.at>
Wed, 7 Jun 2006 15:06:25 +0000 (15:06 +0000)
doc/doc-txt/ChangeLog
src/ACKNOWLEDGMENTS
src/src/acl.c

index 393bccb..6013ceb 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.354 2006/05/31 19:34:57 fanf2 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.355 2006/06/07 15:06:25 fanf2 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -26,6 +26,9 @@ TF/02 Call initgroups() when dropping privilege in exim.c, so that Exim runs wit
 TF/03 Note in the spec that $authenticated_id is not set for local
       submissions from trusted users.
 
+TF/04 The ratelimit per_rcpt option now works correctly in acl_not_smtp.
+      Thanks to Dean Brooks <dean@iglou.com> for the patch.
+
 
 Exim version 4.62
 -----------------
index 4fb6c92..ce4bf78 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/src/ACKNOWLEDGMENTS,v 1.45 2006/04/04 09:09:45 ph10 Exp $
+$Cambridge: exim/src/ACKNOWLEDGMENTS,v 1.46 2006/06/07 15:06:26 fanf2 Exp $
 
 EXIM ACKNOWLEDGEMENTS
 
@@ -77,6 +77,7 @@ Matt Bernstein            LMTP over socket
 Mike Bethune              Help with debugging an elusive ALRM signal bug
 Ard Biesheuvel            Lookup code for accessing an Interbase database
 Richard Birkett           Fix for empty -f address crash
+Dean Brooks               Fix for ratelimit per_rcpt in acl_not_smtp.
 Nick Burrett              Patch for CONFIGURE_FILE_USE_EUID in exicyclog
 Matthew Byng-Maddick      Patch for qualify_domain in redirect router
                           Patch for ignore_target_hosts in ipliteral router
index 1ad01ea..a8db4a7 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/acl.c,v 1.58 2006/04/04 17:05:45 fanf2 Exp $ */
+/* $Cambridge: exim/src/src/acl.c,v 1.59 2006/06/07 15:06:26 fanf2 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -2035,6 +2035,7 @@ ACL clauses like: defer ratelimit = 15 / 1h
 
 Arguments:
   arg         the option string for ratelimit=
+  where       ACL_WHERE_xxxx indicating which ACL this is
   log_msgptr  for error messages
 
 Returns:       OK        - Sender's rate is above limit
@@ -2044,7 +2045,7 @@ Returns:       OK        - Sender's rate is above limit
 */
 
 static int
-acl_ratelimit(uschar *arg, uschar **log_msgptr)
+acl_ratelimit(uschar *arg, int where, uschar **log_msgptr)
 {
 double limit, period;
 uschar *ss, *key;
@@ -2263,6 +2264,9 @@ else
   if (per_byte)
     dbd->rate = (message_size < 0 ? 0.0 : (double)message_size)
               * (1 - a) / i_over_p + a * dbd->rate;
+  else if (per_cmd && where == ACL_WHERE_NOTSMTP)
+    dbd->rate = (double)recipients_count
+              * (1 - a) / i_over_p + a * dbd->rate;
   else
     dbd->rate = (1 - a) / i_over_p + a * dbd->rate;
   }
@@ -2873,7 +2877,7 @@ for (; cb != NULL; cb = cb->next)
     #endif
 
     case ACLC_RATELIMIT:
-    rc = acl_ratelimit(arg, log_msgptr);
+    rc = acl_ratelimit(arg, where, log_msgptr);
     break;
 
     case ACLC_RECIPIENTS: