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 ro...@apache.org on 2016/11/23 13:50:25 UTC

[22/46] james-project git commit: JAMES-1854 VirtualHosting should be managed by UsersRepository

JAMES-1854 VirtualHosting should be managed by UsersRepository


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b4a31c76
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b4a31c76
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b4a31c76

Branch: refs/heads/master
Commit: b4a31c76418d05559112a3ba523432de15aac698
Parents: f719e2f
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Nov 10 08:33:43 2016 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Nov 18 18:46:46 2016 +0700

----------------------------------------------------------------------
 .../apache/james/user/api/UsersRepository.java  | 10 +++++++++
 .../user/ldap/ReadOnlyUsersLDAPRepository.java  |  6 +++++
 .../james/user/lib/AbstractUsersRepository.java | 10 +++++++++
 .../user/lib/AbstractUsersRepositoryTest.java   | 23 ++++++++++++++++++++
 .../impl/JamesMailetContext.java                |  7 +-----
 .../james/transport/mailets/ToSenderFolder.java | 20 ++++++++---------
 .../mailets/delivery/MailboxAppender.java       | 13 ++++++-----
 .../mailets/delivery/SimpleMailStorer.java      |  6 +----
 .../jsieve/delivery/SieveMailStorer.java        | 11 +++++-----
 .../mailets/jsieve/delivery/SievePoster.java    |  6 ++---
 .../matchers/AbstractStorageQuota.java          |  7 +-----
 .../mailets/delivery/LocalDeliveryTest.java     |  7 +++++-
 .../mailets/delivery/SieveIntegrationTest.java  |  3 +++
 .../mailets/delivery/SimpleMailStorerTest.java  | 11 ++++------
 .../mailets/delivery/ToRecipientFolderTest.java |  4 ++++
 .../james/fetchmail/MessageProcessor.java       | 16 +++++---------
 16 files changed, 98 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java b/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
index b8da1eb..666fdd7 100644
--- a/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
+++ b/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
@@ -22,6 +22,7 @@ package org.apache.james.user.api;
 import java.util.Iterator;
 
 import org.apache.james.user.api.model.User;
+import org.apache.mailet.MailAddress;
 
 /**
  * Interface for a repository of users. A repository represents a logical
@@ -127,4 +128,13 @@ public interface UsersRepository {
      */
     boolean supportVirtualHosting() throws UsersRepositoryException;
 
+    /**
+     * Returns username to be used for a given MailAddress
+     *
+     * @param mailAddress
+     * @return Username used by James for this mailAddress
+     * @throws UsersRepositoryException
+     */
+    String getUser(MailAddress mailAddress) throws UsersRepositoryException;
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
index b7aca3c..056aa8b 100644
--- a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
+++ b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
@@ -51,6 +51,7 @@ import org.apache.james.user.ldap.api.LdapConstants;
 import org.apache.james.util.retry.DoublingRetrySchedule;
 import org.apache.james.util.retry.api.RetrySchedule;
 import org.apache.james.util.retry.naming.ldap.RetryingLdapContext;
+import org.apache.mailet.MailAddress;
 import org.slf4j.Logger;
 
 /**
@@ -761,4 +762,9 @@ public class ReadOnlyUsersLDAPRepository implements UsersRepository, Configurabl
         return false;
     }
 
+
+    @Override
+    public String getUser(MailAddress mailAddress) throws UsersRepositoryException {
+        return mailAddress.getLocalPart();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
index 3f57dba..87a4373 100644
--- a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
+++ b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
@@ -30,6 +30,7 @@ import org.apache.james.lifecycle.api.LogEnabled;
 import org.apache.james.user.api.AlreadyExistInUsersRepositoryException;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.mailet.MailAddress;
 import org.slf4j.Logger;
 
 public abstract class AbstractUsersRepository implements UsersRepository, LogEnabled, Configurable {
@@ -132,4 +133,13 @@ public abstract class AbstractUsersRepository implements UsersRepository, LogEna
      *           If an error occurred
      */
     protected abstract void doAddUser(String username, String password) throws UsersRepositoryException;
+
+    @Override
+    public String getUser(MailAddress mailAddress) throws UsersRepositoryException {
+        if (supportVirtualHosting()) {
+            return mailAddress.print();
+        } else {
+            return mailAddress.getLocalPart();
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java b/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
index 830aa4e..0a4e28b 100644
--- a/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
+++ b/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
@@ -23,12 +23,16 @@ import static org.assertj.core.api.Assertions.assertThat;
 import java.util.ArrayList;
 import java.util.Iterator;
 
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.domainlist.api.mock.SimpleDomainList;
 import org.apache.james.lifecycle.api.LifecycleUtil;
 import org.apache.james.user.api.AlreadyExistInUsersRepositoryException;
+import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.user.api.model.User;
+import org.apache.mailet.MailAddress;
 import org.junit.After;
+import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -299,6 +303,25 @@ public abstract class AbstractUsersRepositoryTest {
         usersRepository.updateUser(user);
     }
 
+    @Test
+    public void virtualHostedUsersRepositoryShouldUseFullMailAddressAsUsername() throws Exception {
+        usersRepository.setEnableVirtualHosting(true);
+
+        // Some implementations do not support changing virtual hosting value
+        Assume.assumeTrue(usersRepository.supportVirtualHosting());
+
+        assertThat(usersRepository.getUser(new MailAddress("local@domain"))).isEqualTo("local@domain");
+    }
+
+    @Test
+    public void nonVirtualHostedUsersRepositoryShouldUseLocalPartAsUsername() throws Exception {
+        usersRepository.setEnableVirtualHosting(false);
+
+        // Some implementations do not support changing virtual hosting value
+        Assume.assumeFalse(usersRepository.supportVirtualHosting());
+
+        assertThat(usersRepository.getUser(new MailAddress("local@domain"))).isEqualTo("local");
+    }
 
     protected void disposeUsersRepository() throws UsersRepositoryException {
         LifecycleUtil.dispose(this.usersRepository);

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
index 26f7d9f..983317a 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
@@ -258,16 +258,11 @@ public class JamesMailetContext implements MailetContext, LogEnabled, Configurab
     @Override
     public boolean isLocalEmail(MailAddress mailAddress) {
         if (mailAddress != null) {
-            String userName = mailAddress.toString().toLowerCase();
             if (!isLocalServer(mailAddress.getDomain().toLowerCase())) {
                 return false;
             }
             try {
-                if (!localusers.supportVirtualHosting()) {
-                    userName = mailAddress.getLocalPart().toLowerCase();
-                }
-                return localusers.contains(userName);
-
+                return localusers.contains(localusers.getUser(mailAddress));
             } catch (UsersRepositoryException e) {
                 log("Unable to access UsersRepository", e);
             }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java
index 222c9cf..ccaa94c 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java
@@ -84,17 +84,7 @@ public class ToSenderFolder extends GenericMailet {
     private void doService(Mail mail) throws MessagingException {
 
         final MailAddress sender = mail.getSender();
-        String username;
-        try {
-            if (usersRepository.supportVirtualHosting()) {
-                username = sender.toString();
-            }
-            else {
-                username = sender.getLocalPart();
-            }
-        } catch (UsersRepositoryException e) {
-            throw new MessagingException(e.getMessage());
-        }
+        String username = retrieveUser(sender);
 
         final MailboxSession session;
         try {
@@ -140,6 +130,14 @@ public class ToSenderFolder extends GenericMailet {
 
     }
 
+    private String retrieveUser(MailAddress sender) throws MessagingException {
+        try {
+            return usersRepository.getUser(sender);
+        } catch (UsersRepositoryException e) {
+            throw new MessagingException(e.getMessage());
+        }
+    }
+
     /* (non-Javadoc)
      * @see org.apache.mailet.base.GenericMailet#init()
      */

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java
index 9c08f46..4b17263 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java
@@ -79,11 +79,14 @@ public class MailboxAppender {
         } finally {
             session.close();
             try {
-                mailboxManager.logout(session, true);
-            } catch (MailboxException e) {
-                throw new MessagingException("Can logout from mailbox", e);
+                try {
+                    mailboxManager.logout(session, true);
+                } catch (MailboxException e) {
+                    throw new MessagingException("Can logout from mailbox", e);
+                }
+            } finally {
+                mailboxManager.endProcessingRequest(session);
             }
-            mailboxManager.endProcessingRequest(session);
         }
     }
 
@@ -93,7 +96,7 @@ public class MailboxAppender {
         }
         final MessageManager mailbox = mailboxManager.getMailbox(path, session);
         if (mailbox == null) {
-            throw new MessagingException("Mailbox for user " + session.getUser().getUserName() + " was not found on this server.");
+            throw new MessagingException("Mailbox " + path + " for user " + session.getUser().getUserName() + " was not found on this server.");
         }
         mailbox.appendMessage(new MimeMessageInputStream(mail), new Date(), session, IS_RECENT, FLAGS);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java
index bad7aa8..902edfd 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java
@@ -94,11 +94,7 @@ public class SimpleMailStorer implements MailStorer {
 
     private String computeUsername(MailAddress recipient) throws MessagingException {
         try {
-            if (usersRepository.supportVirtualHosting()) {
-                return recipient.toString();
-            } else {
-                return recipient.getLocalPart();
-            }
+            return usersRepository.getUser(recipient);
         } catch (UsersRepositoryException e) {
             log.error("Unable to access UsersRepository", e);
             return recipient.toString();

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java
index 8b28321..1ec3489 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java
@@ -180,20 +180,19 @@ public class SieveMailStorer implements MailStorer {
     }
 
     protected void storeMessageInbox(MailAddress mailAddress, MimeMessage message) throws MessagingException {
-        sievePoster.post("mailbox://" + mailAddress + "/", message);
+        sievePoster.post("mailbox://" + retrieveUserNameUsedForScriptStorage(mailAddress) + "/", message);
     }
 
-    public String retrieveUserNameUsedForScriptStorage(MailAddress m) {
+    public String retrieveUserNameUsedForScriptStorage(MailAddress mailAddress) {
         try {
             if (usersRepos.supportVirtualHosting()) {
-                return m.toString();
+                return mailAddress.print();
             } else {
-                return m.getLocalPart() + "@localhost";
+                return mailAddress.getLocalPart() + "@localhost";
             }
         } catch (UsersRepositoryException e) {
             log.error("Unable to access UsersRepository", e);
-            return m.getLocalPart() + "@localhost";
-
+            return mailAddress.getLocalPart() + "@localhost";
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java
index 3caae1f..7a71930 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java
@@ -26,6 +26,7 @@ import org.apache.james.transport.mailets.delivery.MailboxAppender;
 import org.apache.james.transport.mailets.jsieve.Poster;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.mailet.MailAddress;
 
 public class SievePoster implements Poster {
 
@@ -86,10 +87,7 @@ public class SievePoster implements Poster {
         String user = url.substring(startOfUser, endOfUser).toLowerCase();
         // Check if we should use the full email address as username
         try {
-            if (usersRepos.supportVirtualHosting()) {
-                return user + "@" + host;
-            }
-            return user;
+            return usersRepos.getUser(new MailAddress(user, host));
         } catch (UsersRepositoryException e) {
             throw new MessagingException("Unable to accessUsersRepository", e);
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractStorageQuota.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractStorageQuota.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractStorageQuota.java
index 6ea1350..62ae3ad 100755
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractStorageQuota.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractStorageQuota.java
@@ -112,12 +112,7 @@ abstract public class AbstractStorageQuota extends AbstractQuotaMatcher {
             try {
                 // see if we need use the full email address as username or not.
                 // See JAMES-1197
-                if (localUsers.supportVirtualHosting()) {
-                    username = recipient.toString().toLowerCase(Locale.US);
-                }
-                else {
-                    username = recipient.getLocalPart().toLowerCase(Locale.US);
-                }
+                username = localUsers.getUser(recipient).toLowerCase(Locale.US);
             }
             catch (UsersRepositoryException e) {
                 throw new MessagingException("Unable to access UsersRepository", e);

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
index 89a89a2..cebf75d 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
@@ -72,6 +72,8 @@ import com.google.common.collect.ImmutableList;
 @RunWith(Parameterized.class)
 public class LocalDeliveryTest {
 
+    public static final String RECEIVER_DOMAIN_COM = "receiver@domain.com";
+
     public static class Parameter {
         private final UsersRepository usersRepository;
         private final MailboxManager mailboxManager;
@@ -163,6 +165,7 @@ public class LocalDeliveryTest {
         MessageManager messageManager = mock(MessageManager.class);
 
         when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(true);
+        when(parameter.getUsersRepository().getUser(new MailAddress(username))).thenReturn(username);
         doThrow(new ScriptNotFoundException()).when(parameter.getSieveRepository()).getActive(username);
         when(parameter.getMailboxManager().getMailbox(eq(inbox), any(MailboxSession.class))).thenReturn(messageManager);
         when(parameter.getUser().getUserName()).thenReturn(username);
@@ -183,6 +186,8 @@ public class LocalDeliveryTest {
         MailboxPath inbox = new MailboxPath("#private", username, "INBOX");
         MessageManager messageManager = mock(MessageManager.class);
         when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(false);
+        when(parameter.getUsersRepository().getUser(new MailAddress("receiver@localhost"))).thenReturn(username);
+        when(parameter.getUsersRepository().getUser(new MailAddress(RECEIVER_DOMAIN_COM))).thenReturn(username);
         doThrow(new ScriptNotFoundException()).when(parameter.getSieveRepository()).getActive(username);
         when(parameter.getMailboxManager().getMailbox(eq(inbox), any(MailboxSession.class))).thenReturn(messageManager);
         when(parameter.getUser().getUserName()).thenReturn(username);
@@ -200,7 +205,7 @@ public class LocalDeliveryTest {
         MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
         message.setSubject("Subject");
         message.setSender(new InternetAddress("sender@any.com"));
-        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("receiver@domain.com"));
+        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(RECEIVER_DOMAIN_COM));
         MimeMultipart multipart = new MimeMultipart();
         MimeBodyPart scriptPart = new MimeBodyPart();
         scriptPart.setDataHandler(

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
index 3b88303..3aaaf68 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
@@ -118,6 +118,7 @@ public class SieveIntegrationTest {
     @Test
     public void mailShouldBeWellDeliveredByDefaultToUserWhenVirtualHostingIsTurnedOn() throws Exception {
         when(usersRepository.supportVirtualHosting()).thenReturn(true);
+        when(usersRepository.getUser(new MailAddress(RECEIVER_DOMAIN_COM))).thenReturn(RECEIVER_DOMAIN_COM);
         when(resourceLocator.get(RECEIVER_DOMAIN_COM)).thenThrow(new ScriptNotFoundException());
         final MessageManager messageManager = prepareMessageManagerOn(new MailboxPath("#private", RECEIVER_DOMAIN_COM, "INBOX"));
 
@@ -129,6 +130,7 @@ public class SieveIntegrationTest {
     @Test
     public void mailShouldBeWellDeliveredByDefaultToUserWhenvirtualHostingIsTurnedOff() throws Exception {
         when(usersRepository.supportVirtualHosting()).thenReturn(false);
+        when(usersRepository.getUser(new MailAddress("receiver@localhost"))).thenReturn("receiver");
         when(resourceLocator.get("receiver")).thenThrow(new ScriptNotFoundException());
         final MessageManager messageManager = prepareMessageManagerOn(INBOX);
 
@@ -964,6 +966,7 @@ public class SieveIntegrationTest {
 
     private void prepareTestUsingScriptAndDates(String script, DateTime scriptCreationDate, DateTime scriptExecutionDate) throws Exception {
         when(usersRepository.supportVirtualHosting()).thenReturn(false);
+        when(usersRepository.getUser(new MailAddress("receiver@localhost"))).thenReturn("receiver");
         when(resourceLocator.get("//receiver@localhost/sieve")).thenReturn(new ResourceLocator.UserSieveInformation(scriptCreationDate,
             scriptExecutionDate,
             ClassLoader.getSystemResourceAsStream(script)));

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java
index 1f25190..42e831a 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java
@@ -79,24 +79,22 @@ public class SimpleMailStorerTest {
 
     @Test
     public void storeMailShouldUseFullMailAddressWhenSupportsVirtualHosting() throws Exception {
-        when(usersRepository.supportVirtualHosting()).thenReturn(true);
-
         MailAddress sender = MailAddressFixture.ANY_AT_JAMES;
         MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES;
+        when(usersRepository.getUser(recipient)).thenReturn(recipient.print());
         FakeMail mail = FakeMail.builder()
             .mimeMessage(mimeMessage)
             .build();
         testee.storeMail(sender, recipient, mail);
 
-        verify(mailboxAppender).append(any(MimeMessage.class), eq(recipient.toString()), eq(FOLDER));
+        verify(mailboxAppender).append(any(MimeMessage.class), eq(recipient.print()), eq(FOLDER));
     }
 
     @Test
     public void storeMailShouldUseLocalPartWhenSupportsVirtualHosting() throws Exception {
-        when(usersRepository.supportVirtualHosting()).thenReturn(false);
-
         MailAddress sender = MailAddressFixture.ANY_AT_JAMES;
         MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES;
+        when(usersRepository.getUser(recipient)).thenReturn(recipient.getLocalPart());
         FakeMail mail = FakeMail.builder()
             .mimeMessage(mimeMessage)
             .build();
@@ -107,10 +105,9 @@ public class SimpleMailStorerTest {
 
     @Test
     public void storeMailShouldUseFullMailAddressWhenErrorReadingUsersRepository() throws Exception {
-        when(usersRepository.supportVirtualHosting()).thenThrow(new UsersRepositoryException("Any message"));
-
         MailAddress sender = MailAddressFixture.ANY_AT_JAMES;
         MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES;
+        when(usersRepository.getUser(recipient)).thenThrow(new UsersRepositoryException("Any message"));
         FakeMail mail = FakeMail.builder()
             .mimeMessage(mimeMessage)
             .build();

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
index e2f3d27..7d67292 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
@@ -187,6 +187,7 @@ public class ToRecipientFolderTest {
     @Test
     public void folderParameterShouldIndicateDestinationFolder() throws Exception {
         when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(true);
+        when(parameter.getUsersRepository().getUser(new MailAddress(USER))).thenReturn(USER);
         when(parameter.getMailboxManager().getMailbox(eq(JUNK_VIRTUAL_HOSTING), any(MailboxSession.class))).thenReturn(messageManager);
         when(parameter.getUser().getUserName()).thenReturn(USER);
 
@@ -200,6 +201,7 @@ public class ToRecipientFolderTest {
     @Test
     public void folderParameterShouldBeInboxByDefault() throws Exception {
         when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(true);
+        when(parameter.getUsersRepository().getUser(new MailAddress(USER))).thenReturn(USER);
         when(parameter.getMailboxManager().getMailbox(eq(INBOX), any(MailboxSession.class))).thenReturn(messageManager);
         when(parameter.getUser().getUserName()).thenReturn(USER);
 
@@ -212,6 +214,8 @@ public class ToRecipientFolderTest {
     @Test
     public void folderParameterShouldWorkWhenVirtualHostingIsTurnedOff() throws Exception {
         when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(false);
+        when(parameter.getUsersRepository().getUser(new MailAddress(USER_LOCAL_PART + "@localhost"))).thenReturn(USER_LOCAL_PART);
+        when(parameter.getUsersRepository().getUser(new MailAddress(USER))).thenReturn(USER_LOCAL_PART);
         when(parameter.getMailboxManager().getMailbox(eq(JUNK), any(MailboxSession.class))).thenReturn(messageManager);
         when(parameter.getUser().getUserName()).thenReturn(USER_LOCAL_PART);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java
----------------------------------------------------------------------
diff --git a/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java b/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java
index 2d2134d..c272284 100644
--- a/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java
+++ b/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java
@@ -832,17 +832,11 @@ public class MessageProcessor extends ProcessorAbstract {
      * @throws UsersRepositoryException
      */
     protected boolean isLocalRecipient(MailAddress recipient) throws UsersRepositoryException {
-        if (isLocalServer(recipient)) {
-            // check if we use virtualhosting or not and use the right part of
-            // the recipient in respect of this
-            // See JAMES-1135
-            if (getConfiguration().getLocalUsers().supportVirtualHosting()) {
-                return getLocalUsers().contains(recipient.toString());
-            } else {
-                return getLocalUsers().contains(recipient.getLocalPart());
-            }
-        }
-        return false;
+        // check if we use virtualhosting or not and use the right part of
+        // the recipient in respect of this
+        // See JAMES-1135
+        return isLocalServer(recipient)
+            && getLocalUsers().contains(getLocalUsers().getUser(recipient));
     }
 
     /**


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org