Add control=no_pipelining.
[exim.git] / src / src / acl.c
index a79c31cb52800722498f9bcd574a9302b5427fd4..3e06cdf303a15474dcd3ccf597659e25cd7fb9c2 100644 (file)
@@ -1,10 +1,10 @@
-/* $Cambridge: exim/src/src/acl.c,v 1.67 2006/11/14 16:40:36 ph10 Exp $ */
+/* $Cambridge: exim/src/src/acl.c,v 1.69 2007/01/30 11:45:20 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) University of Cambridge 1995 - 2006 */
+/* Copyright (c) University of Cambridge 1995 - 2007 */
 /* See the file NOTICE for conditions of use and distribution. */
 
 /* Code for handling Access Control Lists (ACLs) */
@@ -186,7 +186,8 @@ enum {
   #endif
   CONTROL_FAKEDEFER,
   CONTROL_FAKEREJECT,
-  CONTROL_NO_MULTILINE
+  CONTROL_NO_MULTILINE,
+  CONTROL_NO_PIPELINING
 };
 
 /* ACL control names; keep in step with the table above! This list is used for
@@ -214,7 +215,10 @@ static uschar *controls[] = {
   #ifdef WITH_CONTENT_SCAN
   US"no_mbox_unspool",
   #endif
-  US"no_multiline"
+  US"fakedefer",
+  US"fakereject",
+  US"no_multiline",
+  US"no_pipelining",
 };
 
 /* Flags to indicate for which conditions /modifiers a string expansion is done
@@ -586,6 +590,9 @@ static unsigned int control_forbids[] = {
     (1<<ACL_WHERE_MIME)),
 
   (1<<ACL_WHERE_NOTSMTP)|                          /* no_multiline */
+    (1<<ACL_WHERE_NOTSMTP_START),
+
+  (1<<ACL_WHERE_NOTSMTP)|                          /* no_pipelining */
     (1<<ACL_WHERE_NOTSMTP_START)
 };
 
@@ -611,6 +618,7 @@ static control_def controls_list[] = {
   { US"freeze",                  CONTROL_FREEZE, TRUE },
   { US"no_enforce_sync",         CONTROL_NO_ENFORCE_SYNC, FALSE },
   { US"no_multiline_responses",  CONTROL_NO_MULTILINE, FALSE },
+  { US"no_pipelining",           CONTROL_NO_PIPELINING, FALSE },
   { US"queue_only",              CONTROL_QUEUE_ONLY, FALSE },
 #ifdef WITH_CONTENT_SCAN
   { US"no_mbox_unspool",         CONTROL_NO_MBOX_UNSPOOL, FALSE },
@@ -2593,6 +2601,10 @@ for (; cb != NULL; cb = cb->next)
       no_multiline_responses = TRUE;
       break;
 
+      case CONTROL_NO_PIPELINING:
+      pipelining_enable = FALSE;
+      break;
+
       case CONTROL_FAKEDEFER:
       case CONTROL_FAKEREJECT:
       fake_response = (control_type == CONTROL_FAKEDEFER) ? DEFER : FAIL;