Author: bago
Date: Sun Dec 31 08:54:40 2006
New Revision: 491442
URL: http://svn.apache.org/viewvc?view=rev&rev=491442
Log:
Moved RcptCmdHandler checks to separate RcptHook (configured by default in the
CoreHandlers)
Added:
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/AuthRequiredToRelayRcptHook.java
(with props)
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/SenderAuthIdentifyVerificationRcptHook.java
(with props)
Modified:
james/server/sandbox/handlerapi-experiment/TODO
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/CoreCmdHandlerLoader.java
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/RcptCmdHandler.java
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/filter/fastfail/DNSRBLHandler.java
james/server/sandbox/handlerapi-experiment/src/test/org/apache/james/smtpserver/SMTPServerTest.java
Modified: james/server/sandbox/handlerapi-experiment/TODO
URL:
http://svn.apache.org/viewvc/james/server/sandbox/handlerapi-experiment/TODO?view=diff&rev=491442&r1=491441&r2=491442
==============================================================================
--- james/server/sandbox/handlerapi-experiment/TODO (original)
+++ james/server/sandbox/handlerapi-experiment/TODO Sun Dec 31 08:54:40 2006
@@ -2,3 +2,7 @@
- Find a way to handle the old JunkHandlerScore stuff
- Check DataCmdHandler for correct clean-up on every exceptions
- Move abuse/postmaster tests from ResolvableEhloHeloHandlerTest to a generic
SMTPServer compliance test
+- on Rcpt message reject, the original code was logging a lot of informations.
Maybe we should change the Hook callers to do something similar (in
RcptCmdHandler create a log string including context() call)
+- Check AuthRequiredToRelayRcptHook to see if it is correct to return
different SMTP codes if Auth is announced (for relaying denied)
+- Remove CURRENT_RECIPIENT key from state usage: I think we don't use it
anymore but in tests.
+- Check why testDNSRBLRehectWorks was expecting 550, while we return now 554
(or maybe we should return 530, but not 550).
Added:
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/AuthRequiredToRelayRcptHook.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/AuthRequiredToRelayRcptHook.java?view=auto&rev=491442
==============================================================================
---
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/AuthRequiredToRelayRcptHook.java
(added)
+++
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/AuthRequiredToRelayRcptHook.java
Sun Dec 31 08:54:40 2006
@@ -0,0 +1,67 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.smtpserver.core;
+
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.james.smtpserver.SMTPSession;
+import org.apache.james.smtpserver.hook.HookResult;
+import org.apache.james.smtpserver.hook.HookReturnCode;
+import org.apache.james.smtpserver.hook.RcptHook;
+import org.apache.james.util.mail.SMTPRetCode;
+import org.apache.james.util.mail.dsn.DSNStatus;
+import org.apache.mailet.MailAddress;
+
+/**
+ * Handler which whitelist "postmaster" and "abuse" recipients.
+ */
+public class AuthRequiredToRelayRcptHook extends AbstractLogEnabled implements
+ RcptHook {
+
+ /**
+ * @see
org.apache.james.smtpserver.hook.RcptHook#doRcpt(org.apache.james.smtpserver.SMTPSession,
+ * org.apache.mailet.MailAddress, org.apache.mailet.MailAddress)
+ */
+ public HookResult doRcpt(SMTPSession session, MailAddress sender,
+ MailAddress rcpt) {
+ if (!session.isRelayingAllowed()) {
+ String toDomain = rcpt.getHost();
+ if
(!session.getConfigurationData().getMailServer().isLocalServer(toDomain)) {
+ if (session.isAuthRequired()) {
+ if (session.getUser() == null) {
+ return new HookResult(HookReturnCode.DENY,
+ SMTPRetCode.AUTH_REQUIRED, DSNStatus.getStatus(
+ DSNStatus.PERMANENT,
+ DSNStatus.SECURITY_AUTH)
+ + " Authentication Required");
+ }
+ } else {
+ return new HookResult(
+ HookReturnCode.DENY,
+ SMTPRetCode.MAILBOX_PERM_UNAVAILABLE,
+ DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.SECURITY_AUTH)
+ + " Requested action not taken: relaying
denied");
+ }
+ }
+
+ }
+ return new HookResult(HookReturnCode.DECLINED);
+ }
+
+}
Propchange:
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/AuthRequiredToRelayRcptHook.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/CoreCmdHandlerLoader.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/CoreCmdHandlerLoader.java?view=diff&rev=491442&r1=491441&r2=491442
==============================================================================
---
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/CoreCmdHandlerLoader.java
(original)
+++
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/CoreCmdHandlerLoader.java
Sun Dec 31 08:54:40 2006
@@ -47,6 +47,8 @@
private final Object SENDMAILHANDLER = SendMailHandler.class.getName();
private final Object USERSREPOSITORYAUTHHANDLER =
UsersRepositoryAuthHook.class.getName();
private final Object POSTMASTERABUSEHOOK =
PostmasterAbuseRcptHook.class.getName();
+ private final Object AUTHREQUIREDTORELAY =
AuthRequiredToRelayRcptHook.class.getName();
+ private final Object SENDERAUTHIDENTITYVERIFICATION =
SenderAuthIdentifyVerificationRcptHook.class.getName();
/**
* @see org.apache.james.smtpserver.HandlersPackage#getHandlers()
@@ -70,6 +72,8 @@
commands.add(RSETCMDHANDLER);
commands.add(VRFYCMDHANDLER);
commands.add(USERSREPOSITORYAUTHHANDLER);
+ commands.add(AUTHREQUIREDTORELAY);
+ commands.add(SENDERAUTHIDENTITYVERIFICATION);
commands.add(POSTMASTERABUSEHOOK);
return commands;
Modified:
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/RcptCmdHandler.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/RcptCmdHandler.java?view=diff&rev=491442&r1=491441&r2=491442
==============================================================================
---
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/RcptCmdHandler.java
(original)
+++
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/RcptCmdHandler.java
Sun Dec 31 08:54:40 2006
@@ -197,84 +197,6 @@
optionTokenizer = null;
}
- if (!session.isRelayingAllowed()) {
- if (session.isAuthRequired()) {
- // Make sure the mail is being sent locally if not
- // authenticated else reject.
- if (session.getUser() == null) {
- String toDomain = recipientAddress.getHost();
- if (!session.getConfigurationData().getMailServer()
- .isLocalServer(toDomain)) {
- StringBuffer sb = new StringBuffer(128);
- sb
- .append("Rejected message - authentication is
required for mail request");
- sb.append(getContext(session, recipientAddress,
- recipient));
- getLogger().error(sb.toString());
- return new SMTPResponse(SMTPRetCode.AUTH_REQUIRED,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.SECURITY_AUTH)
- + " Authentication Required");
- }
- } else {
- // Identity verification checking
- if (session.getConfigurationData().isVerifyIdentity()) {
- String authUser = (session.getUser())
- .toLowerCase(Locale.US);
- MailAddress senderAddress = (MailAddress) session
- .getState().get(SMTPSession.SENDER);
-
- if ((senderAddress == null)
- || (!authUser.equals(senderAddress
- .getUser()))
- || (!session.getConfigurationData()
- .getMailServer().isLocalServer(
- senderAddress.getHost()))) {
- if (getLogger().isErrorEnabled()) {
- StringBuffer errorBuffer = new StringBuffer(
- 128)
- .append("User ")
- .append(authUser)
- .append(
- " authenticated, however tried
sending email as ")
- .append(senderAddress).append(
- getContext(session,
- recipientAddress,
- recipient));
- getLogger().error(errorBuffer.toString());
- }
-
- return new SMTPResponse(
- SMTPRetCode.BAD_SEQUENCE,
- DSNStatus.getStatus(
- DSNStatus.PERMANENT,
- DSNStatus.SECURITY_AUTH)
- + " Incorrect Authentication for
Specified Email Address");
- }
- }
- }
- } else {
- String toDomain = recipientAddress.getHost();
- if (!session.getConfigurationData().getMailServer()
- .isLocalServer(toDomain)) {
- StringBuffer errorBuffer = new StringBuffer(128)
- .append("Rejected message - ").append(
- session.getRemoteIPAddress()).append(
- " not authorized to relay to ").append(
- toDomain).append(
- getContext(session, recipientAddress,
- recipient));
- getLogger().error(errorBuffer.toString());
-
- return new SMTPResponse(
- SMTPRetCode.MAILBOX_PERM_UNAVAILABLE,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.SECURITY_AUTH)
- + " Requested action not taken: relaying
denied");
- }
- }
- }
-
session.getState().put(SMTPSession.CURRENT_RECIPIENT,
recipientAddress);
Added:
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/SenderAuthIdentifyVerificationRcptHook.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/SenderAuthIdentifyVerificationRcptHook.java?view=auto&rev=491442
==============================================================================
---
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/SenderAuthIdentifyVerificationRcptHook.java
(added)
+++
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/SenderAuthIdentifyVerificationRcptHook.java
Sun Dec 31 08:54:40 2006
@@ -0,0 +1,65 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.smtpserver.core;
+
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.james.smtpserver.SMTPSession;
+import org.apache.james.smtpserver.hook.HookResult;
+import org.apache.james.smtpserver.hook.HookReturnCode;
+import org.apache.james.smtpserver.hook.RcptHook;
+import org.apache.james.util.mail.SMTPRetCode;
+import org.apache.james.util.mail.dsn.DSNStatus;
+import org.apache.mailet.MailAddress;
+
+import java.util.Locale;
+
+/**
+ * Handler which whitelist "postmaster" and "abuse" recipients.
+ */
+public class SenderAuthIdentifyVerificationRcptHook extends AbstractLogEnabled
+ implements RcptHook {
+
+ /**
+ * @see
org.apache.james.smtpserver.hook.RcptHook#doRcpt(org.apache.james.smtpserver.SMTPSession,
+ * org.apache.mailet.MailAddress, org.apache.mailet.MailAddress)
+ */
+ public HookResult doRcpt(SMTPSession session, MailAddress sender,
+ MailAddress rcpt) {
+ if (!session.isRelayingAllowed() && session.isAuthRequired()
+ && session.getUser() != null
+ && session.getConfigurationData().isVerifyIdentity()) {
+ String authUser = (session.getUser()).toLowerCase(Locale.US);
+ MailAddress senderAddress = (MailAddress) session.getState().get(
+ SMTPSession.SENDER);
+
+ if ((senderAddress == null)
+ || (!authUser.equals(senderAddress.getUser()))
+ || (!session.getConfigurationData().getMailServer()
+ .isLocalServer(senderAddress.getHost()))) {
+ return new HookResult(HookReturnCode.DENY,
+ SMTPRetCode.BAD_SEQUENCE,
+ DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.SECURITY_AUTH)
+ + " Incorrect Authentication for Specified
Email Address");
+ }
+ }
+ return new HookResult(HookReturnCode.DECLINED);
+ }
+
+}
Propchange:
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/SenderAuthIdentifyVerificationRcptHook.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/filter/fastfail/DNSRBLHandler.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/filter/fastfail/DNSRBLHandler.java?view=diff&rev=491442&r1=491441&r2=491442
==============================================================================
---
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/filter/fastfail/DNSRBLHandler.java
(original)
+++
james/server/sandbox/handlerapi-experiment/src/java/org/apache/james/smtpserver/core/filter/fastfail/DNSRBLHandler.java
Sun Dec 31 08:54:40 2006
@@ -34,6 +34,7 @@
import org.apache.james.smtpserver.hook.HookResult;
import org.apache.james.smtpserver.hook.HookReturnCode;
import org.apache.james.smtpserver.hook.RcptHook;
+import org.apache.james.util.mail.SMTPRetCode;
import org.apache.james.util.mail.dsn.DSNStatus;
import org.apache.mailet.MailAddress;
@@ -254,11 +255,11 @@
!(session.isAuthRequired() && session.getUser() != null) //
Not (SMTP AUTH is enabled and not authenticated)
) {
if (blocklistedDetail == null) {
- return new
HookResult(HookReturnCode.DENY,DSNStatus.getStatus(DSNStatus.PERMANENT,
+ return new
HookResult(HookReturnCode.DENY,SMTPRetCode.AUTH_REQUIRED,DSNStatus.getStatus(DSNStatus.PERMANENT,
DSNStatus.SECURITY_AUTH) + " Rejected:
unauthenticated e-mail from " + session.getRemoteIPAddress()
+ " is restricted. Contact the postmaster for
details.");
} else {
- return new
HookResult(HookReturnCode.DENY,"530",DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.SECURITY_AUTH)
+ " " + blocklistedDetail);
+ return new
HookResult(HookReturnCode.DENY,SMTPRetCode.AUTH_REQUIRED,DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.SECURITY_AUTH)
+ " " + blocklistedDetail);
}
}
Modified:
james/server/sandbox/handlerapi-experiment/src/test/org/apache/james/smtpserver/SMTPServerTest.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/handlerapi-experiment/src/test/org/apache/james/smtpserver/SMTPServerTest.java?view=diff&rev=491442&r1=491441&r2=491442
==============================================================================
---
james/server/sandbox/handlerapi-experiment/src/test/org/apache/james/smtpserver/SMTPServerTest.java
(original)
+++
james/server/sandbox/handlerapi-experiment/src/test/org/apache/james/smtpserver/SMTPServerTest.java
Sun Dec 31 08:54:40 2006
@@ -1465,7 +1465,7 @@
smtpProtocol.setSender(sender);
smtpProtocol.addRecipient("[EMAIL PROTECTED]");
- assertEquals("reject", 550, smtpProtocol
+ assertEquals("reject: "+smtpProtocol.getReplyString(), 550,
smtpProtocol
.getReplyCode());
smtpProtocol.sendShortMessageData("Subject: test\r\n\r\nTest body
testDNSRBLRejectWorks\r\n");
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]