Message-ID header rewriting

Peter Denison peterd@marshadder.org
Sat, 15 Jan 2005 17:38:22 +0000 (GMT)


For a while I've been thinking about extending header rewriting to the 
Message-ID header, so as to not leak information about my internal network 
out through the mail gateway. (If you are an anti-rewriting zealot, please 
stop reading now!)

I have implemented this, and done some testing of it.

It can be turned on by using the "all-headers" flag, or by adding an 'i' 
flag to the rewriting rule flags.

Fortunately someone else appears to also be interested, according to the 
exim-users list archives, so I thought I'd share the patch.

Is this sufficient as a patch-submission process, or is there some 
other address or list I should forward to? Please someone let me know.
(CC'd to debian maintainers and Jan-Peter as interested parties)

Patch is against 4.34 (from debian source package), but I have checked 
visually against a pristine 4.44, and it should apply cleanly with offsets

--- src/rewrite.c.orig	2004-05-10 13:31:20.000000000 +0100
+++ src/rewrite.c	2004-12-17 21:28:28.000000000 +0000
@@ -20,7 +20,8 @@
    "     bcc",
    "reply-to",
    "env-from",
-  "  env-to"
+  "  env-to",
+  "  msg-id"
  };

  /* Structure and table for finding source of address for debug printing */
@@ -39,6 +40,7 @@
    { rewrite_replyto, US"reply-to:" },
    { rewrite_envfrom, US"env-from" },
    { rewrite_envto,   US"env-to" },
+  { rewrite_msgid,   US"message-id:"},
    { rewrite_smtp,    US"smtp recipient" },
    { rewrite_smtp|rewrite_smtp_sender, US"smtp sender" }
  };
@@ -745,6 +747,10 @@
    case htype_reply_to:
    return rewrite_one_header(h, rewrite_replyto, routed_old, routed_new,
      rewrite_rules, existflags, replace);
+
+  case htype_id:
+  return rewrite_one_header(h, rewrite_msgid, routed_old, routed_new,
+    rewrite_rules, existflags, replace);
    }

  return NULL;
--- src/macros.h.orig	2004-05-10 13:31:20.000000000 +0100
+++ src/macros.h	2004-12-17 21:34:38.000000000 +0000
@@ -613,21 +613,22 @@
  #define rewrite_cc           0x0008
  #define rewrite_bcc          0x0010
  #define rewrite_replyto      0x0020
-#define rewrite_all_headers  0x003F  /* all header flags */
+#define rewrite_msgid        0x0040
+#define rewrite_all_headers  0x007F  /* all header flags */

-#define rewrite_envfrom      0x0040
-#define rewrite_envto        0x0080
-#define rewrite_all_envelope 0x00C0  /* all envelope flags */
+#define rewrite_envfrom      0x0080
+#define rewrite_envto        0x0100
+#define rewrite_all_envelope 0x0180  /* all envelope flags */

  #define rewrite_all      (rewrite_all_headers | rewrite_all_envelope)

-#define rewrite_smtp         0x0100  /* rewrite at SMTP time */
-#define rewrite_smtp_sender  0x0200  /* SMTP sender rewrite (allows <>) */
-#define rewrite_qualify      0x0400  /* qualify if necessary */
-#define rewrite_repeat       0x0800  /* repeat rewrite rule */
+#define rewrite_smtp         0x0200  /* rewrite at SMTP time */
+#define rewrite_smtp_sender  0x0400  /* SMTP sender rewrite (allows <>) */
+#define rewrite_qualify      0x0800  /* qualify if necessary */
+#define rewrite_repeat       0x1000  /* repeat rewrite rule */

-#define rewrite_whole        0x1000  /* option bit for headers */
-#define rewrite_quit         0x2000  /* "no more" option */
+#define rewrite_whole        0x2000  /* option bit for headers */
+#define rewrite_quit         0x4000  /* "no more" option */

  /* Flags for log_write(); LOG_MAIN, LOG_PANIC, and LOG_REJECT are also in
  local_scan.h */
--- src/readconf.c.orig	2004-05-10 13:31:20.000000000 +0100
+++ src/readconf.c	2004-12-17 21:34:38.000000000 +0000
@@ -1018,6 +1021,7 @@
    case 'c': next->flags |= rewrite_cc;   break;
    case 'b': next->flags |= rewrite_bcc;  break;
    case 'r': next->flags |= rewrite_replyto; break;
+  case 'i': next->flags |= rewrite_msgid; break;

    case 'E': next->flags |= rewrite_all_envelope; break;
    case 'F': next->flags |= rewrite_envfrom; break;

-- 
Peter Denison <peterd at marshadder dot org>
Please use this address only for personal mail, not copied to lists
gatewayed to news or web pages unless the addresses are removed.