From: Mathieu Baudier Date: Sat, 14 Jan 2017 14:26:07 +0000 (+0100) Subject: Introduce memberOf support X-Git-Tag: argeo-commons-2.1.56~6 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=e1f70fb64c4f0d8c6bbe6cdf19e369509eb43182;p=lgpl%2Fargeo-commons.git Introduce memberOf support --- diff --git a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java index f76f49d51..03eeeebdc 100644 --- a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java +++ b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java @@ -18,6 +18,8 @@ import java.util.Iterator; import java.util.List; import javax.naming.InvalidNameException; +import javax.naming.NamingEnumeration; +import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; @@ -159,11 +161,32 @@ public abstract class AbstractUserDirectory implements UserAdmin, UserDirectory } private void collectRoles(DirectoryUser user, List allRoles) { - for (LdapName groupDn : getDirectGroups(user.getDn())) { - // TODO check for loops - DirectoryUser group = doGetRole(groupDn); - allRoles.add(group); - collectRoles(group, allRoles); + Attributes attrs = user.getAttributes(); + // TODO centralize attribute name + Attribute memberOf = attrs.get("memberOf"); + if (memberOf != null) { + try { + NamingEnumeration values = memberOf.getAll(); + while (values.hasMore()) { + Object value = values.next(); + LdapName groupDn = new LdapName(value.toString()); + DirectoryUser group = doGetRole(groupDn); + allRoles.add(group); + if (log.isDebugEnabled()) + log.debug("Add memberOf " + groupDn); + } + } catch (Exception e) { + throw new UserDirectoryException("Cannot get memberOf groups for " + user, e); + } + } else { + for (LdapName groupDn : getDirectGroups(user.getDn())) { + // TODO check for loops + DirectoryUser group = doGetRole(groupDn); + allRoles.add(group); + if (log.isDebugEnabled()) + log.debug("Add direct group " + groupDn); + collectRoles(group, allRoles); + } } }