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 <[email protected]> Authored: Tue Feb 14 11:18:00 2017 +0100 Committer: Antoine Duprat <[email protected]> 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: [email protected] 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: [email protected] For additional commands, e-mail: [email protected]
