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 no...@apache.org on 2011/10/06 08:12:55 UTC
svn commit: r1179514 -
/james/server/trunk/ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
Author: norman
Date: Thu Oct 6 06:12:54 2011
New Revision: 1179514
URL: http://svn.apache.org/viewvc?rev=1179514&view=rev
Log:
more effective getUserByName(String name) in org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository. Thanks to Peter Kvokacka for the patch. See JAMES-1313
Modified:
james/server/trunk/ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
Modified: james/server/trunk/ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java?rev=1179514&r1=1179513&r2=1179514&view=diff
==============================================================================
--- james/server/trunk/ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java (original)
+++ james/server/trunk/ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java Thu Oct 6 06:12:54 2011
@@ -351,14 +351,23 @@ public class ReadOnlyUsersLDAPRepository
* Propagated by the underlying LDAP communication layer.
*/
private ReadOnlyLDAPUser buildUser(String userDN) throws NamingException {
- ReadOnlyLDAPUser result;
-
- Attributes userAttributes = ldapConnection.getLdapContext().getAttributes(userDN);
- Attribute userName = userAttributes.get(userIdAttribute);
-
- result = new ReadOnlyLDAPUser(userName.get().toString(), userDN, ldapHost);
-
- return result;
+ SearchControls sc = new SearchControls();
+ sc.setSearchScope(SearchControls.OBJECT_SCOPE);
+ sc.setReturningAttributes(new String[] {userIdAttribute});
+ sc.setCountLimit(1);
+
+ NamingEnumeration<SearchResult> sr = ldapConnection.getLdapContext().search(userDN, "(objectClass=" + userObjectClass + ")", sc);
+
+ if (!sr.hasMore())
+ return null;
+
+ Attributes userAttributes = sr.next().getAttributes();
+ Attribute userName = userAttributes.get(userIdAttribute);
+
+ if (!restriction.isActivated() || userInGroupsMembershipList(userDN, restriction.getGroupMembershipLists(ldapConnection)))
+ return new ReadOnlyLDAPUser(userName.get().toString(), userDN, ldapHost);
+
+ return null;
}
/*
@@ -424,22 +433,13 @@ public class ReadOnlyUsersLDAPRepository
* org.apache.james.api.user.UsersRepository#getUserByName(java.lang.String)
*/
public User getUserByName(String name) throws UsersRepositoryException {
- try {
- Iterator<ReadOnlyLDAPUser> userIt = buildUserCollection(getValidUsers()).iterator();
- while (userIt.hasNext()) {
- ReadOnlyLDAPUser u = userIt.next();
- if (u.getUserName().equals(name)) {
- return u;
- }
- }
-
- } catch (NamingException e) {
- log.error("Unable to retrieve user from ldap", e);
- throw new UsersRepositoryException("Unable to retrieve user from ldap", e);
-
- }
- return null;
-
+ try {
+ return buildUser(userIdAttribute + "=" + name + "," + userBase);
+ } catch (NamingException e) {
+ log.error("Unable to retrieve user from ldap", e);
+ throw new UsersRepositoryException("Unable to retrieve user from ldap", e);
+
+ }
}
/*
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org