You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/12/24 13:27:16 UTC

svn commit: r1052497 - /james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java

Author: norman
Date: Fri Dec 24 12:27:16 2010
New Revision: 1052497

URL: http://svn.apache.org/viewvc?rev=1052497&view=rev
Log:
Make sure the domain is not local before skip valid rcpt checks for sessions which are allowed to relay. See PROTOCOLS-17

Modified:
    james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java

Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java?rev=1052497&r1=1052496&r2=1052497&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java Fri Dec 24 12:27:16 2010
@@ -42,17 +42,33 @@ public abstract class AbstractValidRcptH
      * @see org.apache.james.protocols.smtp.hook.RcptHook#doRcpt(org.apache.james.protocols.smtp.SMTPSession, org.apache.mailet.MailAddress, org.apache.mailet.MailAddress)
      */
     public HookResult doRcpt(SMTPSession session, MailAddress sender, MailAddress rcpt) {
+        boolean reject = false;
         
-        if (!session.isRelayingAllowed()) {
-            if (isValidRecipient(session, rcpt) == false) {
-                //user not exist
-                session.getLogger().info("Rejected message. Unknown user: " + rcpt.toString());
-                return new HookResult(HookReturnCode.DENY,SMTPRetCode.MAILBOX_PERM_UNAVAILABLE, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.ADDRESS_MAILBOX) + " Unknown user: " + rcpt.toString());
+        if (session.isRelayingAllowed()) {
+            // check if the domain is local, if so we still want to check if the recipient is valid or not as we want to fail fast in such cases
+            if (isLocalDomain(session, rcpt.getDomain())) {
+                if (isValidRecipient(session, rcpt) == false) {
+                    reject = true;
+                }
             }
         } else {
-            session.getLogger().debug("Sender allowed");
+            if (isLocalDomain(session, rcpt.getDomain()) == false) {
+                session.getLogger().debug("Unknown domain " + rcpt.getDomain() + " so reject it");
+
+            } else {
+                if (isValidRecipient(session, rcpt) == false) {
+                    reject= true;
+                }
+            }
+        }
+       
+        if (reject) {
+          //user not exist
+            session.getLogger().info("Rejected message. Unknown user: " + rcpt.toString());
+            return new HookResult(HookReturnCode.DENY,SMTPRetCode.MAILBOX_PERM_UNAVAILABLE, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.ADDRESS_MAILBOX) + " Unknown user: " + rcpt.toString());
+        } else {
+            return new HookResult(HookReturnCode.DECLINED);
         }
-        return new HookResult(HookReturnCode.DECLINED);
     }
     
   
@@ -63,4 +79,13 @@ public abstract class AbstractValidRcptH
      * @return isValid
      */
     protected abstract boolean isValidRecipient(SMTPSession session, MailAddress recipient);
+    
+    /**
+     * Return true if the domain is local
+     * 
+     * @param session
+     * @param domain
+     * @return local
+     */
+    protected abstract boolean isLocalDomain(SMTPSession session, String domain);
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org