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 ma...@apache.org on 2018/04/05 13:37:35 UTC

[1/2] james-project git commit: JAMES-1854 Conversion User -> MailAddress

Repository: james-project
Updated Branches:
  refs/heads/master 5fbaeba92 -> 9866ac382


JAMES-1854 Conversion User -> MailAddress

This allows containing virtual hosting definition in the UsersRepository
by allowing calling an helper method.


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

Branch: refs/heads/master
Commit: 9866ac382bd67b6cfd8efbc8e605ffdafdbddeb7
Parents: 34b2f98
Author: benwa <bt...@linagora.com>
Authored: Tue Apr 3 09:41:01 2018 +0700
Committer: Matthieu Baechler <ma...@apache.org>
Committed: Thu Apr 5 15:32:08 2018 +0200

----------------------------------------------------------------------
 .../apache/james/user/api/UsersRepository.java  |  7 +++++
 .../data/data-ldap-integration-testing/pom.xml  |  5 +++
 .../ldap/ReadOnlyUsersLDAPRepositoryTest.java   | 15 +++++----
 server/data/data-ldap/pom.xml                   |  5 +++
 .../user/ldap/ReadOnlyUsersLDAPRepository.java  | 25 ++++++++++++---
 .../ldap/ReadOnlyUsersLDAPRepositoryTest.java   | 17 ++++++++---
 .../james/user/lib/AbstractUsersRepository.java | 12 ++++++++
 .../domainlist/api/mock/SimpleDomainList.java   |  4 +--
 .../user/lib/AbstractUsersRepositoryTest.java   | 32 ++++++++++++++++++--
 9 files changed, 102 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/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 db8cc3a..cfc9c8f 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
@@ -136,6 +136,13 @@ public interface UsersRepository {
      * @throws UsersRepositoryException
      */
     String getUser(MailAddress mailAddress) throws UsersRepositoryException;
+
+    /**
+     * Returns one of the possible mail addresses to be used to send a mail to that user
+     *
+     * This makes sense as it handles virtual-hosting logic.
+     */
+    MailAddress getMailAddressFor(org.apache.james.core.User user) throws UsersRepositoryException;
     
     /**
      * Return true if the user is an admin for this repository

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-ldap-integration-testing/pom.xml
----------------------------------------------------------------------
diff --git a/server/data/data-ldap-integration-testing/pom.xml b/server/data/data-ldap-integration-testing/pom.xml
index e99bd77..9e037ba 100644
--- a/server/data/data-ldap-integration-testing/pom.xml
+++ b/server/data/data-ldap-integration-testing/pom.xml
@@ -70,6 +70,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java b/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
index bd8ed52..e78f976 100644
--- a/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
+++ b/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
@@ -19,11 +19,12 @@
 package org.apache.james.user.ldap;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
 
-import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.configuration.plist.PropertyListConfiguration;
 import org.apache.james.core.MailAddress;
+import org.apache.james.domainlist.api.DomainList;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -43,10 +44,12 @@ public class ReadOnlyUsersLDAPRepositoryTest {
 
     private LdapGenericContainer ldapContainer;
     private ReadOnlyUsersLDAPRepository ldapRepository;
+    private DomainList domainList;
 
     @Before
-    public void setup() throws Exception {
+    public void setup() {
         startLdapContainer();
+        domainList = mock(DomainList.class);
     }
 
     private void startLdapContainer() {
@@ -57,13 +60,13 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         ldapContainer.start();
     }
 
-    private void startUsersRepository(HierarchicalConfiguration ldapRepositoryConfiguration) throws ConfigurationException, Exception {
-        ldapRepository = new ReadOnlyUsersLDAPRepository();
+    private void startUsersRepository(HierarchicalConfiguration ldapRepositoryConfiguration) throws Exception {
+        ldapRepository = new ReadOnlyUsersLDAPRepository(domainList);
         ldapRepository.configure(ldapRepositoryConfiguration);
         ldapRepository.init();
     }
 
-    private HierarchicalConfiguration ldapRepositoryConfiguration() throws ConfigurationException {
+    private HierarchicalConfiguration ldapRepositoryConfiguration() {
         PropertyListConfiguration configuration = new PropertyListConfiguration();
         configuration.addProperty("[@ldapHost]", ldapContainer.getLdapHost());
         configuration.addProperty("[@principal]", "cn=admin\\,dc=james\\,dc=org");
@@ -78,7 +81,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         return configuration;
     }
 
-    private HierarchicalConfiguration ldapRepositoryConfigurationWithVirtualHosting() throws ConfigurationException {
+    private HierarchicalConfiguration ldapRepositoryConfigurationWithVirtualHosting() {
         PropertyListConfiguration configuration = new PropertyListConfiguration();
         configuration.addProperty("[@ldapHost]", ldapContainer.getLdapHost());
         configuration.addProperty("[@principal]", "cn=admin\\,dc=james\\,dc=org");

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-ldap/pom.xml
----------------------------------------------------------------------
diff --git a/server/data/data-ldap/pom.xml b/server/data/data-ldap/pom.xml
index cc3c26c..9f39be1 100644
--- a/server/data/data-ldap/pom.xml
+++ b/server/data/data-ldap/pom.xml
@@ -71,6 +71,11 @@
             <artifactId>assertj-core</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/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 c7e2764..3007d85 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
@@ -30,6 +30,7 @@ import java.util.Properties;
 import java.util.Set;
 
 import javax.annotation.PostConstruct;
+import javax.inject.Inject;
 import javax.naming.Context;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
@@ -45,6 +46,7 @@ import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.lang.StringUtils;
 import org.apache.directory.api.ldap.model.filter.FilterEncoder;
 import org.apache.james.core.MailAddress;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
@@ -338,12 +340,12 @@ public class ReadOnlyUsersLDAPRepository implements UsersRepository, Configurabl
     // retries.
     private int maxRetries = 0;
 
-    /**
-     * Creates a new instance of ReadOnlyUsersLDAPRepository.
-     *
-     */
-    public ReadOnlyUsersLDAPRepository() {
+    private final DomainList domainList;
+
+    @Inject
+    public ReadOnlyUsersLDAPRepository(DomainList domainList) {
         super();
+        this.domainList = domainList;
     }
 
     /**
@@ -784,4 +786,17 @@ public class ReadOnlyUsersLDAPRepository implements UsersRepository, Configurabl
     public boolean isReadOnly() {
         return true;
     }
+
+
+    @Override
+    public MailAddress getMailAddressFor(org.apache.james.core.User user) throws UsersRepositoryException {
+        try {
+            if (supportVirtualHosting()) {
+                return new MailAddress(user.asString());
+            }
+            return new MailAddress(user.getLocalPart(), domainList.getDefaultDomain());
+        } catch (Exception e) {
+            throw new UsersRepositoryException("Failed to compute mail address associated with the user", e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
index 517b9b2..f7b7a6b 100644
--- a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
+++ b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
@@ -20,11 +20,14 @@
 package org.apache.james.user.ldap;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.ConversionException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.configuration.plist.PropertyListConfiguration;
+import org.apache.james.domainlist.api.DomainList;
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -33,10 +36,16 @@ public class ReadOnlyUsersLDAPRepositoryTest {
 
     @Rule
     public ExpectedException expectedException = ExpectedException.none();
+    private DomainList domainList;
+
+    @Before
+    public void setUp() {
+        domainList = mock(DomainList.class);
+    }
 
     @Test
     public void supportVirtualHostingShouldReturnFalseByDefault() throws Exception {
-        ReadOnlyUsersLDAPRepository usersLDAPRepository = new ReadOnlyUsersLDAPRepository();
+        ReadOnlyUsersLDAPRepository usersLDAPRepository = new ReadOnlyUsersLDAPRepository(domainList);
         usersLDAPRepository.configure(ldapRepositoryConfiguration());
 
         assertThat(usersLDAPRepository.supportVirtualHosting()).isFalse();
@@ -47,7 +56,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         HierarchicalConfiguration configuration = ldapRepositoryConfiguration();
         configuration.addProperty(ReadOnlyUsersLDAPRepository.SUPPORTS_VIRTUAL_HOSTING, "true");
 
-        ReadOnlyUsersLDAPRepository usersLDAPRepository = new ReadOnlyUsersLDAPRepository();
+        ReadOnlyUsersLDAPRepository usersLDAPRepository = new ReadOnlyUsersLDAPRepository(domainList);
         usersLDAPRepository.configure(configuration);
 
         assertThat(usersLDAPRepository.supportVirtualHosting()).isTrue();
@@ -58,7 +67,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         HierarchicalConfiguration configuration = ldapRepositoryConfiguration();
         configuration.addProperty(ReadOnlyUsersLDAPRepository.SUPPORTS_VIRTUAL_HOSTING, "false");
 
-        ReadOnlyUsersLDAPRepository usersLDAPRepository = new ReadOnlyUsersLDAPRepository();
+        ReadOnlyUsersLDAPRepository usersLDAPRepository = new ReadOnlyUsersLDAPRepository(domainList);
         usersLDAPRepository.configure(configuration);
 
         assertThat(usersLDAPRepository.supportVirtualHosting()).isFalse();
@@ -69,7 +78,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         HierarchicalConfiguration configuration = ldapRepositoryConfiguration();
         configuration.addProperty(ReadOnlyUsersLDAPRepository.SUPPORTS_VIRTUAL_HOSTING, "bad");
 
-        ReadOnlyUsersLDAPRepository usersLDAPRepository = new ReadOnlyUsersLDAPRepository();
+        ReadOnlyUsersLDAPRepository usersLDAPRepository = new ReadOnlyUsersLDAPRepository(domainList);
 
         expectedException.expect(ConversionException.class);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/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 895f623..dad5f8d 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
@@ -144,4 +144,16 @@ public abstract class AbstractUsersRepository implements UsersRepository, Config
     public boolean isReadOnly() {
         return false;
     }
+
+    @Override
+    public MailAddress getMailAddressFor(User user) throws UsersRepositoryException {
+        try {
+            if (supportVirtualHosting()) {
+                return new MailAddress(user.asString());
+            }
+            return new MailAddress(user.getLocalPart(), domainList.getDefaultDomain());
+        } catch (Exception e) {
+            throw new UsersRepositoryException("Failed to compute mail address associated with the user", e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java b/server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java
index e48f21c..f754bd3 100644
--- a/server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java
+++ b/server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java
@@ -35,12 +35,12 @@ public class SimpleDomainList implements DomainList {
     private final List<Domain> domains = new LinkedList<>();
 
     @Override
-    public boolean containsDomain(Domain domain) throws DomainListException {
+    public boolean containsDomain(Domain domain) {
         return domains.contains(domain);
     }
 
     @Override
-    public List<Domain> getDomains() throws DomainListException {
+    public List<Domain> getDomains() {
         return ImmutableList.copyOf(domains);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/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 4f49809..83b1bbc 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
@@ -39,7 +39,8 @@ public abstract class AbstractUsersRepositoryTest {
 
     private static final Domain DOMAIN = Domain.of("domain");
 
-    protected AbstractUsersRepository usersRepository; 
+    protected AbstractUsersRepository usersRepository;
+    private SimpleDomainList domainList;
 
     /**
      * Create the repository to be tested.
@@ -56,7 +57,7 @@ public abstract class AbstractUsersRepositoryTest {
     
     public void setUp() throws Exception { 
         this.usersRepository = getUsersRepository();
-        SimpleDomainList domainList = new SimpleDomainList();
+        domainList = new SimpleDomainList();
         domainList.addDomain(DOMAIN);
         usersRepository.setDomainList(domainList);
         user1 = login("username");
@@ -69,7 +70,7 @@ public abstract class AbstractUsersRepositoryTest {
         disposeUsersRepository();
     }
     
-    private String login(String login) throws UsersRepositoryException {
+    private String login(String login) {
         if (usersRepository.supportVirtualHosting()) {
             return login + '@' + DOMAIN.name();
         } else {
@@ -345,4 +346,29 @@ public abstract class AbstractUsersRepositoryTest {
 
         assertThat(usersRepository.isAdministrator(user1)).isFalse();
     }
+
+    @Test
+    public void getMailAddressForShouldBeIdentityWhenVirtualHosting() throws Exception {
+        usersRepository.setEnableVirtualHosting(true);
+
+        // Some implementations do not support changing virtual hosting value
+        Assume.assumeTrue(usersRepository.supportVirtualHosting());
+
+        String username = "user@domain";
+        assertThat(usersRepository.getMailAddressFor(org.apache.james.core.User.fromUsername(username)))
+            .isEqualTo(username);
+    }
+
+    @Test
+    public void getMailAddressForShouldAppendDefaultDomainWhenNoVirtualHosting() throws Exception {
+        usersRepository.setEnableVirtualHosting(false);
+        usersRepository.setDomainList(domainList);
+
+        // Some implementations do not support changing virtual hosting value
+        Assume.assumeFalse(usersRepository.supportVirtualHosting());
+
+        String username = "user";
+        assertThat(usersRepository.getMailAddressFor(org.apache.james.core.User.fromUsername(username)))
+            .isEqualTo(new MailAddress(username, domainList.getDefaultDomain()));
+    }
 }


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


[2/2] james-project git commit: JAMES-1854 Rely more on UserRepository::getUser(MailAddress)

Posted by ma...@apache.org.
JAMES-1854 Rely more on UserRepository::getUser(MailAddress)

This limits virtualHosting knowledge spreading in the code base


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

Branch: refs/heads/master
Commit: 34b2f98c82210d4354f7cf4df691716391a4c0f2
Parents: 5fbaeba
Author: benwa <bt...@linagora.com>
Authored: Tue Apr 3 09:26:44 2018 +0700
Committer: Matthieu Baechler <ma...@apache.org>
Committed: Thu Apr 5 15:32:08 2018 +0200

----------------------------------------------------------------------
 .../james/transport/mailets/AbstractSign.java   |  5 +---
 ...tSenderAuthIdentifyVerificationRcptHook.java | 27 +++++++++-----------
 .../hook/MailboxDeliverToRecipientHandler.java  |  8 +-----
 .../SenderAuthIdentifyVerificationRcptHook.java |  6 ++---
 .../smtpserver/fastfail/ValidRcptHandler.java   |  7 +----
 5 files changed, 18 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/34b2f98c/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
----------------------------------------------------------------------
diff --git a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
index 8b266a9..a81f1e6 100644
--- a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
+++ b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
@@ -605,10 +605,7 @@ public abstract class AbstractSign extends GenericMailet {
 
     private String getUsername(MailAddress mailAddress) {
         try {
-            if (usersRepository.supportVirtualHosting()) {
-                return mailAddress.asString();
-            }
-            return mailAddress.getLocalPart();
+            return usersRepository.getUser(mailAddress);
         } catch (UsersRepositoryException e) {
             throw Throwables.propagate(e);
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/34b2f98c/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationRcptHook.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationRcptHook.java b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationRcptHook.java
index 754df55..de3148e 100644
--- a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationRcptHook.java
+++ b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationRcptHook.java
@@ -47,15 +47,7 @@ public abstract class AbstractSenderAuthIdentifyVerificationRcptHook implements
             String authUser = (session.getUser()).toLowerCase(Locale.US);
             MailAddress senderAddress = (MailAddress) session.getAttachment(
                     SMTPSession.SENDER, ProtocolSession.State.Transaction);
-            String username = null;
-
-            if (senderAddress != null && !sender.isNullSender()) {
-                if (useVirtualHosting()) {
-                    username = senderAddress.asString();
-                } else {
-                    username = senderAddress.getLocalPart();
-                }
-            }
+            String username = retrieveSender(sender, senderAddress);
             
             // Check if the sender address is the same as the user which was used to authenticate.
             // Its important to ignore case here to fix JAMES-837. This is save todo because if the handler is called
@@ -68,8 +60,14 @@ public abstract class AbstractSenderAuthIdentifyVerificationRcptHook implements
         }
         return HookResult.declined();
     }
-    
-    
+
+    public String retrieveSender(MailAddress sender, MailAddress senderAddress) {
+        if (senderAddress != null && !sender.isNullSender()) {
+            return getUser(senderAddress);
+        }
+        return null;
+    }
+
     /**
      * Return true if the given domain is a local domain for this server
      * 
@@ -79,11 +77,10 @@ public abstract class AbstractSenderAuthIdentifyVerificationRcptHook implements
     protected abstract boolean isLocalDomain(Domain domain);
     
     /**
-     * Return true if virtualHosting should get used. If so the full email address will get used to 
-     * match against the supplied auth username
+     * Return the username corresponding to the given mail address.
      * 
-     * @return useVirtualHosting
+     * @return username corresponding to the mail address
      */
-    protected abstract boolean useVirtualHosting();
+    protected abstract String getUser(MailAddress mailAddress);
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/34b2f98c/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/hook/MailboxDeliverToRecipientHandler.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/hook/MailboxDeliverToRecipientHandler.java b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/hook/MailboxDeliverToRecipientHandler.java
index 9a300ec..7d52a3a 100644
--- a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/hook/MailboxDeliverToRecipientHandler.java
+++ b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/hook/MailboxDeliverToRecipientHandler.java
@@ -69,16 +69,10 @@ public class MailboxDeliverToRecipientHandler implements DeliverToRecipientHook
     
     @Override
     public HookResult deliver(SMTPSession session, MailAddress recipient, MailEnvelope envelope) {
-        String username;
         HookResult result;
 
         try {
-
-            if (users.supportVirtualHosting()) {
-                username = recipient.toString();
-            } else {
-                username = recipient.getLocalPart();
-            }
+            String username = users.getUser(recipient);
 
             MailboxSession mailboxSession = mailboxManager.createSystemSession(username);
             MailboxPath inbox = MailboxPath.inbox(mailboxSession);

http://git-wip-us.apache.org/repos/asf/james-project/blob/34b2f98c/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SenderAuthIdentifyVerificationRcptHook.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SenderAuthIdentifyVerificationRcptHook.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SenderAuthIdentifyVerificationRcptHook.java
index db00d42..53028a9 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SenderAuthIdentifyVerificationRcptHook.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SenderAuthIdentifyVerificationRcptHook.java
@@ -83,12 +83,12 @@ public class SenderAuthIdentifyVerificationRcptHook extends AbstractSenderAuthId
     }
 
     @Override
-    protected boolean useVirtualHosting() {
+    protected String getUser(MailAddress mailAddress) {
         try {
-            return users.supportVirtualHosting();
+            return users.getUser(mailAddress);
         } catch (UsersRepositoryException e) {
             throw Throwables.propagate(e);
         }
     }
-    
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/34b2f98c/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ValidRcptHandler.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ValidRcptHandler.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ValidRcptHandler.java
index d79ac4c..0dddccf 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ValidRcptHandler.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ValidRcptHandler.java
@@ -94,15 +94,10 @@ public class ValidRcptHandler extends AbstractValidRcptHandler implements Protoc
 
     @Override
     protected boolean isValidRecipient(SMTPSession session, MailAddress recipient) {
-
-        String username = recipient.toString();
-
         // check if the server use virtualhosting, if not use only the localpart
         // as username
         try {
-            if (!users.supportVirtualHosting()) {
-                username = recipient.getLocalPart();
-            }
+            String username = users.getUser(recipient);
 
             if (users.contains(username)) {
                 return true;


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