Save $spam_score, $spam_bar, and $spam_report in spool files, so
[exim.git] / src / src / spool_in.c
index e878b34eac6295d891d92f24cc55ff5bb429db99..4773dc002f9244874cfdc9c9ba296f27d5877d2e 100644 (file)
@@ -1,10 +1,10 @@
-/* $Cambridge: exim/src/src/spool_in.c,v 1.17 2006/10/10 11:15:12 ph10 Exp $ */
+/* $Cambridge: exim/src/src/spool_in.c,v 1.22 2008/07/28 18:46:44 fanf2 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. */
 
 /* Functions for reading spool files. When compiling for a utility (eximon),
@@ -255,6 +255,7 @@ interface_address = NULL;
 interface_port = 0;
 local_error_message = FALSE;
 local_scan_data = NULL;
+max_received_linelength = 0;
 message_linecount = 0;
 received_protocol = NULL;
 received_count = 0;
@@ -281,6 +282,10 @@ bmi_verdicts = NULL;
 dk_do_verify = 0;
 #endif
 
+#ifdef EXPERIMENTAL_DKIM
+dkim_do_verify = 0;
+#endif
+
 #ifdef SUPPORT_TLS
 tls_certificate_verified = FALSE;
 tls_cipher = NULL;
@@ -436,11 +441,14 @@ for (;;)
     else if (Ustrncmp(p, "cl ", 3) == 0)
       {
       int index, count;
-      uschar name[4];
+      uschar name[20];   /* Need plenty of space for %d format */
       tree_node *node;
       if (sscanf(CS big_buffer + 5, "%d %d", &index, &count) != 2)
         goto SPOOL_FORMAT_ERROR;
-      (void) string_format(name, 4, "%c%d", (index < 10 ? 'c' : 'm'), index);
+      if (index < 10)
+        (void) string_format(name, sizeof(name), "%c%d", 'c', index);
+      else if (index < 20) /* ignore out-of-range index */
+        (void) string_format(name, sizeof(name), "%c%d", 'm', index - 10);
       node = acl_var_create(name);
       node->data.ptr = store_get(count + 1);
       if (fread(node->data.ptr, 1, count+1, f) < count) goto SPOOL_READ_ERROR;
@@ -515,6 +523,8 @@ for (;;)
 
     case 'm':
     if (Ustrcmp(p, "anual_thaw") == 0) deliver_manual_thaw = TRUE;
+    else if (Ustrncmp(p, "ax_received_linelength", 22) == 0)
+      max_received_linelength = Uatoi(big_buffer + 24);
     break;
 
     case 'N':
@@ -532,6 +542,12 @@ for (;;)
     #ifdef WITH_CONTENT_SCAN
     else if (Ustrncmp(p, "pam_score_int ", 14) == 0)
       spam_score_int = string_copy(big_buffer + 16);
+    else if (Ustrncmp(p, "pam_score ", 10) == 0)
+      spam_score = string_copy(big_buffer + 12);
+    else if (Ustrncmp(p, "pam_bar ", 8) == 0)
+      spam_bar = string_copy(big_buffer + 10);
+    else if (Ustrncmp(p, "pam_report ", 11) == 0)
+      spam_report = string_copy(big_buffer + 13);
     #endif
     break;