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 ad...@apache.org on 2017/02/14 12:05:56 UTC

[11/12] james-project git commit: JAMES-1940 Fix Virtual hosting support of LDAP users repository

JAMES-1940 Fix Virtual hosting support of LDAP users repository


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

Branch: refs/heads/master
Commit: df96d1afc87c6a325f4b0f2b2814d1d6a07b3a28
Parents: 42b574d
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Feb 14 11:18:00 2017 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 13:04:54 2017 +0100

----------------------------------------------------------------------
 .../ldap/ReadOnlyUsersLDAPRepositoryTest.java   | 62 +++++++++++++++++++-
 .../src/test/resources/ldif-files/populate.ldif |  1 +
 .../user/ldap/ReadOnlyUsersLDAPRepository.java  |  6 +-
 3 files changed, 67 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/df96d1af/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 c5e1bbe..17b7ad8 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
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.configuration.plist.PropertyListConfiguration;
+import org.apache.mailet.MailAddress;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -35,6 +36,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
     private static final String DOMAIN = "james.org";
     private static final String ADMIN_PASSWORD = "mysecretpassword";
     private static final String JAMES_USER = "james-user";
+    private static final String JAMES_USER_MAIL = "james-user" + "@" + DOMAIN;
     private static final String UNKNOWN = "unknown";
     private static final String PASSWORD = "secret";
     private static final String BAD_PASSWORD = "badpassword";
@@ -49,8 +51,11 @@ public class ReadOnlyUsersLDAPRepositoryTest {
                 .password(ADMIN_PASSWORD)
                 .build();
         ldapContainer.start();
+    }
+
+    private void startUsersRepository(HierarchicalConfiguration ldapRepositoryConfiguration) throws ConfigurationException, Exception {
         ldapRepository = new ReadOnlyUsersLDAPRepository();
-        ldapRepository.configure(ldapRepositoryConfiguration());
+        ldapRepository.configure(ldapRepositoryConfiguration);
         ldapRepository.setLog(LOGGER);
         ldapRepository.init();
     }
@@ -70,6 +75,22 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         return configuration;
     }
 
+    private HierarchicalConfiguration ldapRepositoryConfigurationWithVirtualHosting() throws ConfigurationException {
+        PropertyListConfiguration configuration = new PropertyListConfiguration();
+        configuration.addProperty("[@ldapHost]", ldapContainer.getLdapHost());
+        configuration.addProperty("[@principal]", "cn=admin\\,dc=james\\,dc=org");
+        configuration.addProperty("[@credentials]", ADMIN_PASSWORD);
+        configuration.addProperty("[@userBase]", "ou=People\\,dc=james\\,dc=org");
+        configuration.addProperty("[@userIdAttribute]", "mail");
+        configuration.addProperty("[@userObjectClass]", "inetOrgPerson");
+        configuration.addProperty("[@maxRetries]", "4");
+        configuration.addProperty("[@retryStartInterval]", "0");
+        configuration.addProperty("[@retryMaxInterval]", "8");
+        configuration.addProperty("[@retryIntervalScale]", "1000");
+        configuration.addProperty("supportsVirtualHosting", true);
+        return configuration;
+    }
+
     @After
     public void tearDown() {
         if (ldapContainer != null) {
@@ -79,21 +100,60 @@ public class ReadOnlyUsersLDAPRepositoryTest {
 
     @Test
     public void knownUserShouldBeAbleToLogInWhenPasswordIsCorrect() throws Exception {
+        startUsersRepository(ldapRepositoryConfiguration());
         assertThat(ldapRepository.test(JAMES_USER, PASSWORD)).isTrue();
     }
 
     @Test
     public void knownUserShouldNotBeAbleToLogInWhenPasswordIsNotCorrect() throws Exception {
+        startUsersRepository(ldapRepositoryConfiguration());
         assertThat(ldapRepository.test(JAMES_USER, BAD_PASSWORD)).isFalse();
     }
 
     @Test
     public void unknownUserShouldNotBeAbleToLogIn() throws Exception {
+        startUsersRepository(ldapRepositoryConfiguration());
         assertThat(ldapRepository.test(UNKNOWN, BAD_PASSWORD)).isFalse();
     }
 
     @Test
     public void unknownUserShouldNotBeAbleToLogInWhenPasswordIsCorrect() throws Exception {
+        startUsersRepository(ldapRepositoryConfiguration());
         assertThat(ldapRepository.test(UNKNOWN, PASSWORD)).isFalse();
     }
+    @Test
+    public void knownUserShouldBeAbleToLogInWhenPasswordIsCorrectWithVirtualHosting() throws Exception {
+        startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
+        assertThat(ldapRepository.test(JAMES_USER_MAIL, PASSWORD)).isTrue();
+    }
+
+    @Test
+    public void knownUserShouldNotBeAbleToLogInWhenPasswordIsNotCorrectWithVirtualHosting() throws Exception {
+        startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
+        assertThat(ldapRepository.test(JAMES_USER, BAD_PASSWORD)).isFalse();
+    }
+
+    @Test
+    public void unknownUserShouldNotBeAbleToLogInWithVirtualHosting() throws Exception {
+        startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
+        assertThat(ldapRepository.test(UNKNOWN, BAD_PASSWORD)).isFalse();
+    }
+
+    @Test
+    public void unknownUserShouldNotBeAbleToLogInWhenPasswordIsCorrectWithVirtualHosting() throws Exception {
+        startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
+        assertThat(ldapRepository.test(UNKNOWN, PASSWORD)).isFalse();
+    }
+
+    @Test
+    public void containsWithGetUserShouldBeTrue() throws Exception {
+        startUsersRepository(ldapRepositoryConfiguration());
+        assertThat(ldapRepository.contains(ldapRepository.getUser(new MailAddress(JAMES_USER_MAIL)))).isTrue();
+    }
+
+    @Test
+    public void containsWithGetUserShouldBeTrueWithVirtualHosting() throws Exception {
+        startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
+        assertThat(ldapRepository.contains(ldapRepository.getUser(new MailAddress(JAMES_USER_MAIL)))).isTrue();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/df96d1af/server/data/data-ldap-integration-testing/src/test/resources/ldif-files/populate.ldif
----------------------------------------------------------------------
diff --git a/server/data/data-ldap-integration-testing/src/test/resources/ldif-files/populate.ldif b/server/data/data-ldap-integration-testing/src/test/resources/ldif-files/populate.ldif
index 9376a6c..95f3391 100644
--- a/server/data/data-ldap-integration-testing/src/test/resources/ldif-files/populate.ldif
+++ b/server/data/data-ldap-integration-testing/src/test/resources/ldif-files/populate.ldif
@@ -7,5 +7,6 @@ objectClass: inetOrgPerson
 uid: james-user
 cn: james-user
 sn: james-user
+mail: james-user@james.org
 userPassword: secret
 description: James user

http://git-wip-us.apache.org/repos/asf/james-project/blob/df96d1af/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 6e07236..4948a39 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
@@ -768,6 +768,10 @@ public class ReadOnlyUsersLDAPRepository implements UsersRepository, Configurabl
 
     @Override
     public String getUser(MailAddress mailAddress) throws UsersRepositoryException {
-        return mailAddress.getLocalPart();
+        if (supportVirtualHosting()) {
+            return mailAddress.asString();
+        } else {
+            return mailAddress.getLocalPart();
+        }
     }
 }


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