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 2010/01/27 17:46:00 UTC
svn commit: r903727 - in /james/server/trunk:
avalon-user-function/src/main/java/org/apache/james/core/
smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/
smtpserver-function/src/test/java/org/apache/james/smtpserver/
Author: norman
Date: Wed Jan 27 16:46:00 2010
New Revision: 903727
URL: http://svn.apache.org/viewvc?rev=903727&view=rev
Log:
Export DefaultVirtualUserTable through VirtualUserTableStore API + refactor ValidRcptHandler to only check in UsersRepository + VirtualUserTable for users (JAMES-919)
Modified:
james/server/trunk/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/ValidRcptHandler.java
james/server/trunk/smtpserver-function/src/test/java/org/apache/james/smtpserver/ValidRcptHandlerTest.java
Modified: james/server/trunk/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java?rev=903727&r1=903726&r2=903727&view=diff
==============================================================================
--- james/server/trunk/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java (original)
+++ james/server/trunk/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java Wed Jan 27 16:46:00 2010
@@ -36,6 +36,9 @@
implements VirtualUserTableStore {
+ private String defaultName;
+
+
/**
* Get the repository, if any, whose name corresponds to
* the argument parameter
@@ -45,6 +48,9 @@
* @return the VirtualUserTable corresponding to the name parameter
*/
public VirtualUserTable getTable(String name) {
+ if (name == null || name.trim().equals("")) {
+ name = defaultName;
+ }
VirtualUserTable response = getObject(name);
if ((response == null) && (getLogger().isWarnEnabled())) {
getLogger().warn("No virtualUserTable called: " + name);
@@ -53,6 +59,15 @@
}
/**
+ * Set the default VirtualUserTable which will get returned when no name is given or the name is empty
+ *
+ * @param defaultName
+ */
+ public void setDefaultTable(String defaultName) {
+ this.defaultName = defaultName;
+ }
+
+ /**
* @see org.apache.james.core.AbstractAvalonStore#getStoreName()
*/
public String getStoreName() {
Modified: james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/ValidRcptHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/ValidRcptHandler.java?rev=903727&r1=903726&r2=903727&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/ValidRcptHandler.java (original)
+++ james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/ValidRcptHandler.java Wed Jan 27 16:46:00 2010
@@ -19,9 +19,7 @@
package org.apache.james.smtpserver.integration;
-import java.util.ArrayList;
import java.util.Collection;
-import java.util.Iterator;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
@@ -33,13 +31,10 @@
import org.apache.james.api.vut.VirtualUserTable;
import org.apache.james.api.vut.VirtualUserTableStore;
import org.apache.james.lifecycle.Configurable;
+import org.apache.james.services.MailServer;
import org.apache.james.smtpserver.protocol.SMTPSession;
import org.apache.james.smtpserver.protocol.core.fastfail.AbstractValidRcptHandler;
import org.apache.mailet.MailAddress;
-import org.apache.oro.text.regex.MalformedPatternException;
-import org.apache.oro.text.regex.Pattern;
-import org.apache.oro.text.regex.Perl5Compiler;
-import org.apache.oro.text.regex.Perl5Matcher;
/**
* Handler which reject invalid recipients
@@ -50,14 +45,13 @@
private UsersRepository users;
private VirtualUserTableStore tableStore;
-
- private Collection<String> recipients = new ArrayList<String>();
- private Collection<String> domains = new ArrayList<String>();
- private Collection<Pattern> regex = new ArrayList<Pattern>();
- private boolean vut = true;
private VirtualUserTable table;
private String tableName = null;
+ private boolean vut = true;
+
+ private MailServer mailServer;
+
/**
* Gets the users repository.
*
@@ -98,6 +92,11 @@
this.tableStore = tableStore;
}
+ @Resource(name = "mailServer")
+ public void setMailServer(MailServer mailServer) {
+ this.mailServer = mailServer;
+ }
+
@PostConstruct
public void init() throws Exception{
loadTable();
@@ -106,70 +105,14 @@
/**
* @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.Configuration)
*/
- @SuppressWarnings("unchecked")
public void configure(HierarchicalConfiguration config) throws ConfigurationException {
- setValidRecipients(config.getList("validRecipients"));
- setValidDomains(config.getList("validDomains"));
- try {
- setValidRegex(config.getList("validRegexPattern"));
- } catch (MalformedPatternException mpe) {
- throw new ConfigurationException("Malformed pattern: ", mpe);
- }
setVirtualUserTableSupport(config.getBoolean("enableVirtualUserTable",
true));
setTableName(config.getString("table", null));
}
- /**
- * Set the valid recipients.
- *
- * @param recip
- * The valid recipients. Commaseperated list
- */
- public void setValidRecipients(Collection<String> recips) {
- Iterator<String> recipsIt = recips.iterator();
- while (recipsIt.hasNext()) {
- String recipient = recipsIt.next();
- recipients.add(recipient);
- }
- }
-
- /**
- * Set the domains for which every rcpt will be accepted.
- *
- * @param dom
- * The valid domains. Comma seperated list
- */
- public void setValidDomains(Collection<String> doms) {
- Iterator<String> domsIt = doms.iterator();
-
- while (domsIt.hasNext()) {
- String domain = domsIt.next().toLowerCase();
- domains.add(domain);
- }
- }
-
- /**
- *
- * @param reg
- * @throws MalformedPatternException
- */
- public void setValidRegex(Collection<String> regs)
- throws MalformedPatternException {
- Perl5Compiler compiler = new Perl5Compiler();
-
- Iterator<String> regsIt = regs.iterator();
- while (regsIt.hasNext()) {
- String patternString = regsIt.next();
- Pattern pattern = compiler.compile(patternString,
- Perl5Compiler.READ_ONLY_MASK);
- regex.add(pattern);
-
- }
- }
-
public void setVirtualUserTableSupport(boolean vut) {
- this.vut = vut;
+ this.vut = vut;
}
public void setTableName(String tableName) {
@@ -177,15 +120,7 @@
}
private void loadTable() throws Exception {
- if (this.tableName == null || this.tableName.equals("")) {
- this.tableName = VirtualUserTableStore.DEFAULT_TABLE;
- }
- if (tableStore != null) {
- table = tableStore.getTable(this.tableName);
- }
- if (table == null) {
- throw new Exception("Unable to find VirtualUserTable with name " + tableName);
- }
+ table = tableStore.getTable(this.tableName);
}
@@ -193,9 +128,11 @@
protected boolean isValidRecipient(SMTPSession session,
MailAddress recipient) {
- if (users.contains(recipient.getLocalPart()) == true
- || recipients.contains(recipient.toString().toLowerCase())
- || domains.contains(recipient.getDomain().toLowerCase())) {
+ if (mailServer.isLocalServer(recipient.getDomain()) == false) {
+ return false;
+ }
+
+ if (users.contains(recipient.getLocalPart()) == true) {
return true;
} else {
if (vut == true) {
@@ -211,17 +148,6 @@
}
}
- if (!regex.isEmpty()) {
- Iterator<Pattern> reg = regex.iterator();
- Perl5Matcher matcher = new Perl5Matcher();
-
- while (reg.hasNext()) {
- if (matcher.matches(recipient.toString(), reg.next())) {
- // regex match
- return true;
- }
- }
- }
return false;
}
}
Modified: james/server/trunk/smtpserver-function/src/test/java/org/apache/james/smtpserver/ValidRcptHandlerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/test/java/org/apache/james/smtpserver/ValidRcptHandlerTest.java?rev=903727&r1=903726&r2=903727&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/test/java/org/apache/james/smtpserver/ValidRcptHandlerTest.java (original)
+++ james/server/trunk/smtpserver-function/src/test/java/org/apache/james/smtpserver/ValidRcptHandlerTest.java Wed Jan 27 16:46:00 2010
@@ -22,17 +22,23 @@
package org.apache.james.smtpserver;
+import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
import junit.framework.TestCase;
import org.apache.james.api.user.UsersRepository;
import org.apache.james.api.vut.ErrorMappingException;
import org.apache.james.api.vut.VirtualUserTable;
import org.apache.james.api.vut.VirtualUserTableStore;
+import org.apache.james.services.MailRepository;
+import org.apache.james.services.MailServer;
import org.apache.james.smtpserver.integration.ValidRcptHandler;
import org.apache.james.smtpserver.protocol.BaseFakeSMTPSession;
import org.apache.james.smtpserver.protocol.SMTPConfiguration;
@@ -40,11 +46,12 @@
import org.apache.james.smtpserver.protocol.hook.HookReturnCode;
import org.apache.james.test.mock.james.MockVirtualUserTableStore;
import org.apache.james.userrepository.MockUsersRepository;
+import org.apache.mailet.Mail;
import org.apache.mailet.MailAddress;
-import org.apache.oro.text.regex.MalformedPatternException;
public class ValidRcptHandlerTest extends TestCase {
+ private final static String VALID_DOMAIN = "localhost";
private final static String VALID_USER = "postmaster";
private final static String INVALID_USER = "invalid";
private final static String USER1 = "user1";
@@ -60,6 +67,63 @@
handler = new ValidRcptHandler();
handler.setUsers(users);
handler.setTableStore(setUpVirtualUserTableStore());
+ handler.setMailServer(new MailServer() {
+
+ public boolean addUser(String userName, String password) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public String getDefaultDomain() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String getHelloName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String getId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public MailRepository getUserInbox(String userName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public boolean isLocalServer(String serverName) {
+ return serverName.equals(VALID_DOMAIN);
+ }
+
+ public void sendMail(MailAddress sender, Collection<MailAddress> recipients, MimeMessage msg) throws MessagingException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void sendMail(MailAddress sender, Collection<MailAddress> recipients, InputStream msg) throws MessagingException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void sendMail(Mail mail) throws MessagingException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void sendMail(MimeMessage message) throws MessagingException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public boolean supportVirtualHosting() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ });
handler.init();
}
@@ -92,8 +156,14 @@
return mappings;
}
};
- final MockVirtualUserTableStore store = new MockVirtualUserTableStore();
- store.tableStore.put(VirtualUserTableStore.DEFAULT_TABLE, table);
+ final MockVirtualUserTableStore store = new MockVirtualUserTableStore() {
+
+ @Override
+ public VirtualUserTable getTable(String name) {
+ return table;
+ }
+
+ };
return store;
}
@@ -168,65 +238,7 @@
assertEquals("Not rejected",rCode,HookReturnCode.DECLINED);
}
-
- public void testNotRejectValidUserRecipient() throws Exception {
- String recipient = "recip@domain";
- ArrayList<String> list = new ArrayList<String>();
- list.add(recipient);
- MailAddress mailAddress = new MailAddress(recipient);
- SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),mailAddress,false);
-
- handler.setValidRecipients(list);
-
- int rCode = handler.doRcpt(session, null, mailAddress).getResult();
-
- assertEquals("Not rejected",rCode,HookReturnCode.DECLINED);
- }
-
- public void testNotRejectValidUserDomain() throws Exception {
- String domain = "domain";
- String recipient = "recip@" + domain;
- ArrayList<String> list = new ArrayList<String>();
- list.add(domain);
- MailAddress mailAddress = new MailAddress(recipient);
- SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),mailAddress,false);
-
- handler.setValidDomains(list);
-
- int rCode = handler.doRcpt(session, null, mailAddress).getResult();
-
- assertEquals("Not rejected",rCode,HookReturnCode.DECLINED);
- }
-
- public void testNotRejectValidUserRegex() throws Exception {
- String domain = "domain";
- String recipient = "recip@" + domain;
- ArrayList<String> list = new ArrayList<String>();
- list.add("reci.*");
- MailAddress mailAddress = new MailAddress(recipient);
- SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),mailAddress,false);
-
- handler.setValidRegex(list);
-
- int rCode = handler.doRcpt(session, null, mailAddress).getResult();
-
- assertEquals("Not rejected",rCode,HookReturnCode.DECLINED);
- }
-
- public void testInvalidRegex() throws Exception{
- boolean exception = false;
-
- ArrayList<String> list = new ArrayList<String>();
- list.add("(.*");
- try {
- handler.setValidRegex(list);
- } catch (MalformedPatternException e) {
- exception = true;
- }
-
- assertTrue("Invalid Config",exception);
- }
-
+
public void testHasAddressMapping() throws Exception {
MailAddress mailAddress = new MailAddress(USER1 + "@localhost");
SMTPSession session = setupMockedSMTPSession(setupMockedSMTPConfiguration(),mailAddress,false);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org