X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Futil%2Fdirectory%2Fldap%2FAbstractLdapDirectory.java;h=28d8d081ccdcfb875e5ce8941086f01cc3be3c00;hb=138e686fbf65683c3c94a52f1cfbaf8e02362e19;hp=27c2b9531d6465b3ade47fce8dafcf69cfbc243b;hpb=4012bedd8870634488b307d2233590fb1226e5d4;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java b/org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java index 27c2b9531..28d8d081c 100644 --- a/org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java +++ b/org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java @@ -10,6 +10,7 @@ import java.util.Dictionary; import java.util.Enumeration; import java.util.Hashtable; import java.util.List; +import java.util.Locale; import java.util.Optional; import java.util.StringJoiner; @@ -161,9 +162,9 @@ public abstract class AbstractLdapDirectory implements Directory, XAResourceProv /* * CREATION */ - protected abstract LdapEntry newUser(LdapName name, Attributes attrs); + protected abstract LdapEntry newUser(LdapName name); - protected abstract LdapEntry newGroup(LdapName name, Attributes attrs); + protected abstract LdapEntry newGroup(LdapName name); /* * EDITION @@ -255,11 +256,7 @@ public abstract class AbstractLdapDirectory implements Directory, XAResourceProv } else { // user doesn't have the right to retrieve role, but we know it exists // otherwise memberOf would not work - Attributes a = new BasicAttributes(); - a.put(LdapNameUtils.getLastRdn(groupDn).getType(), - LdapNameUtils.getLastRdn(groupDn).getValue()); - a.put(LdapAttrs.objectClass.name(), LdapObjs.groupOfNames.name()); - group = newGroup(groupDn, a); + group = newGroup(groupDn); allRoles.add(group); } } @@ -267,10 +264,13 @@ public abstract class AbstractLdapDirectory implements Directory, XAResourceProv throw new IllegalStateException("Cannot get memberOf groups for " + user, e); } } else { - for (LdapName groupDn : getDirectoryDao().getDirectGroups(user.getDn())) { - // TODO check for loops + directGroups: for (LdapName groupDn : getDirectoryDao().getDirectGroups(user.getDn())) { LdapEntry group = doGetRole(groupDn); if (group != null) { + if (allRoles.contains(group)) { + // important in order to avoi loops + continue directGroups; + } allRoles.add(group); collectGroups(group, allRoles); } @@ -297,6 +297,16 @@ public abstract class AbstractLdapDirectory implements Directory, XAResourceProv return getName(); } + @Override + public String getHierarchyUnitLabel(Locale locale) { + String key = LdapNameUtils.getLastRdn(getBaseDn()).getType(); + Object value = LdapEntry.getLocalized(asLdapEntry().getProperties(), key, locale); + if (value == null) + value = getHierarchyUnitName(); + assert value != null; + return value.toString(); + } + @Override public HierarchyUnit getParent() { return null; @@ -326,7 +336,7 @@ public abstract class AbstractLdapDirectory implements Directory, XAResourceProv // TODO deal with multiple attr RDN attrs.put(nameRdn.getType(), nameRdn.getValue()); wc.getModifiedData().put(dn, attrs); - LdapHierarchyUnit newHierarchyUnit = new LdapHierarchyUnit(this, dn, attrs); + LdapHierarchyUnit newHierarchyUnit = new LdapHierarchyUnit(this, dn); wc.getNewData().put(dn, newHierarchyUnit); return newHierarchyUnit; } @@ -336,7 +346,7 @@ public abstract class AbstractLdapDirectory implements Directory, XAResourceProv */ @Override - public String getContext() { + public String getBase() { return getBaseDn().toString(); }