You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/06/11 07:37:08 UTC

[james-project] 12/18: JAMES-3594 Group restrictions should use connection pooling

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 2fb75fc636d39802f781725b8ded3143a23f70e1
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Jun 10 10:47:17 2021 +0700

    JAMES-3594 Group restrictions should use connection pooling
---
 .../user/ldap/ReadOnlyLDAPGroupRestriction.java    |  3 +-
 .../james/user/ldap/ReadOnlyLDAPUsersDAO.java      | 62 +++++++++-------------
 2 files changed, 28 insertions(+), 37 deletions(-)

diff --git a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPGroupRestriction.java b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPGroupRestriction.java
index 9123f65..d9023b7 100644
--- a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPGroupRestriction.java
+++ b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPGroupRestriction.java
@@ -31,6 +31,7 @@ import org.apache.commons.configuration2.tree.ImmutableNode;
 
 import com.github.steveash.guavate.Guavate;
 import com.unboundid.ldap.sdk.LDAPConnection;
+import com.unboundid.ldap.sdk.LDAPConnectionPool;
 import com.unboundid.ldap.sdk.LDAPException;
 import com.unboundid.ldap.sdk.SearchResultEntry;
 
@@ -113,7 +114,7 @@ public class ReadOnlyLDAPGroupRestriction {
      *
      * @return Returns a map of groupDNs to userDN lists.
      */
-    protected Map<String, Collection<String>> getGroupMembershipLists(LDAPConnection connection) throws LDAPException {
+    protected Map<String, Collection<String>> getGroupMembershipLists(LDAPConnectionPool connection) throws LDAPException {
         Map<String, Collection<String>> result = new HashMap<>();
 
         for (String groupDN : groupDNs) {
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 f1c1819..81b8375 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
@@ -226,30 +226,25 @@ public class ReadOnlyLDAPUsersDAO implements UsersDAO, Configurable {
     }
 
     private ReadOnlyLDAPUser searchAndBuildUser(Username name) throws LDAPException {
-        LDAPConnection connection = ldapConnectionPool.getConnection();
-        try {
-            SearchResult searchResult = connection.search(ldapConfiguration.getUserBase(),
-                SearchScope.SUB,
-                createFilter(name.asString()),
-                ldapConfiguration.getUserIdAttribute());
-
-            SearchResultEntry result = searchResult.getSearchEntries()
-                .stream()
-                .findFirst()
-                .orElse(null);
-            if (result == null) {
-                return null;
-            }
-
-            if (!ldapConfiguration.getRestriction().isActivated()
-                || userInGroupsMembershipList(result.getDN(), ldapConfiguration.getRestriction().getGroupMembershipLists(connection))) {
+        SearchResult searchResult = ldapConnectionPool.search(ldapConfiguration.getUserBase(),
+            SearchScope.SUB,
+            createFilter(name.asString()),
+            ldapConfiguration.getUserIdAttribute());
 
-                return new ReadOnlyLDAPUser(name, result.getDN(), ldapConnectionPool, ldapConfiguration);
-            }
+        SearchResultEntry result = searchResult.getSearchEntries()
+            .stream()
+            .findFirst()
+            .orElse(null);
+        if (result == null) {
             return null;
-        } finally {
-            ldapConnectionPool.releaseConnection(connection);
         }
+
+        if (!ldapConfiguration.getRestriction().isActivated()
+            || userInGroupsMembershipList(result.getDN(), ldapConfiguration.getRestriction().getGroupMembershipLists(ldapConnectionPool))) {
+
+            return new ReadOnlyLDAPUser(name, result.getDN(), ldapConnectionPool, ldapConfiguration);
+        }
+        return null;
     }
 
     private Optional<ReadOnlyLDAPUser> buildUser(String userDN) throws LDAPException {
@@ -346,22 +341,17 @@ public class ReadOnlyLDAPUsersDAO implements UsersDAO, Configurable {
         Set<String> userDNs = getAllUsersDNFromLDAP();
         Collection<String> validUserDNs;
         if (ldapConfiguration.getRestriction().isActivated()) {
-            final LDAPConnection connection = ldapConnectionPool.getConnection();
-            try {
-                Map<String, Collection<String>> groupMembershipList = ldapConfiguration.getRestriction()
-                    .getGroupMembershipLists(connection);
-                validUserDNs = new ArrayList<>();
-
-                Iterator<String> userDNIterator = userDNs.iterator();
-                String userDN;
-                while (userDNIterator.hasNext()) {
-                    userDN = userDNIterator.next();
-                    if (userInGroupsMembershipList(userDN, groupMembershipList)) {
-                        validUserDNs.add(userDN);
-                    }
+            Map<String, Collection<String>> groupMembershipList = ldapConfiguration.getRestriction()
+                .getGroupMembershipLists(ldapConnectionPool);
+            validUserDNs = new ArrayList<>();
+
+            Iterator<String> userDNIterator = userDNs.iterator();
+            String userDN;
+            while (userDNIterator.hasNext()) {
+                userDN = userDNIterator.next();
+                if (userInGroupsMembershipList(userDN, groupMembershipList)) {
+                    validUserDNs.add(userDN);
                 }
-            } finally {
-                ldapConnectionPool.releaseConnection(connection);
             }
         } else {
             validUserDNs = userDNs;

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