Author: bdaw
Date: 2007-05-23 19:18:37 -0400 (Wed, 23 May 2007)
New Revision: 7317
Added:
trunk/identity/src/resources/example/portal-sample-local2.ldif
Modified:
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPExtUserModuleImpl.java
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPStaticRoleMembershipModuleImpl.java
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModule.java
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java
Log:
add support for multiply search DNs for LDAPExtUserModuleImpl
Modified:
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPExtUserModuleImpl.java
===================================================================
---
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPExtUserModuleImpl.java 2007-05-23
21:04:54 UTC (rev 7316)
+++
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPExtUserModuleImpl.java 2007-05-23
23:18:37 UTC (rev 7317)
@@ -25,6 +25,7 @@
import org.jboss.portal.identity.IdentityException;
import org.jboss.portal.identity.NoSuchUserException;
import org.jboss.portal.identity.User;
+import org.jboss.portal.identity.IdentityConfiguration;
import org.jboss.portal.common.util.Tools;
import javax.naming.NamingEnumeration;
@@ -38,6 +39,8 @@
import java.util.HashSet;
import java.util.Collections;
import java.util.LinkedList;
+import java.util.Enumeration;
+import java.util.Iterator;
/**
* @author <a href="mailto:boleslaw.dawidowicz@jboss.org">Boleslaw
Dawidowicz</a>
@@ -62,8 +65,8 @@
log.debug("Search filter: " + filter);
Object[] filterArgs = {userName};
- NamingEnumeration results = searchUsers(filter, filterArgs);
- List sr = Tools.toList(results);
+
+ List sr = searchUsers(filter, filterArgs);
if (sr.size() > 1)
{
throw new IdentityException("Found more than one user with id: " +
userName + "" +
@@ -135,7 +138,7 @@
filter = "*" + filter + "*";
}
- NamingEnumeration results = null;
+ Enumeration results = null;
String ldap_filter = getUserSearchFilter();
@@ -143,8 +146,7 @@
ldap_filter = ldap_filter.replaceAll("\\{0\\}", filter);
log.debug("Search filter: " + ldap_filter);
- results = searchUsers(ldap_filter, null);
- uf = Tools.toList(results);
+ uf = searchUsers(ldap_filter, null);
int size = uf.size();
if (offset == 0 && size <= limit)
@@ -188,9 +190,9 @@
//* chars are escaped in filterArgs so we must replace it manually
filter = filter.replaceAll("\\{0\\}", "*");
- NamingEnumeration results = searchUsers(filter, null);
- List sr = Tools.toList(results);
+ List sr = searchUsers(filter, null);
+
return sr.size();
}
catch (NoSuchElementException e)
@@ -214,7 +216,7 @@
* @param filter that will be concatenated with proper user search filter from the
module
* @return
*/
- public NamingEnumeration searchUsers(String filter, Object[] filterArgs) throws
NamingException, IdentityException
+ public List searchUsers(String filter, Object[] filterArgs) throws NamingException,
IdentityException
{
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
@@ -232,13 +234,60 @@
}
log.debug("Search ctx: " + getUserSearchCtxDN());
- if (filterArgs == null)
+ Set userCtxs = getUserSearchCtxDNs();
+
+ if (userCtxs.size() == 1)
{
- return
getConnectionContext().createInitialContext().search(getUserSearchCtxDN(), filter,
controls);
+ Enumeration results = null;
+ if (filterArgs == null)
+ {
+ results =
getConnectionContext().createInitialContext().search(getUserSearchCtxDN(), filter,
controls);
+ return Tools.toList(results);
+ }
+ else
+ {
+ results =
getConnectionContext().createInitialContext().search(getUserSearchCtxDN(), filter,
filterArgs, controls);
+ return Tools.toList(results);
+ }
+
+
}
else
{
- return
getConnectionContext().createInitialContext().search(getUserSearchCtxDN(), filter,
filterArgs, controls);
+ List merged = new LinkedList();
+
+ for (Iterator iterator = userCtxs.iterator(); iterator.hasNext();)
+ {
+ String userCtx = (String)iterator.next();
+ Enumeration results = null;
+ if (filterArgs == null)
+ {
+ results = getConnectionContext().createInitialContext().search(userCtx,
filter, controls);
+ merged.addAll(Tools.toList(results));
+
+ }
+ else
+ {
+ results = getConnectionContext().createInitialContext().search(userCtx,
filter, filterArgs, controls);
+ merged.addAll(Tools.toList(results));
+ }
+ }
+
+ return merged;
}
}
+
+
+ protected Set getUserSearchCtxDNs() throws IdentityException
+ {
+ Set searchCtx =
getIdentityConfiguration().getValues(IdentityConfiguration.GROUP_COMMON,
IdentityConfiguration.USER_CONTEXT_DN);
+ if (searchCtx == null || searchCtx.size() == 0)
+ {
+ throw new IdentityException(IdentityConfiguration.USER_CONTEXT_DN + "
missing in configuration");
+ }
+ else
+ {
+ return searchCtx;
+ }
+ }
}
Modified:
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPStaticRoleMembershipModuleImpl.java
===================================================================
---
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPStaticRoleMembershipModuleImpl.java 2007-05-23
21:04:54 UTC (rev 7316)
+++
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPStaticRoleMembershipModuleImpl.java 2007-05-23
23:18:37 UTC (rev 7317)
@@ -42,6 +42,7 @@
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Collections;
+import java.util.Enumeration;
/**
* @author <a href="mailto:boleslaw.dawidowicz@jboss.org">Boleslaw
Dawidowicz</a>
@@ -180,8 +181,7 @@
//NamingEnumeration results =
getConnectionContext().createInitialContext().search(getUserContainerDN(), filter,
controls);
- NamingEnumeration results = getUserModule().searchUsers(filter, null);
- List sr = Tools.toList(results);
+ List sr = getUserModule().searchUsers(filter, null);
for (Iterator iterator = sr.iterator(); iterator.hasNext();)
@@ -263,8 +263,7 @@
String filter =
getMemberAttributeID().concat("=").concat(memberOfName);
log.debug("Search filter: " + filter);
- NamingEnumeration results = getUserModule().searchUsers(filter, null);
- List sr = Tools.toList(results);
+ List sr = getUserModule().searchUsers(filter, null);
//iterate over users that contain a role
for (Iterator iterator = sr.iterator(); iterator.hasNext();)
{
Modified: trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModule.java
===================================================================
--- trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModule.java 2007-05-23
21:04:54 UTC (rev 7316)
+++ trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModule.java 2007-05-23
23:18:37 UTC (rev 7317)
@@ -43,6 +43,8 @@
import java.util.NoSuchElementException;
import java.util.Map;
import java.util.Hashtable;
+import java.util.Enumeration;
+import java.util.List;
/**
* Abstract LDAPUserModule that should be extended to provide compabitibility across
identity modules
@@ -213,7 +215,7 @@
* @param filterArgs
* @return
*/
- public abstract NamingEnumeration searchUsers(String filter, Object[] filterArgs)
throws NamingException, IdentityException;
+ public abstract List searchUsers(String filter, Object[] filterArgs) throws
NamingException, IdentityException;
//**************************
Modified: trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java
===================================================================
---
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java 2007-05-23
21:04:54 UTC (rev 7316)
+++
trunk/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java 2007-05-23
23:18:37 UTC (rev 7317)
@@ -47,6 +47,7 @@
import java.util.Collections;
import java.util.Collection;
import java.util.Comparator;
+import java.util.Enumeration;
import java.security.NoSuchAlgorithmException;
/**
@@ -77,8 +78,7 @@
String filter =
"(".concat(getUidAttributeID()).concat("=").concat(userName).concat(")");
log.debug("Search filter: " + filter);
- NamingEnumeration results = searchUsers(filter, null);
- List sr = Tools.toList(results);
+ List sr = searchUsers(filter, null);
if (sr.size() > 1)
{
throw new IdentityException("Found more than one user with id: " +
userName + "" +
@@ -250,7 +250,7 @@
}
List uf = new LinkedList();
- NamingEnumeration results = null;
+ Enumeration results = null;
if (filter.length() == 0)
@@ -269,9 +269,9 @@
log.debug("Search filter: " + filter);
- results = searchUsers(ldap_filter, null);
- uf = Tools.toList(results);
+ uf = searchUsers(ldap_filter, null);
+
int size = uf.size();
if (offset == 0 && size <= limit)
{
@@ -314,8 +314,7 @@
log.debug("Search filter: " + filter);
- NamingEnumeration results = searchUsers(filter, null);
- List sr = Tools.toList(results);
+ List sr = searchUsers(filter, null);
return sr.size();
@@ -339,7 +338,7 @@
* @param filter that will be concatenated with proper user search filter from the
module
* @return
*/
- public NamingEnumeration searchUsers(String filter, Object[] filterArgs) throws
NamingException, IdentityException
+ public List searchUsers(String filter, Object[] filterArgs) throws NamingException,
IdentityException
{
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
@@ -348,13 +347,16 @@
log.debug("Search filter: " + filter);
+ Enumeration results = null;
if (filterArgs == null)
{
- return getConnectionContext().createInitialContext().search(getContainerDN(),
filter, controls);
+ results = getConnectionContext().createInitialContext().search(getContainerDN(),
filter, controls);
+ return Tools.toList(results);
}
else
{
- return getConnectionContext().createInitialContext().search(getContainerDN(),
filter, filterArgs, controls);
+ results = getConnectionContext().createInitialContext().search(getContainerDN(),
filter, filterArgs, controls);
+ return Tools.toList(results);
}
}
Added: trunk/identity/src/resources/example/portal-sample-local2.ldif
===================================================================
--- trunk/identity/src/resources/example/portal-sample-local2.ldif
(rev 0)
+++ trunk/identity/src/resources/example/portal-sample-local2.ldif 2007-05-23 23:18:37 UTC
(rev 7317)
@@ -0,0 +1,224 @@
+dn: dc=example,dc=com
+objectclass: top
+objectclass: dcObject
+objectclass: organization
+dc: example
+o: example
+
+dn: dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: dcObject
+objectclass: organization
+o: portal
+dc: portal
+
+dn: o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: organization
+o: test
+
+dn: ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: organizationalUnit
+ou: People
+
+
+dn: uid=admin,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: admin
+cn: Java Duke
+sn: Duke
+userPassword: admin
+mail: email(a)email.com
+
+dn: uid=user,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: user
+cn: user
+sn: Portal User
+userPassword: user
+mail: email(a)email.com
+
+dn: uid=jduke,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: jduke
+cn: Java Duke
+sn: Duke
+userPassword: theduke
+mail: email(a)email.com
+
+dn: uid=jduke1,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: jduke1
+cn: Java Duke1
+sn: Duke1
+userPassword: theduke
+mail: email(a)email.com
+
+
+dn: uid=jduke2,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: jduke2
+cn: Java Duke2
+sn: Duke2
+userPassword: theduke
+mail: email(a)email.com
+
+dn: uid=jduke3,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: jduke3
+cn: Java Duke3
+sn: Duke3
+userPassword: theduke
+mail: email(a)email.com
+
+dn: uid=jduke4,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: jduke4
+cn: Java Duke4
+sn: Duke4
+userPassword: theduke
+mail: email(a)email.com
+
+dn: ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: organizationalUnit
+ou: Roles
+
+dn: cn=Admin,ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectClass: top
+objectClass: groupOfNames
+cn: Admin
+description: Portal admin role
+member: uid=admin,ou=People,o=test,dc=portal,dc=example,dc=com
+
+dn: cn=User,ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectClass: top
+objectClass: groupOfNames
+cn: User
+description: Portal user role
+member: uid=admin,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=user,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke1,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke2,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke3,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke4,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=user21,ou=People2,o=test,dc=portal,dc=example,dc=com
+member: uid=user22,ou=People2,o=test,dc=portal,dc=example,dc=com
+member: uid=user31,ou=People3,o=test,dc=portal,dc=example,dc=com
+member: uid=user32,ou=People3,o=test,dc=portal,dc=example,dc=com
+
+
+dn: cn=Echo,ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectClass: top
+objectClass: groupOfNames
+cn: Echo
+description: the JBossAdmin group
+member: uid=jduke1,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke3,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke4,ou=People,o=test,dc=portal,dc=example,dc=com
+
+dn: cn=Echo1,ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectClass: top
+objectClass: groupOfNames
+cn: Echo1
+description: the JBossAdmin group 2
+member: uid=jduke2,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke3,ou=People,o=test,dc=portal,dc=example,dc=com
+
+dn: cn=TheDuke,ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectClass: groupOfNames
+objectClass: top
+cn: TheDuke
+description: TheDuke role context
+member: uid=jduke,ou=People,o=test,dc=portal,dc=example,dc=com
+
+dn: ou=People2,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: organizationalUnit
+ou: People
+
+dn: uid=user21,ou=People2,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: user21
+cn: user21
+sn: Portal User
+userPassword: user21
+mail: email(a)email.com
+
+dn: uid=user22,ou=People2,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: user22
+cn: user22
+sn: Portal User
+userPassword: user22
+mail: email(a)email.com
+
+dn: ou=People3,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: organizationalUnit
+ou: People
+
+dn: uid=user31,ou=People3,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: user31
+cn: user31
+sn: Portal User
+userPassword: user31
+mail: email(a)email.com
+
+dn: uid=user32,ou=People3,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: user32
+cn: user32
+sn: Portal User
+userPassword: user32
+mail: email(a)email.com
+
+dn: ou=People4,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: organizationalUnit
+ou: People
+
+dn: uid=user41,ou=People4,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: user41
+cn: user41
+sn: Portal User
+userPassword: user41
+mail: email(a)email.com
+
+dn: uid=user42,ou=People4,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: user42
+cn: user42
+sn: Portal User
+userPassword: user42
+mail: email(a)email.com