private InitialLdapContext initialLdapContext = null;
public LdapUserAdmin(Dictionary<String, ?> properties) {
- super(properties);
+ super(null, properties);
try {
Hashtable<String, Object> connEnv = new Hashtable<String, Object>();
connEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
@Override
protected AbstractUserDirectory scope(User user) {
Dictionary<String, Object> credentials = user.getCredentials();
- // FIXME use arrays
String username = (String) credentials.get(SHARED_STATE_USERNAME);
if (username == null)
username = user.getName();
- // byte[] pwd = (byte[]) credentials.get(SHARED_STATE_PASSWORD);
- // char[] password = DigestUtils.bytesToChars(pwd);
Dictionary<String, Object> properties = cloneProperties();
properties.put(Context.SECURITY_PRINCIPAL, username.toString());
- // properties.put(Context.SECURITY_CREDENTIALS, password);
- properties.put(Context.SECURITY_AUTHENTICATION, "GSSAPI");
+ Object pwdCred = credentials.get(SHARED_STATE_PASSWORD);
+ byte[] pwd = (byte[]) pwdCred;
+ if (pwd != null) {
+ char[] password = DigestUtils.bytesToChars(pwd);
+ properties.put(Context.SECURITY_CREDENTIALS, new String(password));
+ } else {
+ properties.put(Context.SECURITY_AUTHENTICATION, "GSSAPI");
+ }
return new LdapUserAdmin(properties);
}
@Override
protected Boolean daoHasRole(LdapName dn) {
- return daoGetRole(dn) != null;
+ try {
+ return daoGetRole(dn) != null;
+ } catch (NameNotFoundException e) {
+ return false;
+ }
}
@Override
- protected DirectoryUser daoGetRole(LdapName name) {
+ protected DirectoryUser daoGetRole(LdapName name) throws NameNotFoundException {
try {
Attributes attrs = getLdapContext().getAttributes(name);
if (attrs.size() == 0)
else
throw new UserDirectoryException("Unsupported LDAP type for " + name);
return res;
+ } catch (NameNotFoundException e) {
+ throw e;
} catch (NamingException e) {
- log.error("Cannot get role: " + e.getMessage());
+ if (log.isTraceEnabled())
+ log.error("Cannot get role: " + name, e);
return null;
}
}