X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=security%2Fruntime%2Forg.argeo.security.ldap%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fldap%2Fjcr%2FJcrUserDetailsContextMapper.java;fp=security%2Fruntime%2Forg.argeo.security.ldap%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fldap%2Fjcr%2FJcrUserDetailsContextMapper.java;h=ec4255af9a6a1777583f058fda55cae186e2e902;hb=4c8c237990cda2b1a9be35532796510d9d5734c5;hp=7e2d89e6d62805adaf15f424cf8fecedc099fbd6;hpb=3393906b44fd05a9446c3c4896fadfccc3c2000a;p=lgpl%2Fargeo-commons.git diff --git a/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/jcr/JcrUserDetailsContextMapper.java b/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/jcr/JcrUserDetailsContextMapper.java index 7e2d89e6d..ec4255af9 100644 --- a/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/jcr/JcrUserDetailsContextMapper.java +++ b/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/jcr/JcrUserDetailsContextMapper.java @@ -6,6 +6,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Random; +import java.util.SortedSet; import java.util.concurrent.Executor; import javax.jcr.Node; @@ -64,6 +65,10 @@ public class JcrUserDetailsContextMapper implements UserDetailsContextMapper, public UserDetails mapUserFromContext(final DirContextOperations ctx, final String username, GrantedAuthority[] authorities) { + if (ctx == null) + throw new ArgeoException("No LDAP information found for user " + + username); + final StringBuffer userHomePathT = new StringBuffer(""); Runnable action = new Runnable() { public void run() { @@ -85,13 +90,20 @@ public class JcrUserDetailsContextMapper implements UserDetailsContextMapper, } // password - byte[] arr = (byte[]) ctx - .getAttributeSortedStringSet(passwordAttribute).first(); + SortedSet passwordAttributes = ctx + .getAttributeSortedStringSet(passwordAttribute); + String password; + if (passwordAttributes == null || passwordAttributes.size() == 0) { + throw new ArgeoException("No password found for user " + username); + } else { + byte[] arr = (byte[]) passwordAttributes.first(); + password = new String(arr); + // erase password + Arrays.fill(arr, (byte) 0); + } JcrUserDetails userDetails = new JcrUserDetails( - userHomePathT.toString(), username, new String(arr), true, - true, true, true, authorities); - // erase password - Arrays.fill(arr, (byte) 0); + userHomePathT.toString(), username, password, true, true, true, + true, authorities); return userDetails; } @@ -210,7 +222,7 @@ public class JcrUserDetailsContextMapper implements UserDetailsContextMapper, if (ldapAttribute.equals("description")) { String value = userProfile.getProperty(jcrProperty).getString(); - if(value.trim().equals("")) + if (value.trim().equals("")) return; }