Strip leading/trailing newlines on list of headers for addition; bug 884.
authorJeremy Harris <jgh146exb@wizmail.org>
Thu, 4 Oct 2012 21:21:09 +0000 (22:21 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Thu, 4 Oct 2012 21:43:51 +0000 (22:43 +0100)
NB: this means a bare "X-ACL-Warn:" header is harder to add.

doc/doc-docbook/spec.xfpt
doc/doc-txt/ChangeLog
src/src/acl.c
test/confs/0496
test/mail/0496.someone

index d35c305c8ad1898c2243049a3301f3d010960cf3..5961c4bd40106088ff0ca55a2cca5b374a979e2e 100644 (file)
@@ -27320,7 +27320,9 @@ receiving a message). The message must ultimately be accepted for
 any ACL verb, including &%deny%& (though this is potentially useful only in a
 RCPT ACL).
 
-If the data for the &%add_header%& modifier contains one or more newlines that
+Leading and trailing newlines are removed from
+the data for the &%add_header%& modifier; if it then
+contains one or more newlines that
 are not followed by a space or a tab, it is assumed to contain multiple header
 lines. Each one is checked for valid syntax; &`X-ACL-Warn:`& is added to the
 front of any line that is not a valid header line.
index a4c10d13afc515ea56cc73abd0aa990eabf7d146..6e91c1070a4db88610e378802a37d2b76fe1d272 100644 (file)
@@ -71,6 +71,9 @@ JH/06 Add dnsdb pseudo-lookup "a+" to do an "aaaa" + "a" combination.
 JH/07 Avoid using a waiting database for a single-message-only transport.
       Performance patch from Paul Fisher.  Bugzilla 1262.
 
+JH/08 Strip leading/trailing newlines from add_header ACL modifier data.
+      Bugzilla 884.
+
 
 Exim version 4.80
 -----------------
index 3b23a915b5aaa8fcd89812df1203a7d9e05e25e3..f9a32d3b7e198d9e224bd2585d6c2adc7ce09262 100644 (file)
@@ -958,10 +958,13 @@ setup_header(uschar *hstring)
 uschar *p, *q;
 int hlen = Ustrlen(hstring);
 
-/* An empty string does nothing; otherwise add a final newline if necessary. */
+/* Ignore any leading newlines */
+while (*hstring == '\n') hstring++, hlen--;
 
+/* An empty string does nothing; ensure exactly one final newline. */
 if (hlen <= 0) return;
-if (hstring[hlen-1] != '\n') hstring = string_sprintf("%s\n", hstring);
+if (hstring[--hlen] != '\n') hstring = string_sprintf("%s\n", hstring);
+else while(hstring[--hlen] == '\n') hstring[hlen+1] = '\0';
 
 /* Loop for multiple header lines, taking care about continuations */
 
index 4bc2fde19e8ce7fd5822a40530e66ada47fb5423..89375b11d00d1f52e61e97d67c8dd0ebf7d428d8 100644 (file)
@@ -19,10 +19,12 @@ acl_smtp_rcpt = check_rcpt
 begin acl
 
 check_rcpt:
-  warn     message = data1 data1\ndata2 data2
+  warn     message = data1 data1\ndata2 data2\n
+  warn     message = \n\ndata3\n\ndata4\n\n
   warn     message = :after_received:After-Received: some text\n\
                      :at_start:At-Start: some text\n\
                      :at_end:  At-End: some text
+  warn     message = data4
   accept
 
 
index 49cda3694cc4b0ae79b64401193548471c13d56b..263f596866090ef7b6c940af8aeb97b5448bd317 100644 (file)
@@ -12,6 +12,9 @@ Sender: CALLER_NAME <CALLER@myhost.test.ex>
 Date: Tue, 2 Mar 1999 09:44:33 +0000
 X-ACL-Warn: data1 data1
 X-ACL-Warn: data2 data2
+X-ACL-Warn: data3
+X-ACL-Warn: 
+X-ACL-Warn: data4
 At-End: some text
 
 Testing message