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/10/14 17:59:43 UTC
svn commit: r463966 - in /james/server/trunk/src: conf/
java/org/apache/james/remotemanager/ java/org/apache/james/smtpserver/
java/org/apache/james/smtpserver/core/filter/fastfail/
java/org/apache/james/vut/ test/org/apache/james/smtpserver/ test/org/...
Author: norman
Date: Sat Oct 14 08:59:42 2006
New Revision: 463966
URL: http://svn.apache.org/viewvc?view=rev&rev=463966
Log:
Use VirtualUserService support to ValidRcptHandler.
Add junit tests.
Added:
james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.xinfo
james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.xinfo
Removed:
james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/AbstractVirtualUserTableHandler.java
james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/JDBCVirtualUserTableHandler.java
james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/XMLVirtualUserTableHandler.java
Modified:
james/server/trunk/src/conf/james-assembly.xml
james/server/trunk/src/conf/james-config.xml
james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManager.xinfo
james/server/trunk/src/java/org/apache/james/smtpserver/SMTPServer.xinfo
james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidRcptHandler.java
james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java
james/server/trunk/src/test/org/apache/james/smtpserver/ValidRcptHandlerTest.java
james/server/trunk/src/test/org/apache/james/vut/JDBCVirtualUserTableTest.java
Modified: james/server/trunk/src/conf/james-assembly.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/src/conf/james-assembly.xml?view=diff&rev=463966&r1=463965&r2=463966
==============================================================================
--- james/server/trunk/src/conf/james-assembly.xml (original)
+++ james/server/trunk/src/conf/james-assembly.xml Sat Oct 14 08:59:42 2006
@@ -84,6 +84,8 @@
<provide name="bayesiananalyzermanagement"
role="org.apache.james.services.BayesianAnalyzerManagementService"/>
<provide name="dnsserver" role="org.apache.james.services.DNSServer"/>
+ <provide name="virtualusertable"
+ role="org.apache.james.services.VirtualUserTableManagement" />
</block>
<!-- The User Management block -->
@@ -120,6 +122,8 @@
<provide name="database-connections"
role="org.apache.avalon.cornerstone.services.datasources.DataSourceSelector" />
<provide name="filesystem" role="org.apache.james.services.FileSystem" />
+ <provide name="virtualusertable"
+ role="org.apache.james.services.VirtualUserTable" />
</block>
<!-- NNTP Server -->
@@ -182,6 +186,17 @@
<!-- The context FileSystem implementation -->
<block name="filesystem" class="org.apache.james.context.AvalonFileSystem">
</block>
+
+ <!-- VirtualUserTable services -->
+ <block name="virtualusertable" class="org.apache.james.vut.JDBCVirtualUserTable" >
+ <provide name="database-connections"
+ role="org.apache.avalon.cornerstone.services.datasources.DataSourceSelector" />
+ <provide name="filesystem" role="org.apache.james.services.FileSystem" />
+ </block>
+ <!--
+ <block name="virtualusertable" class="org.apache.james.vut.JDBCVirtualUserTable" />
+ -->
+
<!-- Configuration for Cornerstone Blocks only after here
NOTHING BELOW THIS SHOULD NEED CHANGING,
Modified: james/server/trunk/src/conf/james-config.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/src/conf/james-config.xml?view=diff&rev=463966&r1=463965&r2=463966
==============================================================================
--- james/server/trunk/src/conf/james-config.xml (original)
+++ james/server/trunk/src/conf/james-config.xml Sat Oct 14 08:59:42 2006
@@ -779,6 +779,12 @@
<repositoryPath> db://maildb </repositoryPath>
</bayesiananalyzermanagement>
+ <!-- VirtualUserTable Service-->
+ <virtualusertable>
+ <repositoryPath> db://maildb </repositoryPath>
+ <sqlFile>file://conf/sqlResources.xml</sqlFile>
+ </virtualusertable>
+
<!-- The RemoteManager server is enabled by default -->
<!-- Disabling blocks will stop them from listening, -->
Modified: james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManager.xinfo
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManager.xinfo?view=diff&rev=463966&r1=463965&r2=463966
==============================================================================
--- james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManager.xinfo (original)
+++ james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManager.xinfo Sat Oct 14 08:59:42 2006
@@ -43,5 +43,8 @@
<dependency>
<service name="org.apache.james.services.DNSServer" version="1.0"/>
</dependency>
+ <dependency>
+ <service name="org.apache.james.services.VirtualUserTableManagement" version="1.0"/>
+ </dependency>
</dependencies>
</blockinfo>
Modified: james/server/trunk/src/java/org/apache/james/smtpserver/SMTPServer.xinfo
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/smtpserver/SMTPServer.xinfo?view=diff&rev=463966&r1=463965&r2=463966
==============================================================================
--- james/server/trunk/src/java/org/apache/james/smtpserver/SMTPServer.xinfo (original)
+++ james/server/trunk/src/java/org/apache/james/smtpserver/SMTPServer.xinfo Sat Oct 14 08:59:42 2006
@@ -40,5 +40,8 @@
<dependency>
<service name="org.apache.james.services.FileSystem" version="1.0"/>
</dependency>
+ <dependency>
+ <service name="org.apache.james.services.VirtualUserTable" version="1.0"/>
+ </dependency>
</dependencies>
</blockinfo>
Modified: james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidRcptHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidRcptHandler.java?view=diff&rev=463966&r1=463965&r2=463966
==============================================================================
--- james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidRcptHandler.java (original)
+++ james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidRcptHandler.java Sat Oct 14 08:59:42 2006
@@ -31,9 +31,14 @@
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.VirtualUserTable;
import org.apache.james.smtpserver.CommandHandler;
import org.apache.james.smtpserver.SMTPSession;
import org.apache.james.util.mail.dsn.DSNStatus;
+import org.apache.james.vut.ErrorMappingException;
import org.apache.mailet.MailAddress;
import org.apache.oro.text.regex.MalformedPatternException;
import org.apache.oro.text.regex.Pattern;
@@ -43,12 +48,21 @@
/**
* Handler which reject invalid recipients
*/
-public class ValidRcptHandler extends AbstractLogEnabled implements CommandHandler, Configurable {
+public class ValidRcptHandler extends AbstractLogEnabled implements CommandHandler, Configurable, Serviceable {
private Collection recipients = new ArrayList();
private Collection domains = new ArrayList();
private Collection regex = new ArrayList();
-
+ private boolean vut = true;
+ private VirtualUserTable table;
+
+ /**
+ * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
+ */
+ public void service(ServiceManager arg0) throws ServiceException {
+ table = (VirtualUserTable) arg0.lookup(VirtualUserTable.ROLE);
+ }
+
/**
* @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
*/
@@ -71,6 +85,11 @@
throw new ConfigurationException("Malformed pattern: ", mpe);
}
}
+ Configuration vutConfig = arg0.getChild("enableVirtualUserTable");
+
+ if (vutConfig != null) {
+ vut = vutConfig.getValueAsBoolean(true);
+ }
}
/**
@@ -124,6 +143,10 @@
}
}
+
+ public void setVirtualUserTableSupport(boolean vut) {
+ this.vut = vut;
+ }
/**
* @see org.apache.james.smtpserver.CommandHandler#getImplCommands()
@@ -162,8 +185,23 @@
}
// check if an valid virtual mapping exists
- if (invalidUser == true && session.getState().get(AbstractVirtualUserTableHandler.VALID_USER) != null) {
- invalidUser = false;
+ if (invalidUser == true && vut == true) {
+ try {
+ Collection targetString = table.getMappings(rcpt.getUser(), rcpt.getHost());
+
+ if (targetString.isEmpty() == false) {
+ invalidUser = false;
+ }
+ } catch (ErrorMappingException e) {
+
+ String responseString = e.getMessage();
+
+ getLogger().info("Rejected message. Reject Message: " + responseString);
+
+ session.writeResponse(responseString);
+ session.setStopHandlerProcessing(true);
+ }
+ //invalidUser = false;
}
if (invalidUser == true && !regex.isEmpty()) {
Modified: james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java?view=diff&rev=463966&r1=463965&r2=463966
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java (original)
+++ james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java Sat Oct 14 08:59:42 2006
@@ -50,7 +50,7 @@
private DataSourceSelector datasources = null;
private DataSourceComponent dataSourceComponent = null;
- private String tableName = null;
+ private String tableName = "VirtualUserTable";
private String dataSourceName = null;
/**
@@ -80,7 +80,13 @@
* @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
*/
public void configure(Configuration arg0) throws ConfigurationException {
- String destination = arg0.getAttribute("destinationURL");
+ Configuration config = arg0.getChild("repositoryPath");
+
+ if (config == null) {
+ throw new ConfigurationException("RepositoryPath must configured");
+ }
+
+ String destination = config.getValue();
// normalize the destination, to simplify processing.
if ( ! destination.endsWith("/") ) {
destination += "/";
@@ -103,7 +109,7 @@
StringBuffer exceptionBuffer =
new StringBuffer(256)
.append("Malformed destinationURL - Must be of the format '")
- .append("db://<data-source>[/<table>[/<repositoryName>]]'. Was passed ")
+ .append("db://<data-source>'. Was passed ")
.append(arg0.getAttribute("destinationURL"));
throw new ConfigurationException(exceptionBuffer.toString());
}
Added: james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.xinfo
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.xinfo?view=auto&rev=463966
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.xinfo (added)
+++ james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.xinfo Sat Oct 14 08:59:42 2006
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+
+<blockinfo>
+
+ <!-- section to describe block -->
+ <block>
+ <version>1.0</version>
+ </block>
+
+ <services>
+ <service name="org.apache.james.services.VirtualUserTableManagement" version="1.0" />
+ <service name="org.apache.james.services.VirtualUserTable" version="1.0" />
+ </services>
+
+ <!-- interfaces that may be exported to manange this block -->
+ <!--
+ <management-access-points>
+ <service name="org.apache.james.management.BayesianAnalyzerManagementMBean"/>
+ </management-access-points>
+-->
+ <dependencies>
+ <dependency>
+ <service name="org.apache.avalon.cornerstone.services.datasources.DataSourceSelector" version="1.0"/>
+ </dependency>
+ <dependency>
+ <service name="org.apache.james.services.FileSystem" version="1.0"/>
+ </dependency>
+ </dependencies>
+</blockinfo>
Added: james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.xinfo
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.xinfo?view=auto&rev=463966
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.xinfo (added)
+++ james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.xinfo Sat Oct 14 08:59:42 2006
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+
+<blockinfo>
+
+ <!-- section to describe block -->
+ <block>
+ <version>1.0</version>
+ </block>
+
+ <services>
+ <service name="org.apache.james.services.VirtualUserTableManagment" version="1.0" />
+ <service name="org.apache.james.services.VirtualUserTable" version="1.0" />
+ </services>
+
+ <!-- interfaces that may be exported to manange this block -->
+ <!--
+ <management-access-points>
+ <service name="org.apache.james.management.BayesianAnalyzerManagementMBean"/>
+ </management-access-points>
+-->
+</blockinfo>
Modified: james/server/trunk/src/test/org/apache/james/smtpserver/ValidRcptHandlerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/smtpserver/ValidRcptHandlerTest.java?view=diff&rev=463966&r1=463965&r2=463966
==============================================================================
--- james/server/trunk/src/test/org/apache/james/smtpserver/ValidRcptHandlerTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/smtpserver/ValidRcptHandlerTest.java Sat Oct 14 08:59:42 2006
@@ -22,18 +22,20 @@
package org.apache.james.smtpserver;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
-import javax.mail.internet.ParseException;
-
import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.james.services.MailServer;
import org.apache.james.services.UsersRepository;
-import org.apache.james.smtpserver.core.filter.fastfail.AbstractVirtualUserTableHandler;
+import org.apache.james.services.VirtualUserTable;
import org.apache.james.smtpserver.core.filter.fastfail.ValidRcptHandler;
import org.apache.james.test.mock.avalon.MockLogger;
+import org.apache.james.test.mock.avalon.MockServiceManager;
import org.apache.james.userrepository.MockUsersRepository;
+import org.apache.james.vut.ErrorMappingException;
import org.apache.mailet.MailAddress;
import org.apache.oro.text.regex.MalformedPatternException;
@@ -43,7 +45,10 @@
private final static String VALID_USER = "postmaster";
private final static String INVALID_USER = "invalid";
+ private final static String USER1 = "user1";
+ private final static String USER2 = "user2";
private String response = null;
+ private MockServiceManager serviceMan;
public void setUp() {
response = null;
@@ -92,6 +97,28 @@
return session;
}
+ private MockServiceManager setUpServiceManager() throws Exception {
+ serviceMan = new MockServiceManager();
+ serviceMan.put(VirtualUserTable.ROLE, setUpVirtualUserTable());
+ return serviceMan;
+ }
+
+ private VirtualUserTable setUpVirtualUserTable() {
+ VirtualUserTable table = new VirtualUserTable() {
+
+ public Collection getMappings(String user, String domain) throws ErrorMappingException {
+ Collection mappings = new ArrayList();
+ if (user.equals(USER1)) {
+ mappings.add("address@localhost");
+ } else if (user.equals(USER2)) {
+ throw new ErrorMappingException("BOUNCE!");
+ }
+ return mappings;
+ }
+ };
+ return table;
+ }
+
private SMTPHandlerConfigurationData setupMockedSMTPConfiguration() {
SMTPHandlerConfigurationData conf = new SMTPHandlerConfigurationData() {
UsersRepository user = new MockUsersRepository();
@@ -150,8 +177,9 @@
return conf;
}
- public void testRejectInvalidUser() throws ParseException {
+ public void testRejectInvalidUser() throws Exception {
ValidRcptHandler handler = new ValidRcptHandler();
+ ContainerUtil.service(handler, setUpServiceManager());
SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),new MailAddress(INVALID_USER + "@localhost"),false,false,null);
ContainerUtil.enableLogging(handler,new MockLogger());
@@ -161,8 +189,9 @@
assertNotNull("Rejected",response);
}
- public void testNotRejectInvalidUserAuth() throws ParseException {
+ public void testNotRejectInvalidUserAuth() throws Exception {
ValidRcptHandler handler = new ValidRcptHandler();
+ ContainerUtil.service(handler, setUpServiceManager());
SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),new MailAddress(INVALID_USER + "@localhost"),false,true,"authedUser");
ContainerUtil.enableLogging(handler,new MockLogger());
@@ -172,8 +201,9 @@
assertNull("Not rejected",response);
}
- public void testNotRejectInvalidUserRelay() throws ParseException {
+ public void testNotRejectInvalidUserRelay() throws Exception {
ValidRcptHandler handler = new ValidRcptHandler();
+ ContainerUtil.service(handler, setUpServiceManager());
SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),new MailAddress(INVALID_USER + "@localhost"),true,false,null);
ContainerUtil.enableLogging(handler,new MockLogger());
@@ -183,8 +213,9 @@
assertNull("Not rejected",response);
}
- public void testNotRejectValidUser() throws ParseException {
+ public void testNotRejectValidUser() throws Exception {
ValidRcptHandler handler = new ValidRcptHandler();
+ ContainerUtil.service(handler, setUpServiceManager());
SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),new MailAddress(VALID_USER + "@localhost"),false,false,null);
ContainerUtil.enableLogging(handler,new MockLogger());
@@ -194,9 +225,10 @@
assertNull("Not rejected",response);
}
- public void testNotRejectValidUserRecipient() throws ParseException {
+ public void testNotRejectValidUserRecipient() throws Exception {
String recipient = "recip@domain";
ValidRcptHandler handler = new ValidRcptHandler();
+ ContainerUtil.service(handler, setUpServiceManager());
SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),new MailAddress(recipient),false,false,null);
ContainerUtil.enableLogging(handler,new MockLogger());
@@ -208,11 +240,12 @@
assertNull("Not rejected",response);
}
- public void testNotRejectValidUserDomain() throws ParseException {
+ public void testNotRejectValidUserDomain() throws Exception {
String domain = "domain";
String recipient = "recip@" + domain;
ValidRcptHandler handler = new ValidRcptHandler();
+ ContainerUtil.service(handler, setUpServiceManager());
SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),new MailAddress(recipient),false,false,null);
ContainerUtil.enableLogging(handler,new MockLogger());
@@ -224,11 +257,12 @@
assertNull("Not rejected",response);
}
- public void testNotRejectValidUserRegex() throws ParseException, MalformedPatternException {
+ public void testNotRejectValidUserRegex() throws Exception {
String domain = "domain";
String recipient = "recip@" + domain;
ValidRcptHandler handler = new ValidRcptHandler();
+ ContainerUtil.service(handler, setUpServiceManager());
SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),new MailAddress(recipient),false,false,null);
ContainerUtil.enableLogging(handler,new MockLogger());
@@ -240,9 +274,10 @@
assertNull("Not rejected",response);
}
- public void testInvalidRegex() throws ParseException{
+ public void testInvalidRegex() throws Exception{
boolean exception = false;
ValidRcptHandler handler = new ValidRcptHandler();
+ ContainerUtil.service(handler, setUpServiceManager());
ContainerUtil.enableLogging(handler,new MockLogger());
try {
@@ -254,18 +289,28 @@
assertTrue("Invalid Config",exception);
}
- public void testNotRejectValidUserState() throws ParseException {
- String domain = "domain";
- String recipient = "recip@" + domain;
+ public void testHasAddressMapping() throws Exception {
+ SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),new MailAddress(USER1 + "@localhost"),false,false,null);
+
ValidRcptHandler handler = new ValidRcptHandler();
- SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),new MailAddress(recipient),false,false,null);
+ ContainerUtil.service(handler, setUpServiceManager());
ContainerUtil.enableLogging(handler,new MockLogger());
-
- session.getState().put(AbstractVirtualUserTableHandler.VALID_USER, recipient);
handler.onCommand(session);
- assertFalse("Not rejected",session.getStopHandlerProcessing());
- assertNull("Not rejected",response);
+ assertNull("No reject",response);
+ assertFalse("Not stop processing",session.getStopHandlerProcessing());
}
+ public void testHasErrorMapping() throws Exception {
+ SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),new MailAddress(USER2 + "@localhost"),false,false,null);
+
+ ValidRcptHandler handler = new ValidRcptHandler();
+ ContainerUtil.service(handler, setUpServiceManager());
+ ContainerUtil.enableLogging(handler,new MockLogger());
+ handler.onCommand(session);
+
+ assertNull("Valid Error mapping",session.getState().get("VALID_USER"));
+ assertNotNull("Error mapping",response);
+ assertTrue("Stop processing",session.getStopHandlerProcessing());
+ }
}
Modified: james/server/trunk/src/test/org/apache/james/vut/JDBCVirtualUserTableTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/vut/JDBCVirtualUserTableTest.java?view=diff&rev=463966&r1=463965&r2=463966
==============================================================================
--- james/server/trunk/src/test/org/apache/james/vut/JDBCVirtualUserTableTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/vut/JDBCVirtualUserTableTest.java Sat Oct 14 08:59:42 2006
@@ -26,7 +26,7 @@
mr.enableLogging(new MockLogger());
DefaultConfiguration defaultConfiguration = new DefaultConfiguration("ReposConf");
- defaultConfiguration.setAttribute("destinationURL","db://maildb/virtualusertable");
+ defaultConfiguration.setAttribute("repositoryPath","db://maildb");
defaultConfiguration.addChild(new AttrValConfiguration("sqlFile","file://conf/sqlResources.xml"));
mr.service(serviceManager);
mr.configure(defaultConfiguration);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org