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: [email protected]
For additional commands, e-mail: [email protected]