edtFTPj/PRO Revision History

Version Description
Version 8.1.0
(28 November, 2024)
  • Add support for ssh-ed25519 host keys and client keys.
Version 8.0.0
(5 August, 2024)
  • Add support for TLS 1.3.
Version 7.7.0
(2 May, 2024)
  • Add support for diffie-hellman-group16-sha512 & diffie-hellman-group18-sha512 to SSH/SFTP.
  • Add workaround for server bug in RSA 256 and RSA 512 public keys that are sent.
  • Replace TLS_DHE_RSA_WITH_AES_256_CBC_SHA384 with TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 for TLS.
  • Fix issue for TLS 1.2 re incorrect CertificateVerify hash being returned, which caused connectivity problems with some algorithms.
Version 7.6.0
(13 November, 2023)
  • Add support for SCP to the AsycnFileTransferClient and SecureFileTransferClient.
  • Fix bug in dirDetails() where user home directory is root.
  • Fix timing issue with executeCommand in SSH.
  • Fix bug in RSA 256 and RSA 512 key reading.
Version 7.5.0
(7 July, 2023)
  • Add support for the new PuTTY private key format (v3).
  • Add support for proxy settings in scripting.
  • Fix bug in SFTP event notifications. The bytesTransferred method reports the incorrect filename for multiple transfers.
  • Fix bug in recursive directory deletes. It was failing for directories with multiple levels.
  • In the multi-protocol client, set the default encoding for the control connection to UTF-8.
Version 7.4.0
(10 May, 2023)
  • Allow FXP_READ to return less bytes than requested if not pipelined downloads.
  • Improve executeCommand to include error output.
  • Fix resume bug. Resume doesn't work properly for certain servers, as the code gets the attribute size of the partially upload file from the server and that's returned as zero. Much safer just to supply the resume size which we know.
  • Fix SSLSocket close() issue (potential memory leak).
Version 7.3.0
(27 October, 2022)
  • Add support for rsa-sha2-256 and rsa-sha2-512 host key authentication for SSH/SFTP.
  • Add support for rsa-sha2-256 and rsa-sha2-512 for client public key authentication for SSH/SFTP.
Version 7.2.4
(4 October, 2022)
  • Fix "Invalid hash" error in TLS 1.2.
  • Add SHA-512/RSA to TLS 1.2 signature_algorithms list.
Version 7.2.3
(29 March, 2022)
  • Fix bug in ECDSA public key encoding (which can cause public key authentication failures with OpenSSH servers).
Version 7.2.2
(4 March, 2022)
  • Change host public key checking so entire known_hosts file is checked instead of failing when a public key entry matching the hostname is found (and is a mismatch).
Version 7.2.1
(15 February, 2022)
  • Less stringent checks changing directory. Some customers have reported failures with upgraded EFT servers when changing directory (File not found errors).
  • In SFTP, FTPFile.getPath() now returns the full path (and is consistent with FTP).
Version 7.2.0
(6 October, 2021)
  • Add setMaxQueuedReadRequests() to SSHFTPClient & SecureFileTransferClient. This allows disabling/enabling of queued read requests in SFTP.
  • Add AES256-CTR support to the new OpenSSH private file format reader. This is the new default algorithm.
Version 7.1.0
(16 June, 2021)
  • Add support for reading private keys stored in the new proprietary OpenSSH format.
  • Add diffie-hellman-group14-sha256 to SSH key exchange.
  • Fix bug with preferred host key algorithm and known_hosts interaction. Now combines available known_host algorithms with the preferred order that is previously set.
Version 7.0.0
(26 February, 2021)
  • Add support for ECDSA in SSH/SFTP. Includes ECDSA key exchange algorithms, ECDSA host keys and ECDSA user keys.
Version 6.2.0
(19 February, 2021)
  • Add hmac-sha256 and hmac-sha512 aliases for SFTP.
  • Workaround for SFTP servers that return a 0 file size, resulting in 0 size downloads.
  • Add fix for SFTP servers that cannot cope with pipelined downloads, resulting in downloaded files that are corrupted.
  • Fix key re-exchange issue.
Version 6.1.0
(6 July, 2020)
  • Download optimisation for high latency connections. Multiple read requests are now bundled together to reduce read times.
  • Fix bug in TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384. An SSLPrematureCloseException was received when this cipher suite was selected. Add SHA384 to signature/algorithm pairs in TLS 1.2.
  • Better logging of SSH channel open failures.
Version 6.0.0
(23 January, 2020)
  • Add support for TLS GCM ciphers:
    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
    TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
    TLS_RSA_WITH_AES_128_GCM_SHA256,
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
    TLS_RSA_WITH_AES_256_GCM_SHA384,
    TLS_DHE_RSA_WITH_AES_256_CBC_SHA384
  • Remove redundant TLS ciphers. If they are explicitly used in code they need to be removed and the code recompiled.
Version 5.3.2
(22 May, 2019)
  • Add support for setting SSLFTPValidator to SecureFileTransferClient.
  • Move BouncyCastle classes to a new namespace to avoid conflicts.
  • Improve handling of exists/changeDirectory.
  • Update with new JCE certificate. Note that this jar will only authenticate properly on Java releases 8u121, 7u131, 6u141 and later, as well as any OpenJDK release.
Version 5.3.1
(11 October, 2018)
  • Fix bug that results in NullPointerException in enableCipherSuites when using SecureFileTransferClient.
Version 5.3.0
(19 September, 2018)
  • Added elliptic curve cipher suites (TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA).
Version 5.2.6
(3 August, 2018)
  • Fix HTTP proxy code so it works with z/OS.
  • Ignore certificate load failures from unsupported certificate types when reading root certificates file.
  • SecureFileTransferClient and ScriptEngine now send PROT P for implicit mode FTPS as this is required by some servers, including Filezilla. If it is not supported by the server, the error is ignored.
  • AdvancedSSHSettings now has a setter for the validator, so SSHFTPValidator can now be replaced by a custom validator.
Version 5.2.5
(1 May, 2018)
  • Convert Developer's Guide to new HTML format.
  • Add ability to set a minimum TLS version.
  • Fix bug where Java connection pool opened unlimited connections (happened when deleting an entire directory).
  • Fix bug in SSHFTPOutputStream (Failed when the remote file being written to did not exist previously).
  • Send client SSH version string immediately on connection to the server (instead of waiting for the server to send its version string).
  • Minimum Java version supported is now 1.5.
Version 5.2.4
(27 October, 2017)
  • Modify reading of FTP replies to trim garbage characters prior to reply code.
  • Fix for SSH/SFTP server sending back corrupt file attribute messages. Now ignores errors and sets defaults instead of failing.
  • Deprecate use of SSH_MSG_KEX_DH_GEX_REQUEST_OLD in SSH/SFTP - some servers fail the key exchange otherwise.
  • Fix for keepAlive() for FTP servers that forbid NOOP.
  • Fix bug in dirDetails() where getPath() was not including the filename.
Version 5.2.3
(12 May, 2017)
  • Another TLS 1.2 fix for servers that only accept SHA256 signature algorithms.
Version 5.2.2
(8 March, 2017)
  • Fix TLS 1.2 issue - now sends the SignatureAlgorithms extension if TLS 1.2 is one of the protocol versions presented by the client. Apparently required for Microsoft IIS.
Version 5.2.1
(25 November, 2016)
  • Fix bug in TLS 1.2 where an error message "Unsupported hash or sig" is logged.
  • Fix ProFTPClient bug where proxy functionality was disabled.
Version 5.2.0
(9 November, 2016)
  • Add support for some SHA-256 ciphers in TLS: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256.
  • Fix DHE (Diffie-Helman Ephemeral) cipher usage for TLS 1.2.
  • Fix memory leak in SecureFileTransferClient.
Version 5.1.0
(11 July, 2016)
  • IPv6 now supported for FTPS as well as FTP.
  • setDetectTransferMode is now disabled by default for SFTP (i.e. it is now doing what the Javadoc says).
  • In TLS 1.2 the optional list of signature/hash combinations is now sent to the server, and RSA/SHA256 is now included.
Version 5.0.1
(4 March, 2016)
  • Added setMaxSSLVersion.
  • Fixed bug in TLS 1.2 client certificate verification.
  • Fix to dir list - ignore socket creation exception if empty directory.
Version 5.0.0
(14 January, 2016)
  • Now supports TLS 1.2.
  • Now uses the default OS settings for SO_SNDBUF and SO_RCVBUF unless explicitly set by setNetworkBufferSize().
  • Fix bug with setDisableChModAfterCreateDir().
Version 4.8.1
(4 September, 2015)
  • Support for SHA-384 signed certificates.
  • Added dirDetailsM() for listing using MLSD to SSLFTPClient.
  • Removed dependence on java.security.Security.getAlgorithmProperty (which is deprecated).
Version 4.8.0
(10 July, 2015)
  • Added new HMACS for SSH/SFTP: hmac-sha2-512, hmac-sha2-256.
  • Added new key exchange algorithm for SSH/FTP: diffie-hellman-group-exchange-sha256.
  • Added support for reading PKCS#8 formatted private keys in client certificates.
  • Fix executeCommand so that it doesn't fail if remote process writes to stderr but succeeds.
  • MVSFileParser fixes.
  • Fix NullReferenceException in FTP passive mode.
Version 4.7.0
(23 January, 2015)
  • TLS 1.1 implemented (SSL 3.2).
  • Set MAX_CERTIFICATE_CHAIN_LENGTH to 4 by default.
  • Fixed scripting engine bug to ensure quit() is called for IOExceptions..
Version 4.6.2
(29 October, 2014)
  • SSL 3.0 is now disabled by default for FTPS. This was motivated by the POODLE vulnerability in SSL 3.0.
  • Added setParallelWriteMode() to AdvancedSSHProperties (so it can be disabled).
Version 4.6.1
(2 July, 2014)
  • Fixed bug with ProFTPClient and recursive transfers ("hostname can't be null" error).
  • Documentation fixes.
Version 4.6.0
(26 May, 2014)
  • Set the server supplied long name in SFTP as the raw string in FTPFile rather than constructing it.
  • Changed transfers so that connection and handshake in passive mode is done after sending the command and prior to reading the reply. We found a server that requires this.
  • Added support for SHA-256/RSA/PKCS#1 certificates.
  • Added SSHClient ConfigFlags to AdvancedSSHSettings so they are available in SecureFileTransferClient.
  • Renew JCE certificate for another 5 years.
  • DeleteOnFailure now set to false by default.
  • Fixed bug in FTPInputStream/SSHFTPInputStream (which was causing the connection in SecureFileTransferClient to not be freed after closing stream).
  • Make reading of FTP replies more robust (copes better with nonsense).
  • Fix rekey failure with Globalscape.
Version 4.5.0
(1 July, 2013)
  • Improve performance of SecureFileTransferClient in retrieving connections from pool.
  • SSLFTPClient.setClientCertificate now allows a certificate chain to be supplied.
  • Add SSHFTPKeyException.
  • Don't load certificates with SHA384withECDSA public keys in SSLFTPCertificateStore (instead of failing).
  • Fix bug in reconnect() method for implicit mode (was calling auth()).
  • Fix SSLCertificateVerify from throwing a ClassCastException.
Version 4.4.0
(19 December, 2012)
  • Added setNetworkBufferSize() to SecureFileTransfer client and SSHFTPClient
  • .
  • Allow SOCKS5 authentication without username and password.
  • Improved performance of binary input streams. Implement skip(), mark() and reset() for FTPInputStream and SSHFTPInputStream.
  • Catch tryLock() exceptions and ignore them. Add flag to avoid using tryLock().
  • Fixed setRemotePort order bug for SFTP. If setRemotePort was called before setProtocol(Protocol.SFTP) then the port was reset to 22.
  • Increased SSH minimum window size to 32K, up from 1K as this occasionally caused problems.
Version 4.3.0
(8 October, 2012)
  • Fixed hostname checking with FTPS when presented with a wildcard certificate.
  • Added diffie-hellman-group14-sha1 to SSH key exchange algorithms.
  • Fixed invalid host signature which can occur when rekeying in SSH if a non-standard port is used.
  • Fix to cope with bug in Maverick server library when listing directories - Maverick returns empty SSH_FXP_NAME messages which are now treated as if they were SSH_FXP_STATUS messages.
  • Add existsDirectory method to SecureFileTransferClient.
Version 4.2.0
(29 May, 2012)
  • Added support for aes128-ctr, aes192-ctr and aes256-ctr ciphers to SFTP.
  • Fixed bug in multiple put & get methods where if the full remote path was supplied, it ended up in the parent.
Version 4.1.0
(13 February, 2012)
  • Added resumeNextDownload(long) to SSHFTPClient, SSLFTPClient and FTPClient so that partial downloads can be done.
  • Added isControlSecure() method to SSLFTPClient to determine if the control connection is secure.
  • Oops. Put hmac-sha1 back as the first HMAC chosen.
  • Apply timeout to message store retrieval on connect().
Version 4.0.0
(30 November, 2011)
  • Added support for zlib@openssh.com compression (delayed compression).
  • Algorithm settings for SSH now apply only for the particular SSHFTPClient or SecureFileTransferClient instance that they are set on (previously were static properties). WARNING: if you are using the enable/disable methods on SSHFTPAlgorithm explicitly, this is a breaking change!
  • Added support for FTPS servers that require logging in prior to PBSZ/PROT.
  • Added 'type' command to the script engine.
  • Apply timeout to getting a connection from the connection pool.
  • Deprecated SSLFTPClient constructors now use a non-zero default timeout (which is the same as the default constructor timeout).
  • Add setCheckDirReadableForChDir() to SSHFTPClient.
  • Fix so that IBM JVMs support AES encrypted private keys.
Version 3.9.1
(23 August, 2011)
  • Fix so FTP shell supports filenames with spaces (in double quotes).
  • Fixed problem where bytesTransferred isn't called at completion of transfer in SecureFileTransferClient for small files.
  • Minimize logging when waiting in loop for window adjust from server, and throw exception if window stopped.
Version 3.9.0
(19 July, 2011)
  • Added SSHFTPClient.fileDetails().
  • Added lcd (local directory change) to FTP scripting.
  • Added support for GeneralizedTime in ASN.1 certificate parsing (fixes "Not a UTC_TIME" exception).
  • Fixed integer overflow problem in file upload when the SSH remote window size is greater than MAX_INT.
  • Made local channel counter static so channel number doesn't restart at 0.
  • Change obfuscator (now Proguard), and changed obfuscation so that obfuscated class names are different independent of case (as having two names that are the same other than case doesn't work in JBoss, which is buggy)
Version 3.8.1
(24 May, 2011)
  • Added support for using ACCT in SecureFileTransferClient and FileTransferClient.
  • SSHFTPClient.delete() now throws an exception if a directory is supplied.
  • Fixed SSHFTPClient.keepAlive() so it gets a response from the server.
  • Removed 2GB resume limit from SFTP.
Version 3.8.0
(7 April 2011)
  • Added support for AES encrypted private keys (would receive an error message like 'Algorithm AES-128-CBC not recognized' previously).
  • Added support for multiple AVAs of each type in SSL/TLS certificates. Resolves exception thrown parsing certificates "Multiple AVAs found in an RDN".
  • SFTP parallel mode fix to eliminate locking.
  • importDefaultKeyStore() now uses "javax.net.ssl.trustStore" property to locate the key store, and if not found tries lib/security/jssecerts and then lib/security/cacerts.
  • FTPFile.getPath() should not include the filename, only the directory, for all protocols. This includes FTPFile objects returned from dirDetails() and fileDetails().
  • Fixed bug in MLST parser. FTPFile path no longer includes the filename to make consistent with dirDetails().
  • If MLST not supported fileDetails() now falls back to SIZE and MDTM.
  • Return an empty array of features if FEAT returns no features (but is implemented by the server). Tweak array so only actual features are returned.
Version 3.7.0
(7 February 2011)
  • Added support for diffie-hellman-group-exchange-sha1 for SSH/SFTP.
  • Added SSHFTPAlgorithm.CIPHER_ARCFOUR.
  • Fixed bug re reading multi-line replies.
  • Connection pool mods to check a connection is valid once removed from pool.
  • Fix keepAlive() in SSHFTPClient so that it throws an exception when called if disconnected.
Version 3.6.1
(19 January 2011)
  • Fixed resume bug (introduced in 3.6.0).
  • Trim spaces in front of FTP reply codes.
  • Added OS/400 directory listing parser.
  • Added setRemoteEOL() to AdvancedSSHSettings.
  • Added changeIntoPathDirectory(boolean) to prevent the default behaviour of changing into the directory if a remote path is supplied instead of a filename.
Version 3.6.0
(21 December 2010)
  • Add arcfour to list of supported ciphers for SSH/SFTP.
  • Make Blowfish the default cipher for SSH/SFTP.
  • Ensure that "." and ".." don't appear in listings that use wildcards.
  • Added RollingFileAppender.
  • Added a system property to add a prefix to all edtFTPj/PRO loggers (for use with log4j).
  • Tweaks to UnixFileParser for some unusual formats.
  • Don't throw an exception if SSH_MSG_IGNORE message body has an invalid length.
Version 3.5.0
(16 September, 2010)
  • Fix bug where the attributes sent with FXP_OPEN were being corrupted, potentially resulting in bizarre timestamps on remote files.
  • In SSHFTPValidator, include hashed host names in getKnownHostKeys() and getKnownHosts().
  • Improve IPv6 support.
  • Fix problem with directory listings when there is permission problems.
  • Fix bug with wildcard directory names and symlink names.
Version 3.4.1
(1 July, 2010)
  • If FXP_OPEN fails don't send attributes (fixes potential permissions problem when uploading a new file introduced in 3.4.0).
  • Permit 232 code to be returned from USER command.
Version 3.4.0
(9 June, 2010)
  • Add ability to abort listings when using a callback.
  • Fixed bug in reading extended file attributes (see 3.2.0 - it wasn't fixed there).
  • Fixed potential SFTP hang in State.waitForState().
  • Fixed Android "HeapWorker is wedged" problem in SftpFileInputStream.finalize().
  • Fix "Unsupported operation" error when sending FXP_OPEN (don't send attributes).
Version 3.3.0
(29 April, 2010)
  • Add callback allowing each entry returned from dirDetails and listDirectory to be processed one by one, without creating a list of all entries. Useful for very large listings where memory could be a problem.
  • Fixed bug where when autoPassiveIPSubstitution is used with proxies, it can result in the incorrect IP address being used.
  • Fix CRC mismatch bug because of leading zeros in CRC.
  • Add 'set acct' to ScriptEngine so that the ACCT command can be used.
  • Mask argument to ACCT in logging.
  • Fix progress monitor bug in SecureFileTransferClient.
Version 3.2.0
(31 March, 2010)
  • New JCE code signing certificate from Sun valid for 5 years.
  • Fixed resume download bug where if resume() is called twice, firstly on an existing file, and then when there is no local file, the second download also resumes.
  • Fixed SFTP problem with hang in ChannelDataWindow.waitForWindowSpace() when an exception had been thrown in the message transport.
  • Extra SSHFTPClient authentication method permitting order of publickey then password auth to be swapped.
  • Added SSHFTPClient.setAuthenticationChangePassword, allowing the password to be changed while authenticating - easier to user than using PasswordChanger.
  • Added proxy package Javadoc to distribution.
  • Fixed SFTP bug where extended attributes weren't read for SSH_FXP_NAME.
  • Add Information Exchange listing parser.
  • Add Netware listing parser.
  • Scripting language now allows the parser to be explicitly set.
Version 3.1.2
(6 November, 2009)
  • Added support for AES encrypted private keys (would receive an error message like 'Algorithm DES-EDE3-CFB not recognized' previously).
  • Added support for client authentication in FTPS for SecureFileTransferClient.
  • Fix end of line terminator bug in FTPInputStream. If Unix EOL terminators were read, they were stripped, which is incorrect.
  • Name resolution is not attempted when using proxies.
  • Implemented getServerCertificate() for implicit mode FTPS.
  • Fixed bug where a non-public certificate exception was being thrown.
  • Don't throw an exception if SSH_MSG_IGNORE message body fails to be parsed.
Version 3.1.1
(8 September, 2009)
  • Remove state checks in signature classes (state should be updated and checked in java.security.Signature, and it appears that on some IBM JVMs, the state variable is not correctly updated). If state checks are removed in subclasses it all works fine.
  • Added support for CCC in SecureFileTransferClient.
  • Added support for setting the certificate common name in SecureFileTransferClient.
  • EventListener now called correctly in SecureFileTransferClient for downloadMultiple & uploadMultiple. Fixed problems with bytesTransferred.
  • SSHFTPClient now supports FTPProgressMonitorEx.
  • Fixed bug in mput() where if the remote dir was ".", an unnecessary CDUP was performed.
  • Fixed bug in FTPClient where the PORT command sent 0.0.0.0 to the server.
  • If launching SFTP subsystem fails, tries manual exec.
  • Fixed NullPointerException being thrown from SshFxpOpen.constructByteArray during a put, which occurred when a server returned a null permissions string from FXP_STAT.
Version 3.1.0
(23 July, 2009)
  • Significant speed improvements for SFTP uploads.
  • Added support for HTTP proxies for all protocols.
  • Improved support for SOCKS proxies for all protocols.
  • Now permits banner preceding remote SFTP version string.
  • Made exists() method more reliable for FTP/FTPS.
  • Note - now supports Java 1.4 and above.
Version 3.0.3
(25 June, 2009)
  • Added downloadURLStream and downloadURLFile.
  • Added setPrivateKeyInputStream and setPrivateKeyBytes to AdvancedSSHSettings.
  • Fixed problem whereby FTP server errors such as 452 are accepted in non-strict reply checking mode.
  • Made auto passive IP substition on by default.
  • Fixed problem whereby an SFTP server was not appending because of the flags sent.
  • Throw an exception in SFTP if creating a directory that already exists.
  • Now throws FTPTransferCancelledException when uploads are cancelled in FTP/FTPS.
  • Minor file parsing bug fixes.
Version 3.0.2
(11 May, 2009)
  • Modify changing directory so that SSH_FXP_REALPATH failures don't fail the operation if the directory does exist.
  • Fix control channel encoding bug for FTPS and SFTP.
Version 3.0.1
(17 April, 2009)
  • Add better methods to SSHFTPValidator for obtaining host public keys.
  • Add support for SSH_MSG_USERAUTH_PASSWD_CHANGEREQ, i.e. dynamically changing the password on the SSH server.
  • Add ability to intercept and modify the server response to the PASV command (so that a different host or port number can be substituted).
  • Fix CRC comparison bug re file integrity checking.
  • Fix certificate parsing code to allow zero length encoded strings.
Version 3.0.0
(20 March, 2009)
  • Add support for MODE Z for FTP and FTPS transfers, enabling on the fly compression when connecting to servers supporting MODE Z.
  • Add integrity checking for FTP and FTPS transfers when connecting to servers that support XCRC or SIZE.
  • Add 'configflags' as a variable to the script engine so that the SSLFTPClient configuration flags can be applied.
  • Add ability to throttle transfer rate to a set maximum bytes/sec.
Version 2.1.3
(13 February, 2009)
  • Ignore errors from FX_STAT while listing directories. Some directories on some servers (such as '/') seem to permit listing but return "File does not exist" when FX_STAT-ed.
  • Restrict size of FXP_WRITE data block to max packet size.
  • Fix SecureFileTransferClient hang when connect() fails in some situations.
  • Fix SecureFileTransferClient hang when uploadByteArray() fails.
  • Make directory listing in SFTP smarter (if a composite path is supplied).
  • Fix for Korean months in UnixFileParser.
  • Tweaks to retry functionality.
Version 2.1.2
(25 November, 2008)
  • Fixed problem where server replies were ended with \n rather than \r\n (which is standard). This caused problems initially connecting. Now permits \n to end lines in server replies.
Version 2.1.1
(18 November, 2008)
  • ScriptEngine now correctly returns 0 exit status for successful execution, 1 otherwise.
  • Added support for unicode ASN.1 string type in SSL certificates (solves "Not a PrintableString or IA5String or UTFString" error)
  • FTPException.toString() now includes the reply code if it exists.
  • Fixed SFTP problem where client was hanging transfering a file to WinSSHD. This was due to the client trying to send more data than was available in the server's data window. If the server increased the window but it was still less than the size of the data block, the client hung.
  • Fixed problem where server replies had embedded \r chars. This meant it was wrongly thought that the reply was complete, when in fact more was to come (resulting in out of order replies further along).
Version 2.1.0
(24 September, 2008)
  • Fix OpenSSH public key parsing so that comments are optional, not required.
  • Now supports OpenSSH private key files encrypted using DES-EDE3-CFB.
  • Added ability to disable rekeying after 1 GB for SFTP.
  • Fixed bug in SSHFTPClient.dirDetails() where the permissions string was not being returned.
  • Added setPermissions() to SecureFileTransferClient and AsyncFileTransferClient.
  • Added 'quote' and 'site' commands to scripting language.
  • Fixed bug where control socket isn't closed if connect succeeds but initial commands fail, or handshake fails.
  • Refactored directory listing parsing.
  • Add FTPFile.isFile().
  • Fixed bug in FTPInputStream.read() and SSHFTPInputStream.read().
  • Fix bug in Logger where edtftp.log.level property is not set correctly.
  • Print out CodeSource in logging.
  • Fix bug applying umask to permissions in SFTP.
  • Use FXF_TRUNC when creating a new file (some servers insist on it).
  • Add DISABLE_CHMOD_AFTER_CREATE_DIR config flag for SSHFTPClient, for disabling setting permissions on a directory that has just been created (on rare occasions problematic).
  • For resuming uploads, now send SIZE prior to establishing data socket.
  • Implement automatic retry for FTP/S transfers.
Version 2.0.1
(13 June, 2008)
  • Fixed bug where any strings added to the FileNotFoundStrings, DirectoryEmptyStrings and TransferCompleteStrings instances obtained via getAdvancedFTPSettings().setFileNotFoundMessages() etc were not applied.
  • Now includes an FTP command shell, that allows real-time development of FTP scripts for FTPS, SFTP and FTP. Connect to and control any FTP server on the command-line.
  • Added methods to save the known_hosts data to file.
  • Added support for OpenSSH 4.0 hashed hostnames in known_hosts file.
  • By default port numbers are now included in entries in known_hosts file if they are non-standard (i.e. not port 22) in the format [hostname]:port.
Version 2.0.0
(23 May, 2008)
  • SecureFileTransferClient released. Supports all protocols in a single class, and permits switching protocols with a single method call. Supports multiple, simultaneous transfers via FTP connection pools.
  • AsyncFileTransferClient released. Supports background transfers via a comprehensive asynchronous API. Permits multi-threaded performance without multi-threaded programming.
  • Added ARC4 alias for RC4.
  • In active mode, cycles through available ports if socket creation fails for a transfer.
Version 1.5.7
(3 April, 2008)
  • Fixed potential hang when SSH_MSG_USERAUTH_BANNER arrives during authentication AND the server terminates the connection.
  • Added support for PuTTY private keys for SFTP public key authentication.
  • Added FTPConnectionClosedException, thrown when a 421 reply is received.
  • Added a new setAuthentication() method to SSHFTPClient that allows first publickey then password authentication.
  • Added SCPClient with basic get() and put() methods.
  • Added executeCommand().
  • "Unexpected null reply" error message changed to a more informative message.
Version 1.5.6
(14 January, 2008)
  • Reading of known_hosts file now logs a warning for unrecognized key formats and continues reading the file (rather than throwing an exception).
  • Add setListenOnAllInterfaces(boolean) flag to stop active mode listening on all interfaces (all interfaces is the default).
  • Fix bug whereby supplying a single argument to the ScriptEngine (i.e. the script) failed.
  • Add dataports variable to scripting, so that an active port range can be set in a script.
  • Add 'connect' as a synonym for 'open' in the scripting language.
  • SSH fix to ignore failed chmod after upload - fix to this fix from 1.5.1.
Version 1.5.5
(8 November, 2007)
  • In dirDetails() now English is always tried first for date parsing locale, followed by the default locale. Other locales can also be specified. Also, date parsing exceptions are no longer propagated - the relevant field is now set to null.
  • For SFTP, made 3des-cbc the default cipher (instead of Blowfish).
  • Support for FXP server-to-server transfers added for FTP.
  • Added DISABLE_WAIT_FOR_CHANNEL_CLOSE config flag to SSHFTPClient, so that waiting for an acknowledgement from the server for a channel close request can be skipped.
  • Fix bug whereby server messages not logged from the ScriptEngine when an unexpected reply is sent.
  • Fix incorrect line terminator in ScriptEngine output.
  • Add -c option to ScriptEngine so that a separate configuration file can be used for 'set' commands.
  • Fix bug in SSHFTPClient.put(InputStream srcStream) - upload count was not incremented.
  • Permit close() to be called multiple times on FTPInput/Outputstream and SSHFTPInput/Outputstream.
Version 1.5.4
(15 August, 2007)
  • ScriptEngine.executeScript() now returns ScriptResult.
  • Fix dirDetails() bug whereby an incorrect separator was used when setting FTPFile.setPath()
  • Fix bug which could cause an exception in SSLFTPCertificateStore.exportKeyStore().
  • Fix bug arising when certificate common name checking is disabled (FTPS).
  • Fix SFTP bug with RSA private keys - authentication would fail randomly.
  • Add ScriptResult class, which is returned from ScriptEngine.executeScript().
  • Add client and server validation to the ScriptEngine for FTPS.
Version 1.5.3
(18 July, 2007)
  • Ignore FTPException from size() if resume is being tried for an upload (which occurs if the file does not exist).
  • Added SSHFTPInputStream and SSHFTPOutputStream.
  • Added setForceUniqueNames() so that STOU always gets used.
  • Fix in parsing code for Connect:Enterprise UNIX.
  • Added accessors for message fragment collections used in parsing server messages for FTP/S.
Version 1.5.2
(31 May, 2007)
  • Added flag to Logger permitting thread names to be prepended to Logger name.
  • Fixed "The host signature is invalid" error that can occur for some SFTP servers.
  • Improved connected() method for JRE 1.4+.
  • Change dirDetails() to cope with SYST unsupported.
  • Added ability to provide multiple alternative host-names to check a server certificate's Common Name (CN) field against.
Version 1.5.1
(1 May, 2007)
  • Minor bug fixes to scripting engine.
  • ASCII mode can now read Unix or Windows text files on any platform.
  • SSH fix to cope with non-standard server public keys being sent. Additional logging.
  • SSH fix to ignore failed chmod after upload (instead a warning is logged).
  • SSH fix where Unix paths on Windows meant the current dir was prepended to the Unix path.
Version 1.5.0
(4 April, 2007)
  • Added powerful scripting language so that FTP scripts can be written for FTP,FTPS and SFTP. Can be run from a file or programmatically.
  • Fixed bug in SSL session resumption.
  • Fix to SSHFTPClient quit() method whereby a disconnect was being sent before acknowledge of channel closure was received from the server. This caused one particular server to leave processes running indefinitely (and build up).
Version 1.4.0
(23 March, 2007)
  • Introduced FTPInputStream and FTPOutputStream for use with FTPClient, ProFTPClient and SSLFTPClient.
  • Fix ASCII mode bugs whereby some line terminators are incorrectly handled (FTP/S and SFTP).
  • Allow the SFTP subsystem path to be set.
  • Download operations append the remote filename to the local path if the local path is a directory.
  • Fixed autodetect transfer mode bug where actual mode was not being changed on the FTP server.
  • FTPTransferCancelledException now thrown for FTP/S transfers if the transfer is cancelled.
  • SSHFTPClient.dirDetails() now can cope with single filenames and filename wildcards.
  • Added getVMSParser() to FTPFileFactory, permitting the VMSParser to be directly configured (and added is/setVersionInName() and get/setBlockSize() to VMSFileParser). Directory names returned now have ".DIR" trimmed off them.
Version 1.3.3
(5 February, 2007)
  • Added support for STOU, i.e. all put() methods now permit a null parameter for the remote filename - the FTP server generates a unique name that is returned.
  • Improved exists() method for FTP and FTPS.
  • Improved error handling of connection establishment to misbehaving SSH servers.
  • Added support for AES ciphers in FTPS.
  • Permit 235 return code for PBSZ command (FTPS).
  • Now supports truncated SSH_FXP_STATUS messages.
  • Directory listings can be cancelled via cancelTransfer() if they are large and too slow.
  • Turn off strict reply code checking for FTP/S by default.
Version 1.3.2
(14 November, 2006)
  • Fixed bug in SSH progress monitoring.
  • Fixed ArrayIndexOutOfBoundsException when using log4j integration.
  • Added setRemoteEOL() to SSHFTPClient.
  • Added zlib compression to SSHFTPClient.
  • Reordered SSH messages used in dirDetails() so it works correctly with Axway File Broker (XFB).
Version 1.3.1
(3 November, 2006)
  • Jar file is now signed by a certificate from the JCE Code Signing Certification Authority.
  • Fixed bug in FTPS active mode that didn't close client's listening socket.
  • Fixed bug in SSHFTPValidator where calling addKnownHost() resulted in an error "Host file is not writeable".
  • Timeout value now applies during initial connection to a remote host, so connection attempts won't hang if a timeout is set. Only works for JRE 1.4+.
  • Improved readability of logging.
Version 1.3.0
(13 October, 2006)
  • Complete rewrite of Developers' Guide in HTML format.
  • Complete rewrite and expansion of examples.
  • Updated and expanded message digest algorithms.
  • Control character encoding now used when reading directory listings.
  • Added exists() method to FTPClientInterface (and all clients).
  • Added FTPClientFactory, which creates FTP clients based on the supplied protocol.
  • Support for SOCKS 4 & 5 and HTTP proxies for SSHFTPClient.
  • Fixed SSHFTPClient bug introduced in 1.2.8 that manifests as "bad client public DH value".
  • DISABLE_SSL_CLOSURE flag now applies to the ccc() command, so that servers that simply stop encrypting the data immediately upon receiving CCC (e.g. Globalscape) are supported.
Version 1.2.9
(23 August, 2006)
  • ProFTPClient now supports IPV6 extensions to FTP
  • SSHFTPClient now supports ssh.com private keys
  • Fixed bug in handling FTP error messages when data connection has been terminated
  • Fixed bug in SSHFTPClient where a get() leaves a new local file if an exception occurs.
  • Don't null out FileFactory when quit() is called.
  • Unit tests no longer in jar file to reduce its size.
Version 1.2.8
(24 May, 2006)
  • Added AES cipher to SSH/SFTP
  • Fixed SSH bug that prevented connection to Titan SFTP server
  • Fixed ArrayIndexOutOfBoundsException occurring in DynamicBuffer
  • Fixed bug where unnecessary channel was being opened and affecting PSFTPd SFTP server
  • Trial no longer has 10K transfer size limitation - now unlimited
  • mput() methods now do not attempt to create remote directories if they exist
  • Fixed timeout so it propagates correctly to active data sockets
  • Fixed VMS directory parsing bug
Version 1.2.7
(20 March, 2006)
  • Support for Java keystores
  • Introduced SSLFTPCertificateStore for managing root certificates
  • More flexible server validation functionality useful for interactive server validation
  • Real-time server certificate download
  • More flexibility in interpreting PASV response string
  • Tidied up SSH exception handling for better reporting
  • Fixed 3DES-CBC
Version 1.2.6
(21 February, 2006)
  • Added getHostPublicKey() methods
  • Fix SSH server rekeying (which prevented transfers > 1 GB)
  • Fix for servers that miss out closing bracket in PASV response string
  • Fixed SSHFTPClient.dirDetails() so that UID & GID are set for user and group
  • Added SSHFTPClient.setControlEncoding() so that non-ASCII filenames can be used in SFTP
  • Added SSHFTPClient.setServerResponseTimeout() for SFTP
Version 1.2.5
(18 November, 2005)
  • Fixed thread bug in licensing module
  • Autodetection of ASCII/binary added as an option
  • Now accepts 230 reply for initial connection (returned by some proxy servers)
  • Added support for UTF ASN.1 string type in SSL certificates (solves "Not a PrintableString or IA5String" error)
  • Added changeGroup, changeOwner, changeMode, get/setUmask to SSHFTPClient
  • Added Keyboard-interactive (KBI) authentication to SSHFTPClient
  • Added ability to resume binary transfers in SSHFTPClient
  • Writes more detailed versioning info to debug
  • Fixed bug in SSHFTPClient whereby a ConcurrentModificationException was thrown
  • Fixed bug in SSHFTPProgressMonitor
  • Fixed permissioning problem in SSHFTPClient
  • More SFTP examples
Version 1.2.4
(17 October, 2005)
  • Added SSLFTPCertificate.writePEM() for easier dumping of certificates
  • Added SSLFTPCertificateException with ability to print out the certificate
  • Amended Developer Guide and Javadoc to clarify the SSH key formats that are supported
  • Added SFTP setAuthentication() method permitting key to be supplied as an InputStream
  • Added append as an option to SFTP put() methods
  • Fixed SFTP bug that required the known hosts file to be set via loadKnownHosts() if addKnownHost() is called
  • Fixed SFTP bug whereby DSA private keys were failing to load
Version 1.2.3
(30 September, 2005)
  • Fixed bug where SSHFTPClient could hang if connection broken or server error
  • Added loadClientKeyFile & loadRootCertificates variations that use an InputStream to load
  • Added setMaxPacketSize() to SSHFTPClient
  • Now accepts 230 reply for initial connection (returned by some proxy servers)
  • Fixed flush bug in StandardOutputAppender
Version 1.2.2
(21 September, 2005)
  • Permit 226 Transfer complete reply from empty dir listing
  • Now accepts 230 reply for initial connection (returned by some proxy servers)
  • Fixed bug in mget/mput
  • Now accepts 213 reply for SYST
  • Added extra test for no files found string comparisions for OS/390
  • Changed cancel processing to not use abort()
  • Increased max fields in parsing
  • Tweaked reply processing to remove possibility of NullPointerException
  • Make restart() public
Version 1.2.1
(28 August, 2005)
  • Speed up ASCII transfers in FTPS
  • Add setAutoPassiveIPSubstitution() for servers that return internal IP address
  • Repackaged SSH classes so no clashes exist with SSHTools
Version 1.2.0
(22 July, 2005)
  • ProFTPClient now production
  • mput/mget/mdelete now in SSLFTPClient,SSHFTPClient
  • SSHFTPClient now supports ASCII/Binary modes rather than just binary
  • Fixed SFTP/SSHFTPClient bug that resulted in overflow of channel data window
  • SSHFTPClient get() methods no longer leave a zero sized file if the remote file does not exist
  • SSHFTPClient has more consistent exception throwing
  • SSHFTPClient now implements ProFTPClientInterface
Version 1.1.9
(17 June, 2005)
  • SFTP out of beta and now production
  • Introduced beta of ProFTPClient that supports various mput/mget/mdelete methods.
  • Developers Guide updated wrt SFTP
Version 1.1.8
(24 May, 2005)
  • Improved FTPS performance by reducing handshaking load.
  • Added ability to enable/disable SSH algorithms.
  • Added auto-detection of key-types from known_hosts file.
  • Allow 350 response to STOR if strict checking is off
  • Added setActivePortRange to specify port numbers used in active transfers
  • Deprecated setPORTIP, renaming it to setActiveIPAddress
Version 1.1.7
(23 April, 2005)
  • Renamed to edtFTPj/PRO
  • Beta support for SFTP (SSH file transfers)
  • Deprecated all constructors other than default, and added getters/setters
  • Wildcards added to recursive operations
  • Allow validation to be switched off in quote()
  • Fixed problem where "Unexpected null reply received"
  • Fixed minor bug in UnixFileParser re symlinks
Version 1.1.6
(11 February, 2005)
  • Recursive get(), put() and delete() operations on directories supported
  • Writable check before download - if not writable, exception thrown
  • Some minor exception restructuring
  • ACCT and ABOR command support
Version 1.1.5
(19 November, 2004)
  • Added setPORTIP() so that an IP address can be forced to be used in active mode
  • Now supports Java 1.5.0
Version 1.1.4
(21 September, 2004)
  • Minor directory listing parsing bug fixes
  • Fix classloading problems when library redeployed in a J2EE container
  • Added resume capabilities for upload/download of binary files
Version 1.1.3
(28 July, 2004)
  • Wider compatibility with non-standard servers
  • Can set your own directory parser
  • Minor bug fixes re directory parsing
  • Allow non-strict server return code checking
Version 1.1.2
(28 June, 2004)
  • Fixed logging bug re control of logging levels
  • Minor bug fix for directory parsing of files with many spaces in them
Version 1.1.1
(24 May, 2004)
  • Server validation improved
  • FTPMessageListener added
  • Significant enhancements made to Developer's Guide
  • Examples have been enhanced
Version 1.1.0
(10 May, 2004)
  • Implicit mode FTPS is now supported in addition to explicit mode.
  • Logging API added, and log4j integration is now supported
  • dirDetails() method added for parsing directory listings
  • Detailed examples were added to the distribution, and documentation improved
Version 1.0.3
(5 April, 2004)
  • Fixes to permit the use of IBM JDK
  • Minor changes to security classes to prevent clashes with older Netscape security classes
Version 1.0.2
(17 March, 2004)
  • Minor bugfixes
  • Tweaks for some FTPS servers re the AUTH command
  • More configuration flags
Version 1.0
(17 November, 2003)
  • Initial release