On Fri, Oct 5, 2012 at 2:36 PM,  <alena1...@apache.org> wrote:
> Updated Branches:
>   refs/heads/4.0 8ba6c8b17 -> f7ebb76f5
>
>
> CLOUDSTACK-121: Fixed "Incorrect username/domainId login causes 
> NullPointerException "
>
>
> Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
> Commit: 
> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/f7ebb76f
> Tree: 
> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/f7ebb76f
> Diff: 
> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/f7ebb76f
>
> Branch: refs/heads/4.0
> Commit: f7ebb76f57a0c88c8b379aacb1a4e3fd653a325f
> Parents: 8ba6c8b
> Author: Rohit Yadav <rohit.ya...@citrix.com>
> Authored: Fri Oct 5 11:32:45 2012 -0700
> Committer: Alena Prokharchyk <alena.prokharc...@citrix.com>
> Committed: Fri Oct 5 11:33:21 2012 -0700
>
> ----------------------------------------------------------------------
>  api/src/com/cloud/user/UserAccount.java           |    2 ++
>  server/src/com/cloud/user/AccountManagerImpl.java |   15 ++++++++-------
>  2 files changed, 10 insertions(+), 7 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/f7ebb76f/api/src/com/cloud/user/UserAccount.java
> ----------------------------------------------------------------------
> diff --git a/api/src/com/cloud/user/UserAccount.java 
> b/api/src/com/cloud/user/UserAccount.java
> index 734e16b..2a6bd4f 100644
> --- a/api/src/com/cloud/user/UserAccount.java
> +++ b/api/src/com/cloud/user/UserAccount.java
> @@ -56,4 +56,6 @@ public interface UserAccount {
>      String getRegistrationToken();
>
>      boolean isRegistered();
> +
> +    int getLoginAttempts();
>  }
>
> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/f7ebb76f/server/src/com/cloud/user/AccountManagerImpl.java
> ----------------------------------------------------------------------
> diff --git a/server/src/com/cloud/user/AccountManagerImpl.java 
> b/server/src/com/cloud/user/AccountManagerImpl.java
> index fa9fafb..4d3f45c 100755
> --- a/server/src/com/cloud/user/AccountManagerImpl.java
> +++ b/server/src/com/cloud/user/AccountManagerImpl.java
> @@ -1862,24 +1862,25 @@ public class AccountManagerImpl implements 
> AccountManager, AccountService, Manag
>              }
>
>              UserAccount userAccount = 
> _userAccountDao.getUserAccount(username, domainId);
> -            UserAccountVO user = 
> _userAccountDao.findById(userAccount.getId());
> -            if (user != null) {
> -                if ((user.getState().toString()).equals("enabled")) {
> -                    if (!isInternalAccount(user.getType())) {
> +            if (userAccount != null) {
> +                if 
> (userAccount.getState().equalsIgnoreCase(Account.State.enabled.toString())) {
> +                    if (!isInternalAccount(userAccount.getType())) {
>                          //Internal accounts are not disabled
> -                        int attemptsMade = user.getLoginAttempts() + 1;
> +                        int attemptsMade = userAccount.getLoginAttempts() + 
> 1;
>                          if (attemptsMade < _allowedLoginAttempts) {
>                              updateLoginAttempts(userAccount.getId(), 
> attemptsMade, false);
>                              s_logger.warn("Login attempt failed. You have " 
> + ( _allowedLoginAttempts - attemptsMade ) + " attempt(s) remaining");
>                          } else {
>                              updateLoginAttempts(userAccount.getId(), 
> _allowedLoginAttempts, true);
> -                            s_logger.warn("User " + user.getUsername() + " 
> has been disabled due to multiple failed login attempts." +
> +                            s_logger.warn("User " + 
> userAccount.getUsername() + " has been disabled due to multiple failed login 
> attempts." +
>                                      " Please contact admin.");
>                          }
>                      }
>                  } else {
> -                    s_logger.info("User " + user.getUsername() + " is 
> disabled/locked");
> +                    s_logger.info("User " + userAccount.getUsername() + " is 
> disabled/locked");
>                  }
> +            } else {
> +                s_logger.warn("Authentication failure: No user with name " + 
> username + " for domainId " + domainId);
>              }
>              return null;
>          }
>

This is a bit of information leakage? I mean we are essentially
telling someone what usernames don't exist, which by process of
elimination means that folks can determine what user accounts are
valid.

Reply via email to