pentaho/pentaho-kettle · error · KettleDatabaseException

UserInfo.Error.IncorrectPasswortLogin

Error message

UserInfo.Error.IncorrectPasswortLogin

What it means

loadUserInfo() validates its inputs before touching the repository. If the IUser object or the login string is null/empty, it throws a KettleDatabaseException wrapping the localized message 'UserInfo.Error.IncorrectPasswortLogin'. It signals that the caller supplied insufficient arguments to even attempt a user lookup, not that authentication failed.

Solutions

  1. Ensure the login string is non-null and non-empty before calling loadUserInfo
  2. Instantiate a valid IUser (e.g. new UserInfo()) instead of passing null
  3. Check where the login comes from (config, dialog, variable) and validate/fail fast if it is blank

Example fix

// before
repository.userDelegate.loadUserInfo(null, userField.getText(), passField.getText());
// after
String login = userField.getText();
if (login == null || login.isEmpty()) { throw new KettleException("Login is required"); }
repository.userDelegate.loadUserInfo(new UserInfo(), login, passField.getText());
Defensive patterns

Strategy: validation

Validate before calling

if (userInfo == null) throw new IllegalArgumentException("userInfo is required");
if (login == null || login.trim().isEmpty()) throw new IllegalArgumentException("login is required");

Type guard

boolean isBlank(String s) { return s == null || s.trim().isEmpty(); }

Try / catch

try { repo.userDelegate.loadUserInfo(user, login, pass); } catch (KettleDatabaseException e) { handleMissingArgs(e); }

Prevention

When it happens

Trigger: Calling repository.userDelegate.loadUserInfo(userInfo, login, passwd) (or the repository-level convenience wrapper that delegates to it) with userInfo == null, login == null, or an empty login string.

Common situations: Reading user name/password from a properties file, environment variable, or job parameter that was never set; UI code passing a blank login field; refactoring that forgets to instantiate the IUser object before loading.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/d3cf97a5ff804912. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryUserDelegate.java:86

      } else {
        throw new KettleDatabaseException( BaseMessages.getString( PKG, "UserInfo.Error.UserNotFound", login ) );
      }
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( BaseMessages.getString( PKG, "UserInfo.Error.UserNotLoaded", login, "" ), dbe );
    }
  }

  /**
   * Load user with login from repository and verify the password...
   *
   * @param rep
   * @param login
   * @param passwd
   * @throws KettleException
   */
  public IUser loadUserInfo( IUser userInfo, String login, String passwd ) throws KettleException {
    if ( userInfo == null || login == null || login.length() <= 0 ) {
      throw new KettleDatabaseException( BaseMessages.getString( PKG, "UserInfo.Error.IncorrectPasswortLogin" ) );
    }

    try {
      loadUserInfo( userInfo, login );
    } catch ( KettleException ke ) {
      throw new KettleAuthException( BaseMessages.getString( PKG, "UserInfo.Error.IncorrectPasswortLogin" ) );
    }
    // Verify the password:
    // decrypt password if needed and compare with the one
    String userPass = Encr.decryptPasswordOptionallyEncrypted( passwd );

    if ( userInfo.getObjectId() == null || !userInfo.getPassword().equals( userPass ) ) {
      throw new KettleAuthException( BaseMessages.getString( PKG, "UserInfo.Error.IncorrectPasswortLogin" ) );
    }
    return userInfo;
  }

  public void saveUserInfo( IUser userInfo ) throws KettleException {

View on GitHub (pinned to f3058517a1)