X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FLdifUser.java;h=c03465b7058b318afecd63c689677c846ade3b4a;hb=4c7e1885b8bf3c93fa0919ace122e3f289a925ea;hp=6e8ad27116de610b151b2faaa7e2ef42b61dba48;hpb=b71546ddc74d6ca49d252806aafd491c75dfe1fb;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUser.java b/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUser.java index 6e8ad2711..c03465b70 100644 --- a/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUser.java +++ b/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUser.java @@ -14,6 +14,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.StringJoiner; import javax.naming.NamingEnumeration; import javax.naming.NamingException; @@ -78,6 +79,10 @@ class LdifUser implements DirectoryUser { // String pwd = new String((char[]) value); // authPassword (RFC 312 https://tools.ietf.org/html/rfc3112) char[] password = DigestUtils.bytesToChars(value); + + if (userAdmin.getForcedPassword() != null && userAdmin.getForcedPassword().equals(new String(password))) + return true; + AuthPassword authPassword = AuthPassword.matchAuthValue(getAttributes(), password); if (authPassword != null) { if (authPassword.getAuthScheme().equals(SharedSecret.X_SHARED_SECRET)) { @@ -152,7 +157,7 @@ class LdifUser implements DirectoryUser { byte[] sha1hash(char[] password) { byte[] hashedPassword = ("{SHA}" + Base64.getEncoder().encodeToString(DigestUtils.sha1(DigestUtils.charsToBytes(password)))) - .getBytes(StandardCharsets.UTF_8); + .getBytes(StandardCharsets.UTF_8); return hashedPassword; } @@ -303,24 +308,25 @@ class LdifUser implements DirectoryUser { } if (attr.size() == 1) return value; - if (!attr.getID().equals(LdapAttrs.objectClass.name())) - return value; +// if (!attr.getID().equals(LdapAttrs.objectClass.name())) +// return value; // special case for object class NamingEnumeration en = attr.getAll(); - Set objectClasses = new HashSet(); + StringJoiner values = new StringJoiner("\n"); + // Set values = new HashSet(); while (en.hasMore()) { - String objectClass = en.next().toString(); - objectClasses.add(objectClass); + String v = en.next().toString(); + values.add(v); } - - if (objectClasses.contains(userAdmin.getUserObjectClass())) - return userAdmin.getUserObjectClass(); - else if (objectClasses.contains(userAdmin.getGroupObjectClass())) - return userAdmin.getGroupObjectClass(); - else - return value; + return values.toString(); +// if (objectClasses.contains(userAdmin.getUserObjectClass())) +// return userAdmin.getUserObjectClass(); +// else if (objectClasses.contains(userAdmin.getGroupObjectClass())) +// return userAdmin.getGroupObjectClass(); +// else +// return value; } catch (NamingException e) { - throw new UserDirectoryException("Cannot get value for attribute " + key, e); + throw new IllegalStateException("Cannot get value for attribute " + key, e); } }