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,
pgpx1FiDsCF08.pgp
Description: PGP signature