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