if (user != null && !user.isEnabled())
throw new DisabledUserException(user.getUserName());
LdapContext ctx = ldapService.getLdapContext();
String userDN = null;
User existingUser = null;
try
{
for (int err = 0;; err++)
{
try
{
userDN = getDNFromUsername(ctx, user.getUserName());
if (userDN == null)
return;
existingUser = getUserFromUsername(ctx, user.getUserName());
ModificationItem[] mods = createUserModification(user, existingUser);
if (broadcast)
preSave(user, false);
ctx.modifyAttributes(userDN, mods);
if (broadcast)
postSave(user, false);
cacheHandler.put(user.getUserName(), user, CacheType.USER);
break;
}
catch (NamingException e)
{
ctx = reloadCtx(ctx, err, e);
}
}
}
finally
{
ldapService.release(ctx);
}
if (existingUser != null && (!user.getPassword().equals(existingUser.getPassword())))
{
saveUserPassword(user, userDN);
}
}