pentaho/pentaho-kettle · error · FTPException
JobFTPPUT.SocksProxy.IncompleteCredentials
JobFTPPUT.SocksProxy.IncompleteCredentials
Error message
JobFTPPUT.SocksProxy.IncompleteCredentials
What it means
The entry throws FTPException 'SocksProxy.IncompleteCredentials' (message key JobFTPPUT.SocksProxy.IncompleteCredentials, interpolated with host and entry name) when SOCKS proxy credentials are half-specified: a username without a password, or a password without a username. Both must be provided together, or neither.
Solutions
- Provide both SOCKS proxy username and password in the job entry settings.
- If the password uses a variable, ensure it resolves to a non-empty value at runtime.
- Remove both username and password if the proxy requires no authentication.
- Confirm the entry name referenced in the error to locate the offending job entry in the job.
Example fix
// before socksProxyUsername = "ftpuser"; socksProxyPassword = ""; // password missing -> exception // after socksProxyUsername = "ftpuser"; socksProxyPassword = "s3cret"; // or clear username too for anonymous proxy
Defensive patterns
Strategy: validation
Validate before calling
boolean hasUser = !Utils.isEmpty(entry.getSocksProxyUsername()); boolean hasPass = !Utils.isEmpty(entry.getSocksProxyPassword()); if ( hasUser ^ hasPass ) { throw new IllegalArgumentException("SOCKS proxy username and password must both be set or both be empty"); } Try / catch
try { result = runFtpPut(); } catch (FTPException e) { if ( e.getMessage().contains("IncompleteCredentials") ) { failJob("SOCKS proxy credentials incomplete"); } else { throw e; } } Prevention
- Set username and password together when the SOCKS proxy requires auth.
- Ensure credential variables resolve to non-empty values at runtime.
- Use Encr-encrypted password storage to avoid accidental clearing.
When it happens
Trigger: Executing the FTP Put entry with socksProxyUsername non-empty and socksProxyPassword empty (or vice versa) while a SOCKS proxy host is configured.
Common situations: Password stored as a variable that doesn't resolve; credentials pasted only partially; password cleared after a security policy change; variable-only password empty in the execution environment.
Related errors
- JobEntryFTP.SocksProxy.IncompleteCredentials
- JobEntryFTP.SocksProxy.PortMissingException
- JobEntryFTPDelete.SocksProxy.IncompleteCredentials
- JobEntryFTPDelete.SocksProxy.PortMissingException
- JobFTPPUT.SocksProxy.PortMissingException
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/2820c2e4add16204.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/put-a-file-with-ftp/impl/src/main/java/org/pentaho/di/job/entries/ftpput/JobEntryFTPPUT.java:845
if ( log.isDetailed() ) {
logDetailed( BaseMessages.getString( PKG, "JobFTPPUT.Log.SetEncoding", controlEncoding ) );
}
// If socks proxy server was provided
if ( !Utils.isEmpty( socksProxyHost ) ) {
// if a port was provided
if ( !Utils.isEmpty( socksProxyPort ) ) {
FTPClient.initSOCKS( environmentSubstitute( socksProxyPort ), environmentSubstitute( socksProxyHost ) );
} else { // looks like we have a host and no port
throw new FTPException( BaseMessages.getString(
PKG, "JobFTPPUT.SocksProxy.PortMissingException", environmentSubstitute( socksProxyHost ) ) );
}
// now if we have authentication information
if ( !Utils.isEmpty( socksProxyUsername )
&& Utils.isEmpty( socksProxyPassword ) || Utils.isEmpty( socksProxyUsername )
&& !Utils.isEmpty( socksProxyPassword ) ) {
// we have a username without a password or vice versa
throw new FTPException( BaseMessages.getString(
PKG, "JobFTPPUT.SocksProxy.IncompleteCredentials", environmentSubstitute( socksProxyHost ),
getName() ) );
}
}
return ftpClient;
}
// package-local visibility for testing purposes
FTPClient createFtpClient() {
return new PDIFTPClient( log );
}
@Override
public boolean evaluates() {
return true;
}
View on GitHub (pinned to f3058517a1)