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 2006/06/30 17:17:58 UTC
svn commit: r418309 - in
/james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver: ./
fastfailfilter/
Author: norman
Date: Fri Jun 30 08:17:57 2006
New Revision: 418309
URL: http://svn.apache.org/viewvc?rev=418309&view=rev
Log:
Create new package which holds the fastfailfilter handlers
Extract the "filtercode" from the CoreHandler and build filterHandlers
Added:
james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/
james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/MaxRcptHandler.java
james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ResolvableEhloHeloHandler.java
james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ReverseEqualsEhloHeloHandler.java
james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/TarpitHandler.java
james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ValidSenderDomainHandler.java
Modified:
james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/SMTPSession.java
Modified: james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/SMTPSession.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/SMTPSession.java?rev=418309&r1=418308&r2=418309&view=diff
==============================================================================
--- james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/SMTPSession.java (original)
+++ james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/SMTPSession.java Fri Jun 30 08:17:57 2006
@@ -37,6 +37,7 @@
public final static String SENDER = "SENDER_ADDRESS"; // Sender's email address
public final static String RCPT_LIST = "RCPT_LIST"; // The message recipients
public final static String CURRENT_HELO_MODE = "CURRENT_HELO_MODE"; // HELO or EHLO
+ public final static String STOP_HANDLER_PROCESSING = "STOP_HANDLER_PROCESSING";
/**
* Writes response string to the client
Added: james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/MaxRcptHandler.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/MaxRcptHandler.java?rev=418309&view=auto
==============================================================================
--- james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/MaxRcptHandler.java (added)
+++ james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/MaxRcptHandler.java Fri Jun 30 08:17:57 2006
@@ -0,0 +1,95 @@
+/***********************************************************************
+ * Copyright (c) 1999-2006 The Apache Software Foundation. *
+ * All rights reserved. *
+ * ------------------------------------------------------------------- *
+ * Licensed 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.fastfailfilter;
+
+import java.util.Collection;
+
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.james.smtpserver.CommandHandler;
+import org.apache.james.smtpserver.SMTPSession;
+import org.apache.james.util.mail.dsn.DSNStatus;
+
+public class MaxRcptHandler extends AbstractLogEnabled implements
+ CommandHandler, Configurable {
+
+ private int maxRcpt = 0;
+
+ /**
+ * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
+ */
+ public void configure(Configuration handlerConfiguration)
+ throws ConfigurationException {
+ Configuration configuration = handlerConfiguration.getChild("maxRcpt",
+ false);
+ if (configuration != null) {
+ setMaxRcpt(configuration.getValueAsInteger(0));
+ } else {
+ throw new ConfigurationException(
+ "Please set the maxRcpt configuration value");
+ }
+ }
+
+ /**
+ * Set the max rcpt for wich should be accepted
+ *
+ * @param maxRcpt
+ * The max rcpt count
+ */
+ public void setMaxRcpt(int maxRcpt) {
+ this.maxRcpt = maxRcpt;
+ }
+
+ // TODO: move this to a util class or something simular
+ private int getRcptCount(SMTPSession session) {
+ int startCount = 0;
+
+ // check if the key exists
+ if (session.getState().get(SMTPSession.RCPT_LIST) != null) {
+ return ((Collection) session.getState().get(SMTPSession.RCPT_LIST))
+ .size();
+ } else {
+ return startCount;
+ }
+ }
+
+ /**
+ * @see org.apache.james.smtpserver.CommandHandler#onCommand(SMTPSession)
+ */
+ public void onCommand(SMTPSession session) {
+ String responseString = null;
+ int rcptCount = 0;
+
+ rcptCount = getRcptCount(session) + 1;
+
+ // check if the max recipients has reached
+ if (rcptCount > maxRcpt) {
+ responseString = "452 "
+ + DSNStatus.getStatus(DSNStatus.NETWORK,
+ DSNStatus.DELIVERY_TOO_MANY_REC)
+ + " Requested action not taken: max recipients reached";
+ session.writeResponse(responseString);
+ getLogger().error(responseString);
+
+ // After this filter match we should not call any other handler!
+ session.getState().put(SMTPSession.STOP_HANDLER_PROCESSING, "true");
+ }
+ }
+}
Added: james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ResolvableEhloHeloHandler.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ResolvableEhloHeloHandler.java?rev=418309&view=auto
==============================================================================
--- james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ResolvableEhloHeloHandler.java (added)
+++ james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ResolvableEhloHeloHandler.java Fri Jun 30 08:17:57 2006
@@ -0,0 +1,111 @@
+/***********************************************************************
+ * Copyright (c) 1999-2006 The Apache Software Foundation. *
+ * All rights reserved. *
+ * ------------------------------------------------------------------- *
+ * Licensed 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.fastfailfilter;
+
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
+import org.apache.james.services.DNSServer;
+import org.apache.james.smtpserver.CommandHandler;
+import org.apache.james.smtpserver.SMTPSession;
+import org.apache.james.util.mail.dsn.DSNStatus;
+
+import java.net.UnknownHostException;
+
+public class ResolvableEhloHeloHandler extends AbstractLogEnabled
+ implements CommandHandler, Configurable, Serviceable {
+
+ private boolean checkAuthNetworks = false;
+
+ private DNSServer dnsServer = null;
+
+ /**
+ * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
+ */
+ public void configure(Configuration handlerConfiguration)
+ throws ConfigurationException {
+ Configuration configRelay = handlerConfiguration.getChild(
+ "checkAuthNetworks", false);
+ if (configRelay != null) {
+ setCheckAuthNetworks(configRelay.getValueAsBoolean(false));
+ }
+ }
+
+ /**
+ * @see org.apache.avalon.framework.service.Serviceable#service(ServiceManager)
+ */
+ public void service(ServiceManager serviceMan) throws ServiceException {
+ setDnsServer((DNSServer) serviceMan.lookup(DNSServer.ROLE));
+ }
+
+ /**
+ * Set to true if AuthNetworks should be included in the EHLO check
+ *
+ * @param checkAuthNetworks
+ * Set to true to enable
+ */
+ public void setCheckAuthNetworks(boolean checkAuthNetworks) {
+ this.checkAuthNetworks = checkAuthNetworks;
+ }
+
+ /**
+ * Set the DNSServer
+ *
+ * @param dnsServer
+ * The DNSServer
+ */
+ public void setDnsServer(DNSServer dnsServer) {
+ this.dnsServer = dnsServer;
+ }
+
+ /**
+ * @see org.apache.james.smtpserver.fastfailfilter.HeloFilterHandler#onEhloCommand(SMTPSession)
+ */
+ public void onCommand(SMTPSession session) {
+ String argument = session.getCommandArgument();
+ String responseString = null;
+
+ /**
+ * don't check if the ip address is allowed to relay. Only check if it
+ * is set in the config.
+ */
+ if (!session.isRelayingAllowed() || checkAuthNetworks) {
+ // try to resolv the provided helo. If it can not resolved do not
+ // accept it.
+ try {
+ dnsServer.getByName(argument);
+ } catch (UnknownHostException e) {
+ responseString = "501 "
+ + DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.DELIVERY_INVALID_ARG)
+ + " Provided EHLO/HELO " + argument
+ + " can not resolved";
+ session.writeResponse(responseString);
+ getLogger().info(responseString);
+
+ // After this filter match we should not call any other handler!
+ session.getState().put(SMTPSession.STOP_HANDLER_PROCESSING,
+ "true");
+ }
+ }
+ }
+}
Added: james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ReverseEqualsEhloHeloHandler.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ReverseEqualsEhloHeloHandler.java?rev=418309&view=auto
==============================================================================
--- james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ReverseEqualsEhloHeloHandler.java (added)
+++ james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ReverseEqualsEhloHeloHandler.java Fri Jun 30 08:17:57 2006
@@ -0,0 +1,127 @@
+/***********************************************************************
+ * Copyright (c) 1999-2006 The Apache Software Foundation. *
+ * All rights reserved. *
+ * ------------------------------------------------------------------- *
+ * Licensed 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.fastfailfilter;
+
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
+import org.apache.james.services.DNSServer;
+import org.apache.james.smtpserver.CommandHandler;
+import org.apache.james.smtpserver.SMTPSession;
+import org.apache.james.util.mail.dsn.DSNStatus;
+
+import java.net.UnknownHostException;
+
+public class ReverseEqualsEhloHeloHandler extends AbstractLogEnabled
+ implements CommandHandler, Configurable, Serviceable {
+
+ private boolean checkAuthNetworks = false;
+
+ private DNSServer dnsServer = null;
+
+ /**
+ * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
+ */
+ public void configure(Configuration handlerConfiguration)
+ throws ConfigurationException {
+ Configuration configRelay = handlerConfiguration.getChild(
+ "checkAuthNetworks", false);
+ if (configRelay != null) {
+ setCheckAuthNetworks(configRelay.getValueAsBoolean(false));
+ }
+ }
+
+ /**
+ * @see org.apache.avalon.framework.service.Serviceable#service(ServiceManager)
+ */
+ public void service(ServiceManager serviceMan) throws ServiceException {
+ setDnsServer((DNSServer) serviceMan.lookup(DNSServer.ROLE));
+ }
+
+ /**
+ * Set to true if AuthNetworks should be included in the EHLO check
+ *
+ * @param checkAuthNetworks
+ * Set to true to enable
+ */
+ public void setCheckAuthNetworks(boolean checkAuthNetworks) {
+ this.checkAuthNetworks = checkAuthNetworks;
+ }
+
+ /**
+ * Set the DNSServer
+ *
+ * @param dnsServer
+ * The DNSServer
+ */
+ public void setDnsServer(DNSServer dnsServer) {
+ this.dnsServer = dnsServer;
+ }
+
+ /**
+ * @see org.apache.james.smtpserver.CommandHandler#onCommand(SMTPSession)
+ */
+ public void onCommand(SMTPSession session) {
+ String argument = session.getCommandArgument();
+ String responseString = null;
+
+ /**
+ * don't check if the ip address is allowed to relay. Only check if it
+ * is set in the config. ed.
+ */
+ if (!session.isRelayingAllowed() || checkAuthNetworks) {
+ try {
+ // get reverse entry
+ String reverse = dnsServer.getByName(
+ session.getRemoteIPAddress()).getHostName();
+
+ if (!argument.equals(reverse)) {
+ responseString = "501 "
+ + DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.DELIVERY_INVALID_ARG)
+ + " Provided EHLO " + argument
+ + " not equal reverse of "
+ + session.getRemoteIPAddress();
+
+ session.writeResponse(responseString);
+ getLogger().info(responseString);
+
+ // After this filter match we should not call any other handler!
+ session.getState().put(SMTPSession.STOP_HANDLER_PROCESSING,
+ "true");
+ }
+ } catch (UnknownHostException e) {
+ responseString = "501 "
+ + DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.DELIVERY_INVALID_ARG) + " Ipaddress "
+ + session.getRemoteIPAddress() + " can not resolved";
+
+ session.writeResponse(responseString);
+ getLogger().info(responseString);
+
+ // After this filter match we should not call any other handler!
+ session.getState().put(SMTPSession.STOP_HANDLER_PROCESSING,
+ "true");
+ }
+ }
+ }
+}
Added: james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/TarpitHandler.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/TarpitHandler.java?rev=418309&view=auto
==============================================================================
--- james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/TarpitHandler.java (added)
+++ james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/TarpitHandler.java Fri Jun 30 08:17:57 2006
@@ -0,0 +1,123 @@
+/***********************************************************************
+ * Copyright (c) 1999-2006 The Apache Software Foundation. *
+ * All rights reserved. *
+ * ------------------------------------------------------------------- *
+ * Licensed 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.fastfailfilter;
+
+import java.util.Collection;
+
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.james.smtpserver.CommandHandler;
+import org.apache.james.smtpserver.SMTPSession;
+
+public class TarpitHandler extends AbstractLogEnabled implements
+ CommandHandler, Configurable {
+
+ private int tarpitRcptCount = 0;
+
+ private long tarpitSleepTime = 5000;
+
+ /**
+ * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
+ */
+ public void configure(Configuration handlerConfiguration)
+ throws ConfigurationException {
+
+ Configuration configTarpitRcptCount = handlerConfiguration.getChild(
+ "tarpitRcptCount", false);
+ if (configTarpitRcptCount != null) {
+ setTarpitRcptCount(configTarpitRcptCount.getValueAsInteger(0));
+ }
+
+ if (tarpitRcptCount == 0)
+ throw new ConfigurationException(
+ "Please set the tarpitRcptCount bigger values as 0");
+
+ Configuration configTarpitSleepTime = handlerConfiguration.getChild(
+ "tarpitSleepTime", false);
+ if (configTarpitSleepTime != null) {
+ setTarpitSleepTime(configTarpitSleepTime.getValueAsLong(5000));
+ }
+
+ if (tarpitSleepTime == 0)
+ throw new ConfigurationException(
+ "Please set the tarpitSleepTimeto a bigger values as 0");
+
+ }
+
+ /**
+ * Set the tarpit count after which the tarpit sleep time will be activated
+ *
+ * @param tarpitRcptCount
+ */
+ public void setTarpitRcptCount(int tarpitRcptCount) {
+ this.tarpitRcptCount = tarpitRcptCount;
+ }
+
+ /**
+ * Set the tarpit sleep time
+ *
+ * @param tarpitSleepTime
+ * Time in milliseconds
+ */
+ public void setTarpitSleepTime(long tarpitSleepTime) {
+ this.tarpitSleepTime = tarpitSleepTime;
+ }
+
+ //TODO: Move to util class
+ private int getRcptCount(SMTPSession session) {
+ int startCount = 0;
+
+ // check if the key exists
+ if (session.getState().get(SMTPSession.RCPT_LIST) != null) {
+ return ((Collection) session.getState().get(SMTPSession.RCPT_LIST))
+ .size();
+ } else {
+ return startCount;
+ }
+ }
+
+ /**
+ * Add a sleep for the given milliseconds
+ *
+ * @param timeInMillis
+ * Time in ms
+ * @throws InterruptedException
+ */
+ private void sleep(float timeInMillis) throws InterruptedException {
+ Thread.sleep((long) timeInMillis);
+ }
+
+ /**
+ * @see org.apache.james.smtpserver.CommandHandler#onCommand(SMTPSession)
+ */
+ public void onCommand(SMTPSession session) {
+
+ int rcptCount = 0;
+ rcptCount = getRcptCount(session);
+ rcptCount++;
+
+ if (rcptCount > tarpitRcptCount) {
+ try {
+ sleep(tarpitSleepTime);
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+}
Added: james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ValidSenderDomainHandler.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ValidSenderDomainHandler.java?rev=418309&view=auto
==============================================================================
--- james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ValidSenderDomainHandler.java (added)
+++ james/server/sandbox/handlerapi/src/java/org/apache/james/smtpserver/fastfailfilter/ValidSenderDomainHandler.java Fri Jun 30 08:17:57 2006
@@ -0,0 +1,109 @@
+/***********************************************************************
+ * Copyright (c) 1999-2006 The Apache Software Foundation. *
+ * All rights reserved. *
+ * ------------------------------------------------------------------- *
+ * Licensed 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.fastfailfilter;
+
+import java.util.Collection;
+
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
+import org.apache.james.services.DNSServer;
+import org.apache.james.smtpserver.CommandHandler;
+import org.apache.james.smtpserver.SMTPSession;
+import org.apache.james.util.mail.dsn.DSNStatus;
+import org.apache.mailet.MailAddress;
+
+public class ValidSenderDomainHandler
+ extends AbstractLogEnabled
+ implements CommandHandler, Configurable, Serviceable {
+
+ private boolean checkAuthClients = false;
+
+ private DNSServer dnsServer = null;
+
+ /**
+ * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
+ */
+ public void configure(Configuration handlerConfiguration) throws ConfigurationException {
+
+ Configuration configRelay = handlerConfiguration.getChild("checkAuthClients",false);
+ if(configRelay != null) {
+ setCheckAuthClients(configRelay.getValueAsBoolean(false));
+ }
+ }
+
+ /**
+ * @see org.apache.avalon.framework.service.Serviceable#service(ServiceManager)
+ */
+ public void service(ServiceManager serviceMan) throws ServiceException {
+ setDnsServer((DNSServer) serviceMan.lookup(DNSServer.ROLE));
+ }
+
+ /**
+ * Set the DnsServer
+ *
+ * @param dnsServer The DnsServer
+ */
+ public void setDnsServer(DNSServer dnsServer) {
+ this.dnsServer = dnsServer;
+ }
+
+ /**
+ * Enable checking of authorized clients
+ *
+ * @param checkAuthClients Set to true to enable
+ */
+ public void setCheckAuthClients(boolean checkAuthClients) {
+ this.checkAuthClients = checkAuthClients;
+ }
+
+
+ /**
+ * @see org.apache.james.smtpserver.CommandHandler#onCommand(SMTPSession)
+ */
+ public void onCommand(SMTPSession session) {
+
+ String responseString = null;
+ MailAddress senderAddress = (MailAddress) session.getState().get(SMTPSession.SENDER);
+
+ /**
+ * don't check if the ip address is allowed to relay. Only check if it is set in the config.
+ */
+ if (checkAuthClients || !session.isRelayingAllowed()) {
+
+ // Maybe we should build a static method in org.apache.james.dnsserver.DNSServer ?
+ Collection records;
+
+
+ // try to resolv the provided domain in the senderaddress. If it can not resolved do not accept it.
+ records = dnsServer.findMXRecords(senderAddress.getHost());
+ if (records == null || records.size() == 0) {
+ responseString = "501 "+DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.ADDRESS_SYNTAX_SENDER)+ " sender " + senderAddress + " contains a domain with no valid MX records";
+ session.writeResponse(responseString);
+ getLogger().info(responseString);
+
+ // After this filter match we should not call any other handler!
+ session.getState().put(SMTPSession.STOP_HANDLER_PROCESSING, "true");
+ }
+ }
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org