You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2023/07/21 04:43:23 UTC
[james-project] 02/05: JAMES-3928 Should support fallback to legacy `ldapHost` property
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 04cf36a088c006fe6d1d7876b68ea28b443f8ba9
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Wed Jul 19 11:55:40 2023 +0700
JAMES-3928 Should support fallback to legacy `ldapHost` property
---
.../user/ldap/LdapRepositoryConfiguration.java | 7 ++++--
.../james/user/ldap/ReadOnlyLDAPUsersDAO.java | 2 +-
...nlyUsersLDAPRepositoryWithLDAPFailoverTest.java | 26 +++++++++++++++++-----
3 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
index 92263b62ce..47a980958f 100644
--- a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
+++ b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
@@ -146,7 +146,9 @@ public class LdapRepositoryConfiguration {
public static LdapRepositoryConfiguration from(HierarchicalConfiguration<ImmutableNode> configuration) throws ConfigurationException {
List<String> ldapHosts = Splitter.on(",")
- .splitToList(configuration.getString("[@ldapHost]", ""));
+ .splitToList(Optional.ofNullable(configuration.getString("[@ldapHosts]", null))
+ .orElse(configuration.getString("[@ldapHost]", ""))
+ .trim());
String principal = configuration.getString("[@principal]", "");
String credentials = configuration.getString("[@credentials]", "");
String userBase = configuration.getString("[@userBase]");
@@ -209,7 +211,8 @@ public class LdapRepositoryConfiguration {
* Note that users are actually authenticated by binding against the LDAP
* servers using the users "dn" and "credentials".The
* value of this field is taken from the value of the configuration
- * attribute "ldapHost". URLs are split by the comma "," character.
+ * attribute "ldapHosts" and fallback to the legacy attribute "ldapHost".
+ * URLs are split by the comma "," character.
*/
private final List<String> ldapHosts;
diff --git a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
index 49fcac7d69..37e512cd1a 100644
--- a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
+++ b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
@@ -146,7 +146,7 @@ public class ReadOnlyLDAPUsersDAO implements UsersDAO, Configurable {
.map(Throwing.function(URI::new))
.collect(ImmutableList.toImmutableList());
- // naive assume SSL configuration is the same for all URIs firstly
+ // Assume SSL configuration is the same for all URIs
SocketFactory socketFactory = supportLDAPS(uris.get(0));
String[] addresses = uris.stream()
diff --git a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
index e09a4913ec..d0e6ed7660 100644
--- a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
+++ b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
@@ -171,21 +171,37 @@ class ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest {
assertThat(usersLDAPRepository.countUsers()).isEqualTo(1);
}
+ @Test
+ void shouldSupportBackwardCompatibilityForTheLegacyLdapHostProperty() throws Exception {
+ HierarchicalConfiguration<ImmutableNode> configuration = ldapRepositoryConfigurationWithVirtualHosting(List.of(masterLdap, slaveLdap), "ldapHost");
+
+ usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new SimpleDomainList());
+ usersLDAPRepository.configure(configuration);
+
+ assertThatCode(() -> usersLDAPRepository.init())
+ .doesNotThrowAnyException();
+ assertThat(usersLDAPRepository.countUsers()).isEqualTo(1);
+ }
+
static HierarchicalConfiguration<ImmutableNode> ldapRepositoryConfigurationWithVirtualHosting(List<LdapGenericContainer> ldapContainers) {
- return ldapRepositoryConfigurationWithVirtualHosting(ldapContainers, Optional.of(ADMIN));
+ return ldapRepositoryConfigurationWithVirtualHosting(ldapContainers, Optional.of(ADMIN), "ldapHosts");
+ }
+
+ static HierarchicalConfiguration<ImmutableNode> ldapRepositoryConfigurationWithVirtualHosting(List<LdapGenericContainer> ldapContainers, String ldapHostProperty) {
+ return ldapRepositoryConfigurationWithVirtualHosting(ldapContainers, Optional.of(ADMIN), ldapHostProperty);
}
- static HierarchicalConfiguration<ImmutableNode> ldapRepositoryConfigurationWithVirtualHosting(List<LdapGenericContainer> ldapContainers, Optional<Username> administrator) {
- PropertyListConfiguration configuration = baseConfiguration(ldapContainers);
+ static HierarchicalConfiguration<ImmutableNode> ldapRepositoryConfigurationWithVirtualHosting(List<LdapGenericContainer> ldapContainers, Optional<Username> administrator, String ldapHostsProperty) {
+ PropertyListConfiguration configuration = baseConfiguration(ldapContainers, ldapHostsProperty);
configuration.addProperty("[@userIdAttribute]", "mail");
configuration.addProperty("supportsVirtualHosting", true);
administrator.ifPresent(username -> configuration.addProperty("[@administratorId]", username.asString()));
return configuration;
}
- static PropertyListConfiguration baseConfiguration(List<LdapGenericContainer> ldapContainers) {
+ static PropertyListConfiguration baseConfiguration(List<LdapGenericContainer> ldapContainers, String ldapHostsProperty) {
PropertyListConfiguration configuration = new PropertyListConfiguration();
- configuration.addProperty("[@ldapHost]", ldapContainers.stream()
+ configuration.addProperty(String.format("[@%s]", ldapHostsProperty), ldapContainers.stream()
.map(LdapGenericContainer::getLdapHost)
.collect(Collectors.joining(",")));
configuration.addProperty("[@principal]", "cn=admin,dc=james,dc=org");
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org