Hi, all

I'm just playing with implement SRS(Sender Rewriting Scheme)-like
function into Postfix.
   *SRS - http://www.openspf.org/SRS
A trivial patch, attached this message would do the following.
* rewrite sender when the message will forward to other site/domain.
* Nope when the VERP setting is active.
* rewriting format:
  Message sender: orig_sen...@domain.com (sender)
  Forwarder: forwar...@my.dom (orig_addr)
  ->  MAIL From: forwarder+orig_sender=domain....@my.dom
* target transport is smtp only.

ToDo.
configurable options to activate the function, target transports,
target domains, etc.

Any comments would be appreciated.

Thanks,
---
Tomo.
diff -ru postfix-2.7.0.orig/src/qmgr/qmgr_deliver.c postfix-2.7.0/src/qmgr/qmgr_deliver.c
--- postfix-2.7.0.orig/src/qmgr/qmgr_deliver.c	2009-01-17 02:42:56.000000000 +0900
+++ postfix-2.7.0/src/qmgr/qmgr_deliver.c	2010-05-22 00:50:40.000000000 +0900
@@ -140,6 +140,12 @@
     MSG_STATS stats;
     char   *sender;
     int     flags;
+    /* XXX playing SRS XXX */
+    RECIPIENT org_sender;
+    QMGR_TRANSPORT *transport = entry->queue->transport;
+    char *at1;
+    char *at2;
+    /* XXX playing SRS XXX */
 
     /*
      * If variable envelope return path is requested, change pref...@origin
@@ -148,6 +154,23 @@
      */
     if (message->verp_delims == 0) {
 	sender = message->sender;
+	/* XXX playing SRS XXX */
+	if (list.info->orig_addr) {
+	    /* compare domain part */
+	    at1 = strrchr(list.info->orig_addr, '@');
+	    at2 = strrchr(list.info->address, '@');
+	    if (at1 != 0 && at2 != 0
+		&& strcasecmp(at1, at2) != 0
+		&& (strcmp(transport->name, "smtp") == 0) ) {
+		RECIPIENT_ASSIGN(&org_sender, 0, "", 0, "", sender);
+		sender_buf = vstring_alloc(100);
+		verp_sender(sender_buf, var_verp_delims, list.info->orig_addr, &org_sender);
+		sender = vstring_str(sender_buf);
+		if (msg_verbose)
+		    msg_info("%s: sender rewrite %s -> %s for %s",
+			     message->queue_id, message->sender, sender, transport->name);
+	    }
+	}
     } else {
 	sender_buf = vstring_alloc(100);
 	verp_sender(sender_buf, message->verp_delims,

Attachment: pgpx1FiDsCF08.pgp
Description: PGP signature

Reply via email to