diff -Nru postfix-2.8.1.org/src/global/mail_params.h postfix-2.8.1.mod/src/global/mail_params.h --- postfix-2.8.1.org/src/global/mail_params.h 2011-01-17 15:56:39.000000000 +0100 +++ postfix-2.8.1.mod/src/global/mail_params.h 2011-03-16 03:10:14.262913306 +0100 @@ -1123,6 +1123,12 @@ #define DEF_LMTP_GENERIC_MAPS "" extern char *var_smtp_generic_maps; +#define VAR_SMTP_SENDER_MAPS "smtp_sender_maps" +#define DEF_SMTP_SENDER_MAPS "" +#define VAR_LMTP_SENDER_MAPS "lmtp_sender_maps" +#define DEF_LMTP_SENDER_MAPS "" +extern char *var_smtp_sender_maps; + /* * SMTP server. The soft error limit determines how many errors an SMTP * client may make before we start to slow down; the hard error limit diff -Nru postfix-2.8.1.org/src/smtp/smtp.c postfix-2.8.1.mod/src/smtp/smtp.c --- postfix-2.8.1.org/src/smtp/smtp.c 2010-12-31 02:19:44.000000000 +0100 +++ postfix-2.8.1.mod/src/smtp/smtp.c 2011-03-16 03:13:01.775917207 +0100 @@ -800,6 +800,7 @@ #endif char *var_smtp_generic_maps; +char *var_smtp_sender_maps; char *var_prop_extension; bool var_smtp_sender_auth; char *var_lmtp_tcp_port; @@ -829,6 +830,7 @@ SCACHE *smtp_scache; MAPS *smtp_ehlo_dis_maps; MAPS *smtp_generic_maps; +MAPS *smtp_sender_maps; int smtp_ext_prop_mask; unsigned smtp_dns_res_opt; MAPS *smtp_pix_bug_maps; @@ -1096,6 +1098,14 @@ DICT_FLAG_LOCK | DICT_FLAG_FOLD_FIX); /* + * Sender maps + */ + if (*var_smtp_sender_maps) + smtp_sender_maps = + maps_create(VAR_SMTP_SENDER_MAPS, var_smtp_sender_maps, + DICT_FLAG_LOCK | DICT_FLAG_FOLD_FIX); + + /* * Header/body checks. */ smtp_header_checks = hbc_header_checks_create( diff -Nru postfix-2.8.1.org/src/smtp/smtp.h postfix-2.8.1.mod/src/smtp/smtp.h --- postfix-2.8.1.org/src/smtp/smtp.h 2010-08-28 02:03:15.000000000 +0200 +++ postfix-2.8.1.mod/src/smtp/smtp.h 2011-03-16 03:10:14.365928422 +0100 @@ -178,6 +178,7 @@ extern MAPS *smtp_pix_bug_maps; /* PIX workarounds */ extern MAPS *smtp_generic_maps; /* make internal address valid */ +extern MAPS *smtp_sender_maps; extern int smtp_ext_prop_mask; /* address externsion propagation */ extern unsigned smtp_dns_res_opt; /* DNS query flags */ diff -Nru postfix-2.8.1.org/src/smtp/smtp_params.c postfix-2.8.1.mod/src/smtp/smtp_params.c --- postfix-2.8.1.org/src/smtp/smtp_params.c 2010-08-28 02:03:15.000000000 +0200 +++ postfix-2.8.1.mod/src/smtp/smtp_params.c 2011-03-16 03:10:14.397841397 +0100 @@ -43,6 +43,7 @@ VAR_SMTP_TLS_POLICY, DEF_SMTP_TLS_POLICY, &var_smtp_tls_policy, 0, 0, VAR_PROP_EXTENSION, DEF_PROP_EXTENSION, &var_prop_extension, 0, 0, VAR_SMTP_GENERIC_MAPS, DEF_SMTP_GENERIC_MAPS, &var_smtp_generic_maps, 0, 0, + VAR_SMTP_SENDER_MAPS, DEF_SMTP_SENDER_MAPS, &var_smtp_sender_maps, 0, 0, VAR_LMTP_TCP_PORT, DEF_LMTP_TCP_PORT, &var_lmtp_tcp_port, 0, 0, VAR_SMTP_PIX_BUG_WORDS, DEF_SMTP_PIX_BUG_WORDS, &var_smtp_pix_bug_words, 0, 0, VAR_SMTP_PIX_BUG_MAPS, DEF_SMTP_PIX_BUG_MAPS, &var_smtp_pix_bug_maps, 0, 0, diff -Nru postfix-2.8.1.org/src/smtp/smtp_proto.c postfix-2.8.1.mod/src/smtp/smtp_proto.c --- postfix-2.8.1.org/src/smtp/smtp_proto.c 2011-01-08 01:12:06.000000000 +0100 +++ postfix-2.8.1.mod/src/smtp/smtp_proto.c 2011-03-16 03:10:14.422930785 +0100 @@ -1132,10 +1132,10 @@ /* * Macros for readability. */ -#define REWRITE_ADDRESS(dst, src) do { \ +#define REWRITE_ADDRESS(dst, src, map) do { \ vstring_strcpy(dst, src); \ - if (*(src) && smtp_generic_maps) \ - smtp_map11_internal(dst, smtp_generic_maps, \ + if (*(src) && map) \ + smtp_map11_internal(dst, map, \ smtp_ext_prop_mask & EXT_PROP_GENERIC); \ } while (0) @@ -1321,7 +1321,10 @@ case SMTP_STATE_MAIL: request->msg_stats.reuse_count = session->reuse_count; GETTIMEOFDAY(&request->msg_stats.conn_setup_done); - REWRITE_ADDRESS(session->scratch2, request->sender); + if (smtp_sender_maps) + REWRITE_ADDRESS(session->scratch2, request->sender, smtp_sender_maps); + else + REWRITE_ADDRESS(session->scratch2, request->sender, smtp_generic_maps); QUOTE_ADDRESS(session->scratch, vstring_str(session->scratch2)); vstring_sprintf(next_command, "MAIL FROM:<%s>", vstring_str(session->scratch)); @@ -1396,7 +1399,7 @@ */ case SMTP_STATE_RCPT: rcpt = request->rcpt_list.info + send_rcpt; - REWRITE_ADDRESS(session->scratch2, rcpt->address); + REWRITE_ADDRESS(session->scratch2, rcpt->address, smtp_generic_maps); QUOTE_ADDRESS(session->scratch, vstring_str(session->scratch2)); vstring_sprintf(next_command, "RCPT TO:<%s>", vstring_str(session->scratch));