1 2 Release Notes: 3 ============== 4 5 build???, 2011-06-?? 6 7 - Requires Java 5 or later. 8 9 - Provide POM for Maven 3 build. 10 11 - Performance gains with request parallelism in requests for read and write write operations in SFTPv3Client. 12 13 - Bugfix for infinite timeout on socket connect. 14 15 - SFTPInputStream and SFTPOutputStream to read or write from a SFTPv3FileHandle compatible with standard I/O operations in Java. 16 17 - SCPClient returning SCPInputStream and SCPOutputStream for get and put operations respectively compatible with stanard I/O operations in Java. 18 19 - Option to attach a packet listener to SFTPv3Client for logging purposes. 20 21 - Fixed a bug in KnownHosts.getPreferredServerHostkeyAlgorithmOrder (it always returned null, which is a valid return value but wrong). 22 23 - Added accessor to query session state and isConnected() in SFTPv3Client returning a boolean 24 25 - Adjusted channel window size 26 27 - Custom PEMDecryptException to catch PEM decoding failure. 28 29 - Option to pass custom user agent string for identification string. 30 31 - Continue silently when invalid key is found in known hosts file. 32 33 - Add support for file append mode in SFTPv3Client. 34 35 - Option to pass charset for commands executed on the remote machine. 36 37 build251beta1, 2010-08-23: 38 39 - Due to the slightly changed semantics of Thread.interrupt() and Object.wait() in JDK 6, 40 the code had to be adapted in several places. Please do not use Ganymed SSH-2 build250 41 on JDK 6, as the Kex and Streamgobbler code may occasionally consume all CPU resources. 42 43 Background: the JDK 6 javadocs for Object.wait say: "If the current thread is interrupted 44 by any thread before or while it is waiting, then an InterruptedException is thrown." 45 Unfortunately the Java 1.5 documentation does not say "before", only "while it is waiting". 46 47 Thanks to Elias Horness. 48 49 build250, 2010-03-15: 50 51 - Ganymed SSH-2 for Java is back. 52 The software can be downloaded from http://www.cleondris.ch/ssh2 53 54 - Fixed the use of default platform character encodings. 55 56 - Fixes for buggy servers. 57 58 - Wait for the reply to the ServiceRequest packet before sending the next request. 59 60 - Re-assign the interrupted flag after a InterruptedException. 61 62 build211beta4, 2006-12-05: (never officially released) 63 64 - Added Connection.sendIgnorePacket(...) methods which allow to send SSH_MSG_IGNORE packets. 65 Thanks to Andrei Tchijov. 66 67 - Added support for the "none" authentication method. 68 69 - Revised the SHA-1 code. Highly optimized. Speed should be more than doubled. 70 71 - Changed references to the correct RFCs (instead of the drafts) in the javadocs (where possible). 72 73 - Fixed the write() method in the SFTP code. Unsatisfiable preconditions stopped the method 74 from writing any bytes. As stated in the documentation, the SFTP code is still experimental. 75 Thanks to Andreas Pueschel. 76 77 - Added a new createLocalPortForwarder(InetSocketAddress addr, ...) method which allows to 78 specify the local address and port to bind to. Thanks to Andrei Tchijov. 79 80 - Slightly updated the FAQ. 81 82 build210, 2006-10-06: 83 84 - Added HTTP proxy support. See Connection.setProxyData() and the HTTPProxyData class. 85 Thanks to Jean-Pierre Schmit for providing example code. 86 87 - Added basic support for SFTP (v3). 88 89 - Beta users: removed support for automatic split of huge read transfers in SFTP, 90 as it was not possible to return EOF in a clean way. The write method still splits huge 91 transfers (in blocks of 32768 bytes). Thanks to Zhong Li. 92 93 - SCP enhancement. It is now possible to specify an empty target directory name when sending 94 files. This is analogous to using "scp file user@host:" (thanks to Bernd Eggink). 95 96 - SCP enhancement. It is now possible to receive a remote file and pipe it directly into 97 an OutputStream. Thanks to Bernd Eggink. 98 99 - SCP enhancement. It is now possible to specify a different remote filename when sending 100 a file. Thanks to Thomas Tatzel. 101 102 - Added more verbose error messages in case a channel open operation fails (e.g., resource 103 shortage on the server). Related to this, added a comment to the FAQ regarding the limitation 104 on the number of concurrent sessions per connection in OpenSSH. Thanks to Ron Warshawsky. 105 106 - Added a feature (ConnectionMonitor) to get notified when a connection breaks. 107 Thanks to Daniel Ritz (Alcatel). 108 109 - It is now possible to override the used SecureRandom instance (Connection.setSecureRandom()). 110 111 - Added getters for the server's hostname and port to the Connection class. 112 113 - Added examples for HTTP proxy usage as well as local/remote port forwarding. 114 115 - Added support for SSH_MSG_KEX_DH_GEX_REQUEST_OLD in the DHGexParameters class (there 116 is a new, additional constructor). Please check the Javadoc for DHGexParameters. 117 118 - Clarified in the javadoc the issue of re-using Connection objects. Changed the exception 119 message in case connect() is invoked on an already connected connection. 120 121 - Added an entry to the FAQ regarding pumping data into remote files. 122 Thanks to Daniel Schwager. 123 124 - Changed JDialog.show() to JDialog.setVisible(true) in the SwingShell example. 125 The show() method is deprecated in Java 5.0. Thanks to Carlo Dapor. 126 127 - Fixed the behavior of the local port forwarder code. Trying to listen on an already bound port 128 will not fail silently anymore. Also, the accept thread will continue accepting connections 129 even if there was a problem with the establishment of the underlying ssh-forwarding of a 130 previous incoming connection (e.g., one tried to establish a forwarding to a remote port that 131 is not in state open (yet)). Thanks to Claudio Nieder (Inodes, Switzerland) and 132 Daniel Ritz (Alcatel) for pointing this out. 133 Note: the interface for managing port forwardings needs to be further improved. 134 135 - Tried to implement a workaround for the Sun JVM bug 5092063. Changed InetAddress.getByAddress(byte[]) 136 in the "TransportManager.parseIPv4Address" method (which already is a workaround for JDK's that 137 use the resolver for dotted IP addresses, independently from the 5092063 bug) to 138 InetAddress.getByAddress(String, byte[]). Thanks to Alain Philipin. 139 140 - Fixed a bug in KnownHosts.addHostkeyToFile. Hostnames were converted to lowercase which is 141 not good in case of hashed hostnames (it leads to a different BASE64 encoding and therefore 142 hashes won't match). Thanks to [unknown]. 143 144 - Fixed a typo in the SCP client (tag for modification times is 'T' and not 'P'). 145 Thanks to Andreas Sahlbach. 146 147 - Stupid performance enhancement in the Logger, it did unnecessary calls to System.currentTimeMillis(). 148 149 - The LICENCE.txt file is now also included in the pre-compiled jar. Of course, redistributions in 150 binary form must *still* include the contents of LICENCE.txt in the documentation and/or other 151 materials provided with the distribution. 152 153 - Small cleanups in the TransportManager code. 154 155 build209, 2006-02-14: 156 157 - A major release, many new features. Thanks to all who supported me with feedback! 158 159 - Added remote port forwarding support. 160 Please consult the docs for Connection.requestRemotePortForwarding(). 161 162 - Added X11 forwarding support. Please consult Session.requestX11Forwarding(). 163 X11 support is based on joint work with Simon Hartl (simon.hartl (at) gmx.net). Thanks, Simon! 164 165 - The SCPClient constructor is now public. The factory method is still there (in the Connection 166 class), however, it will probably be marked as deprecated and eventually be removed in the future. 167 168 - Added startSubSystem() method to the Session class. Now it is possible to implement subsystems, 169 e.g., sftp, outside of the library. 170 171 - For advanced users: there is now a much better condition wait interface in the Session class. 172 It is now also possible to wait for the arrival of "exit-status" and "exit-signal". 173 The Session.waitUntilDataAvailable() method still works, but is marked as deprecated. 174 175 Users that used the beta version, please be aware of the following change: calling the close() 176 method on a Session object will immediatelly raise the ChannelCondition.CLOSED/EOF conditions 177 on the underlying channel - even though the remote side may not have yet responded with a 178 SSH_MSG_CHANNEL_CLOSE message (however, in the background the library still expects the server 179 to send the SSH_MSG_CHANNEL_CLOSE message). See below for an explanation. 180 181 - The behavior of Session.close() has changed. If you *kill* a Session (i.e., call Session.close() 182 before EOF (or CLOSE) has been sent by the remote side), then immediatelly EOF will (locally) 183 be raised for both stdout and stderr. Further incoming data (for that particular Session) will 184 be ignored. However, remote data that arrived before we sent our SSH_MSG_CHANNEL_CLOSE message 185 is still available (you can think of having appended the EOF marker to the end of the local 186 incoming stdout and stderr queues). 187 188 The reason to do this is simply because some SSH servers do sometimes not reply to our 189 SSH_MSG_CHANNEL_CLOSE message (event though they should). As a consequence, a local reader may 190 wait forever for the remote SSH_MSG_CHANNEL_EOF or SSH_MSG_CHANNEL_CLOSE messages to arrive. 191 If you are interested, then you can try to reproduce the problem: Execute something like 192 "tail -f /dev/null" (which should do nothing forever) and then concurrently close the Session 193 (enable debug mode to see the SSH packets on the wire) to check how standard compliant your server 194 implementation is). Thanks to Cristiano Sadun. 195 196 - The Session code does not anymore make use of the synchronized attribute for any of its methods. 197 This has the advantage that a call to Session.close() will never by blocked by concurrent 198 calls to the Session object. However, note that in the worst case the call may still block until 199 we can send our SSH_MSG_CHANNEL_CLOSE over the TCP connection. 200 201 - The SCP client can now also be used to directly inject the contents of a given byte array 202 into a remote file (thanks to Dieter Baier for suggesting this). 203 204 - Added support for specifying timeouts for connection establishment. 205 Thanks to Rob Hasselbaum and Ben XYZ. 206 207 - Performance improvement: we use only a single SecureRandom object per connection 208 (until now there were multiple instances). 209 210 - Fixed the Swingshell example program, it did not read in the known_hosts file on startup. 211 (thanks to Ashwani Kumar). 212 213 - There was a typo in the CBCMode class (srcoff was ignored), however since we always pass 214 a zero offset the bug did not show up (thanks to Alex Pakhomov). 215 216 - While implementing X11 support, found a strange X11 bug in OpenSSH (reported, openssh bug 1076). 217 12.10.2005: has been fixed for OpenSSH 4.3 by the OpenSSH crowd. 218 219 - Changed the SingleThreadStdoutStderr example so that it uses the new condition wait interface. 220 221 - Efficiently handle IPv4 addresses (when creating the underlying socket), there was a report 222 that some JDK's try to lookup dotted addresses with the resolver. 223 (thanks to Alexander Kitaev). 224 225 - Added setTCPNoDelay() method to the Connection class. 226 227 - Improved handling of unsupported global/channel requests received from the server. 228 229 - The KEX code is now more robust. Also, the ServerHostKeyVerifier callback (if specified) will be called 230 before doing any DH calculation. 231 232 - Major cleanup (i.e., rewrite) of the SSH channel code. 233 234 - Cleanup up Session class, removed unnecessary IOExceptions. 235 236 - Implemented 2^32-1 conformance for channel windows. 237 238 - I got several times questions by e-mail from people that have problems with "putty" keys. 239 Added an entry to the FAQ. 240 241 - Added an entry to the FAQ regarding how to handle servers with disabled password authentication 242 (thanks to Nicolas Raoul). 243 244 - Upcoming: SFTP support (in the meantime almost a running gag). 245 246 - Changed the name from "Ganymed SSH2" to "Ganymed SSH-2". Will this improve the G**gle ranking? =) 247 248 - Latest javadoc is now also online. 249 250 251 build208, 2005-08-24: 252 253 - Added support for RSA private keys (PEM format), also revised code for RSA signature verification. 254 255 - Extended support for encrypted PEM files. 256 Supported encryptions: DES-CBC, DES-EDE3-CBC, AES-128-CBC, AES-192-CBC and AES-256-CBC. 257 258 - Added rather complete support for known_hosts files (in KnownHosts.java). 259 The parser is able to understand the same pseudo-regex (*,?,!) syntax as OpenSSH clients. 260 The class includes support for hostkey comparison as well as functionality to add accepted keys 261 to a known_hosts file. One can also create OpenSSH compatible fingerprints (Hex and Bubblebabble). 262 Hashed hostname entries are understood and can also be generated. 263 264 - Restructured the examples section, added more examples. The examples should cover most issues. 265 There is also a _very_ basic terminal emulator, see SwingShell.java. 266 267 - It is now possible to override the default server hostkey algorithm order (for the key exchange) 268 with the Connection.setServerHostKeyAlgorithms method. This makes sense in combination with 269 known_hosts support (e.g., if you already know the server's public ssh-dss key, then 270 you probably prefer the "ssh-dss" over the "ssh-rsa" algorithm). 271 The used server hostkey algorithm is now also reflected in ConnectionInfo. 272 273 - The default server hostkey algorithm order is now "ssh-rsa", "ssh-dss". 274 275 - Important: revised Input- and OutputStream code, everything is now unbuffered 276 (less memory consumption, more direct interface, see also StreamGobbler class and the FAQ). 277 278 - Added StreamGobbler helper class. 279 280 - Method verifyServerHostKey() in the ServerHostKeyVerifier may now throw exceptions 281 (an alternative to returning "false"). 282 283 - All background threads (the per-connection receive thread as well as all threads 284 used in forwarders and StreamGobblers) now use setDaemon(true) on startup. 285 286 - Added "diffie-hellman-group14-sha1" support to the key exchange code. 287 288 - Added chained IOExceptions where applicable (IOException initialization with initCause()). 289 290 - Cleaned up packet building code, removed unnecessary server-side methods. 291 292 - Cleaned up javadoc of SCPClient: replaced umask with mode. 293 294 - Fixed a bug in the server identification string parser. This actually prevented a successful 295 key exchange with some ssh servers (the server's signature was rejected). 296 Thanks to Alex Molochnikov for the initial bug report and for helping in tracking down the issue. 297 298 - Fixed a buffer re-allocation bug in the beta version of the StreamGobbler class 299 (thanks to Marc Lijour). 300 301 - Fixed flawed UINT64 support (thanks to Bob Simons). 302 303 - Fixed a bug in the build script of the beta builds (sftp beta directory was not completely removed) 304 (thanks to Richard Hash). 305 306 - Use zero based padding for unencrypted traffic. 307 308 - Changed again the client identification string (the one presented to the server). 309 310 - Created a FAQ, available on the website and in the distribution. 311 312 - Revised javadoc comments. Also, the generated documentation is now located in the subdirectory 313 "javadoc" instead of "doc" (in the distribution). 314 315 - Added README.txt to the distribution. 316 317 318 build207, 2005-07-21: 319 320 - Added "Keyboard Interactive" authentication method: 321 authenticateWithKeyboardInteractive() in Connection.java, 322 also have a look at InteractiveCallback.java. 323 324 - Extended authentication interface in Connection.java (backwards compatible). 325 New functionality: getRemainingAuthMethods(), isAuthMethodAvailable(), 326 isAuthenticationComplete() and isAuthenticationPartialSuccess(). 327 328 - Using an authentication method not supported by the server leads now to an exception 329 (instead of returning "false"). Use isAuthMethodAvailable() if you want to check 330 for the availability of an authentication method. 331 332 - Fixed a bug in SCPClient which sometimes lead to failed downloads. 333 334 - Improved channel window handling. 335 336 - Removed bogus (CVS) version string from Connection.java 337 338 - Changed client identification string to "Ganymed_buildXXX". 339 340 - Changed the jar file naming scheme (ganymed-ssh2-buildXXX.jar). 341 342 - Started adding logging support for debugging purposes (currently only for development). 343 344 - Cleanup of javadoc and comments at several places. 345 346 - Reversed order of entries in HISTORY.TXT 347 348 349 build206, 2005-07-04: 350 351 - Fixed small resource issue with SCP (thanks to Michal Giraud). 352 353 - Added LocalStreamForwarder. 354 355 - Added HISTORY.TXT 356 357 358 build205, 2005-06-27: 359 360 - Initial release. 361 362