NamingEnumeration results = context.search(userBase, filter, constraints);
if (results == null || !results.hasMore()) {
log.error("No roles associated with user " + username);
loginSucceeded = false;
throw new FailedLoginException();
}
SearchResult result = (SearchResult) results.next();
if (results.hasMore()) {
// ignore for now
}
NameParser parser = context.getNameParser("");
Name contextName = parser.parse(context.getNameInNamespace());
Name baseName = parser.parse(userBase);
Name entryName = parser.parse(result.getName());
Name name = contextName.addAll(baseName);
name = name.addAll(entryName);
String dn = name.toString();
Attributes attrs = result.getAttributes();
if (attrs == null) {
return false;
}
ArrayList<String> roles = null;
if (userRoleName != null) {
roles = addAttributeValues(userRoleName, attrs, roles);
}
// check the credentials by binding to server
// bindUser(context, dn);
// if authenticated add more roles
roles = getRoles(context, dn, username, roles);
for (String role : roles) {
groups.add(role);
}
if (groups.isEmpty()) {
log.error("No roles associated with user " + username);
loginSucceeded = false;
throw new FailedLoginException();
} else
loginSucceeded = true;
} catch (CommunicationException e) {
close(context);
throw (LoginException) new FailedLoginException().initCause(e);
} catch (NamingException e) {
close(context);
throw (LoginException) new FailedLoginException().initCause(e);
}
return true;
}