(1) The flags in acl.c for fakereject allowed it in too many places. It
[exim.git] / src / src / acl.c
index 97a9dbe5e86c2418a8634a39d5aa7dbf317b6aff..843a9ad26bed05386fc9b890d109da31aee303cf 100644 (file)
@@ -1,10 +1,10 @@
-/* $Cambridge: exim/src/src/acl.c,v 1.10 2005/01/02 18:22:05 ph10 Exp $ */
+/* $Cambridge: exim/src/src/acl.c,v 1.13 2005/01/12 12:24:13 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) University of Cambridge 1995 - 2004 */
+/* Copyright (c) University of Cambridge 1995 - 2005 */
 /* See the file NOTICE for conditions of use and distribution. */
 
 /* Code for handling Access Control Lists (ACLs) */
@@ -405,7 +405,9 @@ static unsigned int control_forbids[] = {
 #ifdef WITH_CONTENT_SCAN
   (1<<ACL_WHERE_NOTSMTP),                          /* no_mbox_unspool */
 #endif
-  (1<<ACL_WHERE_NOTSMTP),                          /* fakereject */
+
+  ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)|       /* fakereject */
+    (1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)),
 
   (1<<ACL_WHERE_NOTSMTP)                           /* no_multiline */
 };
@@ -1728,7 +1730,10 @@ for (; cb != NULL; cb = cb->next)
           HDEBUG(D_acl)
             debug_printf("delay skipped in -bh checking mode\n");
           }
-        else sleep(delay);
+        else 
+          {
+          while (delay > 0) delay = sleep(delay);
+          } 
         }
       }
     break;