Re: Postfix behavior

From: (no name) (no email)
Date: Tue Mar 02 2004 - 09:29:31 EST


On Tue, 2 Mar 2004, Wietse Venema wrote:

> :
> > On Tue, 2 Mar 2004, Mike Futerko wrote:
> >
> > > For example you send me mail, so why I have to check YOUR address in MY ALIAS
> > > tables, while I don't accept mail for YOUR domain nor your IP match mynetworks?!
> > >
> >
> > Only "local", "virtual alias", "virtual mailbox" and "relay" addresses are
> > checked. See ADDRESS_CLASS_README. Please make accurate observations.
>
> In addition, every MAIL FROM or RCPT TO address is run through the
> virtual alias table, regardless of its address class.
>

This should be optimized out when the address class is "default" and the
transport is not the error transport. Later, when validation is applied to
the *output* of canonical, the canonical mapping will have to be brought
back. By then Liviu's "domain" patch should be available for all the
"expensive" map types.

-- 
	Viktor.
Index: src/smtpd/smtpd_check.c
--- src/smtpd/smtpd_check.c	5 Feb 2004 20:59:24 -0000	1.1.1.36.4.1
+++ src/smtpd/smtpd_check.c	2 Mar 2004 14:25:19 -0000
@@ -3865,6 +3865,7 @@
 			           const char *reply_class)
 {
     const RESOLVE_REPLY *reply;
+    int   error_rcpt;
     if (msg_verbose)
 	msg_info(">>> CHECKING RECIPIENT MAPS <<<");
@@ -3893,7 +3894,10 @@
      * stream. See also the next comment block on recipients in virtual alias
      * domains.
      */
-    if (MATCH(rcpt_canon_maps, CONST_STR(reply->recipient))
+    error_rcpt = (strcmp(STR(reply->transport), MAIL_SERVICE_ERROR) == 0);
+    if ((error_rcpt == 0
+    	 && (reply->flags & RESOLVE_CLASS_MASK) == RESOLVE_CLASS_DEFAULT)
+	|| MATCH(rcpt_canon_maps, CONST_STR(reply->recipient))
 	|| MATCH(canonical_maps, CONST_STR(reply->recipient))
 	|| MATCH(virt_alias_maps, CONST_STR(reply->recipient)))
 	return (0);
@@ -3906,7 +3910,7 @@
      * unknown recipients in virtual alias domains will both resolve to
      * "error:user unknown".
      */
-    if (strcmp(STR(reply->transport), MAIL_SERVICE_ERROR) == 0)
+    if (error_rcpt)
 	return (smtpd_check_reject(state, MAIL_ERROR_BOUNCE,
 				   "%d <%s>: %s rejected: %s",
 				   (reply->flags & RESOLVE_CLASS_ALIAS) ?







Hosted Email Solutions

Invaluement Anti-Spam DNSBLs



Powered By FreeBSD   Powered By FreeBSD