Bug 1454: Option -oMm for message reference
authorHeiko Schlichting <heiko@fu-berlin.de>
Tue, 2 Apr 2013 19:06:03 +0000 (21:06 +0200)
committerTodd Lyons <tlyons@exim.org>
Wed, 30 Apr 2014 00:06:33 +0000 (17:06 -0700)
Includes docs and test suite

doc/doc-docbook/spec.xfpt
doc/doc-txt/ChangeLog
doc/doc-txt/OptionLists.txt
src/src/exim.c
test/scripts/0000-Basic/0040
test/stderr/0040 [new file with mode: 0644]

index 0e6a38bd9487ece74130860c3e00efdcb7c06624..623ce535ae952ec466b30325c98361baf83e7aa6 100644 (file)
@@ -4221,6 +4221,20 @@ option sets the IP interface address value. A port number may be included,
 using the same syntax as for &%-oMa%&. The interface address is placed in
 &$received_ip_address$& and the port number, if present, in &$received_port$&.
 
 using the same syntax as for &%-oMa%&. The interface address is placed in
 &$received_ip_address$& and the port number, if present, in &$received_port$&.
 
+.vitem &%-oMm%&&~<&'message&~reference'&>
+.oindex "&%-oMm%&"
+.cindex "message reference" "message reference, specifying for local message"
+See &%-oMa%& above for general remarks about the &%-oM%& options. The &%-oMm%&
+option sets the message reference, e.g. message-id, and is logged during
+delivery. This is useful when some kind of audit trail is required to tie
+messages together. The format of the message reference is checked and will
+abort if the format is invalid. The option will only be accepted if exim is
+running in trusted mode, not as any regular user.
+
+The best example of a message reference is when Exim sends a bounce message.
+The message reference is the message-id of the original message for which Exim
+is sending the bounce.
+
 .vitem &%-oMr%&&~<&'protocol&~name'&>
 .oindex "&%-oMr%&"
 .cindex "protocol, specifying for local message"
 .vitem &%-oMr%&&~<&'protocol&~name'&>
 .oindex "&%-oMr%&"
 .cindex "protocol, specifying for local message"
index cff9803d71a860927d2af1326c886a715aa1d4bf..7f01919c2055a48e9bf19540a98ad56bd7e0fbd9 100644 (file)
@@ -99,6 +99,10 @@ TL/09 Bugzilla 609: Add -C option to exiqgrep, specify which exim.conf to use.
 
 JH/19 EXPERIMENTAL_OCSP support under GnuTLS.  Bug 1459.
 
 
 JH/19 EXPERIMENTAL_OCSP support under GnuTLS.  Bug 1459.
 
+TL/10 Bugzilla 1454: New -oMm option to pass message reference to Exim.
+      Requires trusted mode and valid format message id, aborts otherwise.
+      Patch contributed by Heiko Schlichting.
+
 
 Exim version 4.82
 -----------------
 
 Exim version 4.82
 -----------------
index 4ad112180f84101a22060928a7f2bb76b0604229..ef61956008a8d2ef4539e532e929ca9891ed37a9 100644 (file)
@@ -714,6 +714,7 @@ provide compatibility with Sendmail.
 -oMai          # Supply authenticated id
 -oMas          # Supply authenticated sender
 -oMi           # Supply interface address
 -oMai          # Supply authenticated id
 -oMas          # Supply authenticated sender
 -oMi           # Supply interface address
+-oMm           # Supply message reference
 -oMr           # Supply protocol name
 -oMs           # Supply host name
 -oMt           # Supply ident string
 -oMr           # Supply protocol name
 -oMs           # Supply host name
 -oMt           # Supply ident string
index 3ab657fea12df65c9cc4ca97277755ec354adcfb..fa0cf4940d8420c04484f72d107f583170333e4b 100644 (file)
@@ -2989,6 +2989,23 @@ for (i = 1; i < argc; i++)
 
       else if (Ustrcmp(argrest, "Mi") == 0) interface_address = argv[++i];
 
 
       else if (Ustrcmp(argrest, "Mi") == 0) interface_address = argv[++i];
 
+      /* -oMm: Message reference */
+
+      else if (Ustrcmp(argrest, "Mm") == 0)
+        {
+        if (!mac_ismsgid(argv[i+1]))
+          {
+            fprintf(stderr,"-oMm must be a valid message ID\n");
+            exit(EXIT_FAILURE);
+          }
+        if (!trusted_config)
+          {
+            fprintf(stderr,"-oMm must be called by a trusted user/config\n");
+            exit(EXIT_FAILURE);
+          }
+          message_reference = argv[++i];
+        }
+
       /* -oMr: Received protocol */
 
       else if (Ustrcmp(argrest, "Mr") == 0) received_protocol = argv[++i];
       /* -oMr: Received protocol */
 
       else if (Ustrcmp(argrest, "Mr") == 0) received_protocol = argv[++i];
index 3353ec233aef8f677405a419190e9f51ef1c0d35..12d6750436c8107fe86054fabb718bac6493e4e6 100644 (file)
@@ -1,3 +1,12 @@
 # Checking -oMa etc
 exim -odi -f jc@rome -F 'Julius Caesar' -oMa 1.1.1.1 -oMi 2.2.2.2 -oMr latin -oMs forum.rome -oMt jc44bc userx@test.ex
 This is a test message.
 # Checking -oMa etc
 exim -odi -f jc@rome -F 'Julius Caesar' -oMa 1.1.1.1 -oMi 2.2.2.2 -oMr latin -oMs forum.rome -oMt jc44bc userx@test.ex
 This is a test message.
+****
+1
+exim -odi -f jc@rome -F 'Julius Caesar' -oMm 123456-67890-11 -oMt jc44bc userx@test.x
+This is a test message.
+****
+1
+exim -odi -f jc@rome -F 'Julius Caesar' -oMm 10HmaX-0005vi-00 -oMt jc44bc userx@test.x
+This is a test message.
+****
diff --git a/test/stderr/0040 b/test/stderr/0040
new file mode 100644 (file)
index 0000000..f72bc86
--- /dev/null
@@ -0,0 +1,2 @@
+-oMm must be a valid message ID
+-oMm must be called by a trusted user/config