NEWS 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. #+TITLE: Guile-SSH News -- history of user-visible changes.
  2. #+STARTUP: content hidestars
  3. Copyright (C) Artyom V. Poptsov <poptsov.artyom@gmail.com>
  4. Copying and distribution of this file, with or without modification,
  5. are permitted in any medium without royalty provided the copyright
  6. notice and this notice are preserved.
  7. * Unreleased
  8. ** New module (ssh shell)
  9. The module provides some procedures build upon (ssh popen) module for
  10. working with remote shell.
  11. ** Bugfixes
  12. *** In (ssh tunnel)
  13. **** 'main-loop' now handles "interrupted system call" errors
  14. that sometimes occur on 'select' call.
  15. ** Changes in (ssh dist node)
  16. *** 'node-eval' now can work without procps
  17. The procedure now checks if procps package is present on a node and uses
  18. fallback Guile-SSH implementation of 'pgrep' and 'pkill' if it is not.
  19. The fallback implementation of 'pgrep' is built upon pure bash, and
  20. 'pkill' in addition requires Guile itself on the remote side.
  21. *** New procedure 'node-loadavg'
  22. The procedure can be used to get average load of a node.
  23. ** Changes in (ssh dist)
  24. Procedures in the module now are capable of checking presence of procps
  25. package on a remote side and switching to fallback implementation of some
  26. of the procps tools when the package is not present -- thanks to updated
  27. 'node-eval' procedure (see above.)
  28. At the end of the day it means that now the code can start/stop Guile REPL
  29. server on a remote side even without procps installed.
  30. ** Update unit tests
  31. *** Add test cases for (ssh shell) module
  32. ** Update documentation
  33. *** Add documentation for (ssh shell) module
  34. *** Describe project goals in "Introduction" section
  35. * Changes in version 0.10.2 (2016-11-25)
  36. ** New procedures
  37. *** New procedure 'channel-send-eof' in (ssh channel)
  38. The procedure allows to send end-of-file (EOF) on a channel. This action
  39. doesn't close the channel; you may still read from it but not write.
  40. 'channel-send-eof!' is handy when we deal with a remote command that reads
  41. data until EOF (such as 'wc'.)
  42. ** Documentation
  43. *** Add procedure index
  44. ** Misc
  45. *** Fixed several compilation warnings
  46. * Changes in version 0.10.1 (2016-10-09)
  47. ** Bugfixes
  48. *** Fix SMOB freeing callbacks
  49. Callbacks for many Guile-SSH objects would always fail to free allocated
  50. resources due to wrong check added in 0.10.0. The problem should be fixed
  51. now.
  52. ** Change default 'guilesitedir' to 'PREFIX/share/guile/site/X.Y'
  53. from 'PREFIX/share/guile-ssh/ssh/'
  54. * Changes in version 0.10.0 (2016-08-20)
  55. ** Add support of Guile 2.0.12
  56. Guile-SSH now builds (and works quite well, as far as I can see) with Guile
  57. 2.0.9 and 2.0.12. Unit tests are passing too.
  58. Tested on:
  59. - Gentoo GNU/Linux, Guile 2.0.12-r1, libssh 0.7.3
  60. - Gentoo GNU/Linux, Guile 2.0.9-r1, libssh 0.7.3
  61. ** Add support of libssh 0.7.3
  62. Guile-SSH now supports libssh 0.7.3 and (probably) newer versions; haven't
  63. tested.
  64. Note that [[https://www.libssh.org/2016/02/23/libssh-0-7-3-security-and-bugfix-release/][CVE-2016-0739 was found in previous libssh versions]]; though you
  65. may still use 0.6.4, you really should stick with 0.7.3+ for aforementioned
  66. reason. 0.7.3 is already should be in your distro's repository, so that
  67. won't be a big deal I guess.
  68. ** Bugfixes
  69. *** (ssh dist node)
  70. **** 'node-server-running?' now checks the default port
  71. The procedure now checks for Guile server running on the default port
  72. (that is, with '--listen' option without an argument), if that port was
  73. specified for the node.
  74. *** Fix include errors and misspecified inline procedures in C code
  75. These errors lead to build failures (reported on Arch GNU/Linux, see
  76. <https://github.com/artyom-poptsov/guile-ssh/issues/1>.)
  77. *** Don't merge stderr with stdout in remote pipes
  78. See <https://github.com/artyom-poptsov/guile-ssh/issues/2>.
  79. ** Examples
  80. *** Add 'uptop' example
  81. ** Update documentation
  82. ** Unit tests
  83. Expand test suite, improve existing tests. Namely tests now don't always
  84. fail when '-j' option is used with 'make check', with value greater than 1
  85. (e.g. '-j4'; tested on Gentoo GNU/Linux, 4-core Intel Atom CPU)
  86. Though sometimes tests fail, so there's still a room for improvement.
  87. Another improvement is that SRFI-64 module and Guile-SSH common test module
  88. are now compiled before use, that should speed up the tests.
  89. * Changes in version 0.9.0 (2015-12-24)
  90. ** Bugfixes
  91. *** Fix a bug in distributed forms in handling of REPL errors
  92. Distributed procedures now throw an 'node-repl-error' on an evaluation
  93. error instead of returning of an unspecified value.
  94. *** Fix a bug in handling of strings in distributed forms
  95. The 'rrepl-eval' was always failing to send sexps that contain strings in
  96. the proper way because the procedure uses the human-readable printing to
  97. transmit the data. As the result an RREPL fails to evaluate it and
  98. reports an error. The bug is fixed by switching to the machine-readable
  99. data printing.
  100. *** 'dist-map' and 'distribute' now raise an error if an evaluation failed
  101. instead of silently return an empty list.
  102. *** 'channel-listen-forward' now returns a correct port number
  103. 'channel-listen-forward' would always return garbage as the 2nd argument
  104. when called with port > 0. Now when the port is explicitly specified then
  105. the procedure returns the specified port as the 2nd argument.
  106. *** Add missing export of 'node-tunnel' from (ssh dist node) module
  107. ** Changes in API
  108. *** Distributed forms now return the number of evaluation as a number
  109. instead of string.
  110. *** 'with-ssh' is now capable of handling of multiple values
  111. 'with-ssh' now returns a vector of values if an expression was evaluated to
  112. multiple values. 'distribute' and 'dist-map' only take the 1st value if
  113. multiple values were returned by an expression.
  114. *** Nodes are now capable of starting and stopping a remote REPL (RREPL)
  115. The new behaviour is controlled by 'start-repl-server?' and
  116. 'stop-repl-server?' keyed options of 'make-node'. Stopping of a RREPL
  117. server is disabled by default.
  118. *** Channels now can be created as input, output or bi-drectional ports
  119. The direction of a channel is controlled by the 2nd argument to
  120. 'make-channel' procedure.
  121. *** 'make-session' now takes 'config' option
  122. that allows to specify whether the SSH config should be parsed or not, and
  123. optionally the path to the config.
  124. ** New procedures
  125. *** New procedure 'node-server-running?' in (ssh dist node)
  126. *** New procedure 'node-run-server' in (ssh dist node)
  127. *** New procedure 'node-stop-server' in (ssh dist node)
  128. *** New procedure 'node-guile-version' in (ssh dist node)
  129. *** New procedure 'session-parse-config!' in (ssh session)
  130. ** New modules
  131. *** (ssh popen)
  132. Remote popen interface to interact with remote processes.
  133. *** (ssh sftp)
  134. SFTP interface that allows to operate on remote files.
  135. ** Documentation
  136. *** Move description of tunnels into a separate section
  137. *** Add description of the new procedures
  138. *** Update existing documentation
  139. ** Unit tests
  140. *** Expand the test suite for distributed forms
  141. *** Expand the test suite for tunnels
  142. ** Add the project logo
  143. * Changes in version 0.8.0 (2015-08-04)
  144. ** Implement port forwarding
  145. ** Add distributed forms
  146. ** Require libssh 0.6.4 or 0.6.5
  147. ** New module: (ssh tunnel)
  148. The module provides hi-level procedures for SSH tunneling.
  149. ** New module: (ssh dist)
  150. The module provides distributed forms of 'map' and 'eval', as well as
  151. remote REPL (RREPL) implementation.
  152. ** New module: (ssh dist job)
  153. Low-level API for distributed jobs.
  154. ** New module: (ssh dist node)
  155. Low-level API for distributed nodes.
  156. ** New procedure 'channel-accept-forward' in (ssh channel)
  157. ** New procedure 'channel-listen-forward' in (ssh channel)
  158. ** Remove 'channel-open-forward/reverse' procedure from (ssh channel)
  159. ** Examples
  160. *** Add an RPC client example
  161. Add an example program that does an RPC call over a secure channel using
  162. a Guile-SSH tunnel. See 'examples/rpc' directory.
  163. *** Add a RREPL example
  164. Add a demo program that connects to a remote REPL (RREPL).
  165. ** Update documentation
  166. * Changes in version 0.7.2 (2015-02-24)
  167. ** Remove dependency on libgcrypt added by a mistake
  168. ** Fix "double free or corruption" error on GC'ing of keys
  169. Fix "double free or corruption" error that occures in case when a key was
  170. derived from an authentication message by means of `message-get-req'. When
  171. such a key is GC'ed then GC'ing of its parent message leads to error, or
  172. vice versa.
  173. ** Fix a bug in the channel implementation
  174. The bug could occasionally manifest itself on channel reading as the
  175. following error:
  176. #+BEGIN_EXAMPLE
  177. guile: ports.c:1476: scm_i_fill_input: Assertion `pt->read_pos == pt->read_end' failed.
  178. #+END_EXAMPLE
  179. ** New `server-get' procedure in (ssh server)
  180. The procedure can be used to retrieve server options.
  181. ** New `channel-get-exit-status' procedure in (ssh channel)
  182. The procedure allows to get exit status of an executed command from a
  183. channel.
  184. ** New `channel-request-send-exit-status' procedure in (ssh channel)
  185. The procedure can be used to send the exit status to a client.
  186. ** Improve printing of Guile-SSH server objects
  187. Print the bind address of a server object and its bind port. Example:
  188. #+BEGIN_EXAMPLE
  189. #<server 127.0.0.1:12345 9b70ff0>
  190. #+END_EXAMPLE
  191. ** Update examples
  192. *** sssh
  193. - Check exit status of an executed command.
  194. *** ssshd
  195. - Send exit status to the client according to the result of command
  196. execution.
  197. *** echo server and client
  198. - Some cosmetic changes aimed to make the code cleaner.
  199. ** Update documentation
  200. - Add description of the new procedures.
  201. - Update examples.
  202. * Changes in version 0.7.1 (2014-10-11)
  203. ** New `%get-libssh-version' procedure in (ssh version)
  204. The procedure can be used to get libssh version in the "raw" format such
  205. as: "0.6.3/openssl/zlib".
  206. ** New `get-crypto-library' procedure in (ssh version)
  207. The procedure returns name of a cryptographic library with which libssh was
  208. compiled.
  209. ** New `zlib-support?' procedure in (ssh version)
  210. The procedure checks if zlib support is enabled in libssh.
  211. ** New `set-log-verbosity!' procedure in (ssh log)
  212. The procedure sets global libssh log verbosity.
  213. ** New `get-log-verbosity' procedure in (ssh log)
  214. The procedure gets global libssh log verbosity.
  215. ** New `make-keypair' procedure in (ssh key)
  216. The procedure can be used to generate a new keypair with the specified
  217. parameters.
  218. ** New `private-key-to-file' procedure in (ssh key)
  219. The procedure can be used to export a private key to a file (doesn't work
  220. if libssh 0.6.3 is compiled with GCrypt).
  221. ** Changes in tests
  222. *** Fix "end of file" errors in tests
  223. Fix the following kind of errors in tests:
  224. #+BEGIN_EXAMPLE
  225. ERROR: In procedure scm_i_lreadparen: /path/to/guile-ssh/sources/tests/./client-server.scm:272:34: end of file
  226. #+END_EXAMPLE
  227. Thanks to Ludovic Courtès for reporting the issue and for a good advice how
  228. to fix that.
  229. *** Don't perform ECDSA key tests if libssh is compiled with GCrypt
  230. libssh 0.6.3 does not support ECDSA keys if compiled with GCrypt instead
  231. of OpenSSL. Thus, ECDSA key tests used to fail. Now there is a check
  232. that prevents these tests from execution in case when libssh 0.6.3 is
  233. compiled with GCrypt.
  234. ** Update documentation
  235. - Add description of the new procedures.
  236. - Add note about ECDSA keys support with GCrypt library.
  237. * Changes in version 0.7.0 (2014-08-31)
  238. ** Require GNU Guile 2.0
  239. ** Require libssh 0.6.3
  240. ** Change `get-public-key-hash'
  241. *** Move the procedure to (ssh key)
  242. *** Return the hash as a bytevector
  243. *** Accept a public key as the first argument
  244. *** Accept a hash type as the second argument
  245. Possible types are: 'md5, 'sha1
  246. ** (ssh auth) procedures now throw an exception if the session is not connected
  247. ** (ssh channel) procedures now handle closed and freed channels
  248. - `channel-open?' returns `#f' if the channel has been closed freed.
  249. - `channel-open-session' and `channel-eof?' throw to `guile-ssh-error' if
  250. the channel has been closed and freed.
  251. - `channel-request-env', `channel-request-exec', `channel-request-pty',
  252. `channel-request-shell', `channel-set-pty-size!', `channel-set-stream!',
  253. `channel-get-stream' now throw `wrong-type-arg` if the channel is closed.
  254. ** Some (ssh session) procedures now throw an exception if the session is not connected
  255. These procedures are:
  256. - `get-protocol-version'
  257. - `authenticate-server'
  258. - `get-server-public-key'
  259. - `write-known-host!'
  260. ** Change `userauth-pubkey!'
  261. *** Rename it to `userauth-public-key!'
  262. *** Change arguments
  263. ** `blocking-flush!' now returns `error' symbol on error
  264. instead of throwing of an exception
  265. ** `connect!' now returns `error' symbol on error
  266. instead of throwing of an exception
  267. ** `authenticate-server' now returns `error' symbol on error
  268. instead of throwing of an exception
  269. ** `private-key-from-file' now takes only a file name
  270. ** New (ssh log) module
  271. ** Rename `userauth-pubkey-auto!' to `userauth-public-key/auto!'
  272. ** New `userauth-public-key/try' procedure in (ssh auth)
  273. ** New `bytevector->hex-string' procedure in (ssh key)
  274. ** New `channel-open-forward' procedure in (ssh channel)
  275. ** New `channel-open-forward/reverse' procedure in (ssh channel)
  276. ** New `session-get' procedure in (ssh session)
  277. ** New `channel-get-session' procedure in (ssh channel)
  278. ** New `message-get-session' procedure in (ssh message)
  279. ** Improve printing of Guile-SSH objects
  280. *** Print more detailed information about `session' object
  281. Print user name, host name and current state of a `session' object.
  282. *** Print object address for `channel' object
  283. *** Print object address for `message' object
  284. *** Print object address for `key' object
  285. ** Changes in tests
  286. *** Add tests for Guile-SSH keys
  287. *** Add tests for `authenticate-server' procedure
  288. ** Bug fixes
  289. *** Fix a GC issue
  290. Keep a reference to the parent session in channels and messages to prevent
  291. the session from premature GC'ing. Without that GC could free a session
  292. even if there are live channels and by that break the channels.
  293. *** `public-key?' and `private-key?' now produce correct result
  294. Functions now return `#f' if the given argument is not a Guile-SSH
  295. key object.
  296. ** Documentation update
  297. *** Fix old URLs to Guile-SSH repository in the `Installation' chapter
  298. *** Add an overview of programming with Guile-SSH to the "Examples" chapter
  299. * Changes in version 0.6.0 (2014-03-23)
  300. ** Remove username from parameter list of auth procedures
  301. `userauth-password!' and `userauth-pubkey!' don't take a username
  302. as a parameter anymore. Rationale: According to libssh 0.6 docs,
  303. most server implementations do not permit changing the username
  304. during authentication. Moreover, the parameter was deprecated in
  305. libssh 0.5.3.
  306. Elimination of the username makes Guile-SSH Auth API clearer and
  307. simpler. Username can be set either on creation of a session or by
  308. calling of `session-set!' procedure.
  309. ** `server-accept' now throws `guile-ssh-error' on error
  310. ** Improve reads from channels
  311. Return EOF immediately if the channel is closed instead of polling
  312. it for data (which causes notable latency on the first read).
  313. Thanks Ludovic Courtès for the patch.
  314. ** Compile Guile modules
  315. Compile Guile modules and install compiled files if GNU Guile 2.0.x
  316. is available.
  317. ** Update Texinfo documentation
  318. *** Update Auth API description
  319. *** Update Server API description
  320. *** Update Acknowledgments
  321. ** Update examples
  322. *** Use actual path to Guile interpreter in the shebang
  323. Executables will be produced during building of the Guile-SSH.
  324. *** Handle `guile-ssh-error' on `server-accept'
  325. *** Catch `guile-ssh-error' on reading from a port
  326. *** ssshd
  327. **** Add `--port', `--ssh-debug' and `--pid-file' option
  328. **** Store the PID in a file
  329. instead of printing it to stdout.
  330. **** Handle password authentication correctly
  331. *** sssh
  332. **** Add `--ssh-debug' option
  333. ** Improve automated tests
  334. *** Prevent sssh-ssshd from asking of a SSH agent for keys
  335. *** Make parallel tests work
  336. * Changes in version 0.5.0 (2014-02-05)
  337. ** Implement Guile-SSH channels as GNU Guile ports.
  338. Now channels can be used with regular procedures such as `display',
  339. `write' and `read-line'.
  340. ** `session-set!' and `server-set!' now take log-verbosity as a symbol
  341. Use symbols to represent log levels instead of numbers.
  342. ** Remove duplicates of some session options
  343. Remove duplicates that are existed for some Guile-SSH session
  344. options: `port-str' (duplicates `port', differs only in expected
  345. type of value), `log-verbosity-str' (duplicates `log-verbosity',
  346. differs only in expected type of value), `add-identity' (duplicates
  347. `identity', no differences).
  348. ** New `userauth-autopubkey!' procedure.
  349. The procedure can be used for public key authentication with a SSH
  350. agent.
  351. ** New procedures.
  352. `channel-set-stream!', `channel-get-stream', `session?', `server?',
  353. `message?'.
  354. ** Remove procedures.
  355. These procedures are removed due to changes in Guile-SSH channel
  356. API: `close-channel!', `channel-poll' `free-channel!',
  357. `channel-read`, `channel-write'.
  358. ** Add documentation in Texinfo format
  359. The Guile-SSH reference manual in Info format will be installed on
  360. `make install' into `${prefix}/share/info' directory.
  361. ** Update sssh/ssshd example.
  362. *** `examples/sssh.scm' and `examples/ssshd.scm' are updated
  363. to use the new Guile-SSH channel API.
  364. *** `sssh.scm` now uses `userauth-autopubkey!'
  365. *** `ssshd.scm' now parses command-line options
  366. See `ssshd.scm --help'.
  367. ** Add echo server/client example.
  368. See `examples/echo' directory.
  369. ** Add automated tests.
  370. See `tests/' directory.
  371. * Changes in version 0.4.0 (2013-11-26)
  372. ** Port the library to GNU Guile version 2.0
  373. Now the library works with GNU Guile version 2.0 as well as 1.8.
  374. ** Remove "ssh:" prefix from procedures names.
  375. If it is needed, an user's prefix can be added by setting a renamer
  376. for a module on loading. See the documentation for the GNU Guile
  377. module system.
  378. ** Implement basic SSH server API.
  379. ** Fix a memory corruption in `channel-read'
  380. The problem was seen on reading of an output from "lsb_release -a"
  381. command.
  382. ** Fix a memory corruption during GC'ing of SSH keys.
  383. ** Fix a bug in `session-set!'
  384. Fix the bug that leads to an error if the user tried to set a
  385. correct boolean option.
  386. ** New `channel-write' procedure.
  387. ** New `channel-request-pty' procedure.
  388. ** New `channel-request-shell' procedure.
  389. ** New `channel-set-pty-size!' procedure.
  390. ** Fix the name of `write-known-host!'
  391. The procedure was called `authenticate-server' by mistake. Rename
  392. it to `write-known-host!'.
  393. ** Change error handling in some procedures.
  394. Now `write-known-host!', `channel-open-session',
  395. `channel-request-exec', `channel-request-env', `close-channel!',
  396. throw an exception on error. The return value of these procedures
  397. now is undefined.
  398. ** `authenticate-server' now throws guile-ssh-error exception on error.
  399. Don't return the 'error symbol, throw an exception instead.
  400. ** `server-set!' now throws guile-ssh-error exception on error.
  401. The return value now is undefined.
  402. ** Rename `make-session' to `%make-session'.
  403. See `make-session' below.
  404. ** New `make-session' procedure.
  405. This is a convenient wrapper for `%make-session' which allows to
  406. set session options by passing them as keywords.
  407. ** Rename `connect' to `connect!'.
  408. ** Fix a typo in an option symbol
  409. 'strcthostkeycheck -> 'stricthostkeycheck
  410. ** Fix an infinite loop in `public-key->string'.
  411. The problem was observed on Ubuntu GNU/Linux 10.04 LTS.
  412. ** Add examples to the repository.
  413. See the "examples/" directory.
  414. ** Improve printing of SSH keys, channels and messages.
  415. Examples: #<public rsa key>, #<open ssh channel>
  416. * Changes in version 0.3.1 (2013-07-14)
  417. ** Use a simpler method to GC'ing of SSH channels.
  418. The idea is that we don't have to free resources allocated by a
  419. channel during its GC'ing, because these resources will be freed
  420. anyway when the related SSH session is GC'ed. However, to be able
  421. to control allocating of resources more precisely, introduce new
  422. procedure ssh:free-channel! that can be used for freeing resources
  423. allocated by a channel.
  424. ** ssh:free-channel!
  425. New procedure.
  426. ** Make the library thread-safe.
  427. * Changes in version 0.3 (2013-07-13)
  428. ** Improve working with public keys.
  429. Because some libssh functions are working with public keys
  430. represented as a ssh_string instead of a ssh_public_key, we try to
  431. hide this peculiarity so all kinds of keys are look like a <key>
  432. class from the Scheme perspective.
  433. ** Fix segmentation faults on GC'ing of SSH objects.
  434. The program doesn't crashes anymore during GC'ing of SSH objecs.
  435. ** ssh:public-key-from-file
  436. Make it work. Return newly created <key> instance or #f on error.
  437. ** ssh:public-key->string
  438. Take a key as a <key> instance.
  439. ** ssh:private-key-from-file
  440. Fix call to an undefined procedure. Return #f on error.
  441. ** ssh:get-key-type
  442. New procedure. The procedure returns type for a passed <key>
  443. instance. Possible types are: 'dss, 'rsa, 'rsa1, 'unknown
  444. ** ssh:userauth-get-list
  445. New procedure. The procedure returns a list of available
  446. authentication methods for a given SSH session
  447. ** ssh:channel-read
  448. Fix call to an undefined procedure. Throw guile-ssh-error
  449. exception on error.
  450. ** ssh:close-channel!
  451. Fix return value: return #t if channel is closed successfully, #f
  452. otherwise.
  453. ** ssh:blocking-flush!
  454. Return 'error by default.
  455. ** ssh:session-set!
  456. Fix a bug with uint32 options setting.
  457. ** SSH objects now comparable.
  458. * Changes in version 0.2 (2013-05-25)
  459. ** Release of the first stable version of Guile-SSH.
  460. Local Variables:
  461. mode: org
  462. End: