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("[EMAIL PROTECTED]");
+ } 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 = "[EMAIL PROTECTED]";
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]