-
-
Notifications
You must be signed in to change notification settings - Fork 13
/
NEWS
907 lines (810 loc) · 39.1 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
#+TITLE: Guile-SSH News -- history of user-visible changes.
#+STARTUP: content hidestars
Copyright (C) Artyom V. Poptsov <[email protected]>
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
* Unreleased
** Change =(ssh popen)= procedures behavior :API_CHANGE:
Now the following procedures handle the program arguments the same way as
=open-pipe*= procedure. This also makes the their behavior match the
description from the Guile-SSH documentation.
This change affects the following procedures from =(ssh popen)=:
- =open-remote-pipe*=
- =open-remote-input-pipe*=
- =open-remote-output-pipe*=
Reported by graywolf in
<https://github.com/artyom-poptsov/guile-ssh/issues/39>
** =make-session= now handles =#:config= set to =#f= properly
Now =make-session= disables reading the default SSH configuration files when
=#:config= is set to =#f= (as per Guile-SSH documentation.)
When =#:config= is set to =#t= then the default SSH configuration files are
read. This is by default to keep the backward compatibility.
Reported by graywolf in
<https://github.com/artyom-poptsov/guile-ssh/issues/38>
** session-func.c: Fix compile error caused by bool identifier :BUGFIX:
Fix a compilation error caused by the confusion of a variable name with
boolean type name.
Reported and fixed by Peter Tillemans <[email protected]> in
<https://github.com/artyom-poptsov/guile-ssh/pull/43>
** Documentation
*** doc/api-popen.texi: Improve description; update examples
*** doc/api-dist.texi: Fix the description of "make-node"
*** doc/api-sessions.texi: Update and improve
** Tests
*** tests/session.scm: Bugfix :BUGFIX:
Set "host" to "example" so the default configuration from the test config will
be read.
*** tests/server.scm ("make-server", "server-get"): Bugfix :BUGFIX:
Don't try to use DSA key when it is disabled.
*** tests/common.scm: Don't use DSA keys when DSA is not supported :BUGFIX:
*** tests/session: Expand "#:config" test suite
** Examples
*** examples/ssshd.scm.in (main): Bugfix: Handle deprecation of DSA :BUGFIX:
*** tests/key.scm: Bugfix: Handle DSA deprecation properly :BUGFIX:
** New simplified version of the project logo
Thanks to Darya Sev. <[email protected]> for very helpful design advices for the
new simplified version of the project logo.
* Changes in version 0.17.0 (2024-05-01)
** =make-session= now loads config file before setting options
=make-session= would always overwrite the explicitly set options passed by
keywords with the values from the SSH configuration file. That lead to
unexpected behavior.
This patch fixes this error.
Reported by graywolf in
<https://github.com/artyom-poptsov/guile-ssh/issues/38>
** =session-set!= now allows to set =rsa-min-size=
Only available if Guile-SSH is compiled with libssh 0.10.
** Add new tests.
** Update the documentation.
* Changes in version 0.16.4 (2023-12-17)
** =private-key-from-file= now allows to read encrypted keys
The procedure =private-key-from-file= from =(ssh key)= now has optional
=#:auth-callback= and =#:user-data= keys that allow to specify a callback
procedure to read the password for an encrypted key, and optionally pass to
the callback procedure some user data.
The Texinfo documentation for =private-key-from-file= is updated with an usage
example.
New tests were added for the new functionality.
** Add GNU Guix workflows for GitHub CI
Now Guile-SSH has GNU Guix workflows for GitHub CI.
Platforms:
- x86_64-linux-gnu
- aarch64-linux-gnu
Thanks to Sharlatan Hellseher <[email protected]>
** Fix typos in the documentation
Some typos in =doc/api-popen.texi= are fixed, thanks to
Maxim Cournoyer <[email protected]>
* Changes in version 0.16.3 (2023-01-29)
** Fix Guile-SSH/libssh channel leak
Guile-SSH channel would always "leak" the libssh channels when the remote side
issued the closing request. Now this bug is fixed by freeing libssh channel
when the remote side is closed.
Reported by Andrew Tropin <[email protected]> in
<https://debbugs.gnu.org/cgi/bugreport.cgi?bug=58290>
The test for reproducing the problem was provided by Ludovic Courtès
* Changes in version 0.16.2 (2023-01-02)
** Bugfix in test "string->public-key, ECDSA"
The test used to explicitly compare libssh version with "9" so it would always
fail on platforms with libssh 0.10. Now the test does numerical comparison
and uses "ecdsa-p256" on platforms that have libssh 0.9 or later version.
Reported by Vagrant Cascadian, here:
<https://github.com/artyom-poptsov/guile-ssh/issues/34>
* Changes in version 0.16.1 (2022-12-31)
** Disable the tests that require DSA algorithm by default
When DSA support is disabled in libssh (which is the default state since
libssh 0.10) all DSA-related Guile-SSH procedures will fail. Now Guile-SSH
disables by default all the tests that are require the DSA algorithm support
by default.
Although those changes do not affect the Guile-SSH API directly, users should
be aware that DSA support will be removed altogether in the next major libssh
release.
Reported by Vagrant Cascadian, here:
<https://github.com/artyom-poptsov/guile-ssh/issues/34>
** Add '--enable-dsa' Autoconf option
'configure.ac' now has '--enable-dsa' option that allows to enable DSA public
key algorithm support in Guile-SSH.
** (ssh version): 'dsa-support?': New procedure
** guix.scm: Use libssh 0.10.0
The development GNU Guix environment now uses libssh 0.10.0.
* Changes in version 0.16.0 (2022-09-13)
** Fix Guile snarfer environment
Fix a bug introduced in Guile-SSH 0.15.0 that breaks the cross-compilation.
Reported by Ludovic Courtes <[email protected]> here:
<https://github.com/artyom-poptsov/guile-ssh/issues/30>
** New API: SFTP Directory
Guile-SSH now allows directory traversal by means of the new procedures in the
(ssh sftp) module.
** Update the documentation.
* Changes in version 0.15.1 (2022-02-28)
** Fix session garbage collecting errors
When a session is being destroyed by the Guile GC, the session garbage
collector procedures try to close all the session channels. There was a
bug that lead to accessing elements that are over the border of a channels
list.
Now the bug should be fixed.
Reported by Ludovic Courtès <[email protected]> in an email, here:
<https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52975>
** Fix segfaults that occur on session closing
When a remote side closing a channel Guile-SSH would fail as the libssh
callback that marks the Guile-SSH channel as closed tried to convert a
Guile channel object to the channel data and fails to do it.
Now the problem should be fixed.
Reported by Ludovic Courtès <[email protected]> in an email, here:
<https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52975>
** Add GNU Guix package definition to the repository
Add =guix.scm= to the repository. The file contains GNU Guix package
definition that allows to build Guile-SSH from Git.
* Changes in version 0.15.0 (2022-01-03)
** Bump library version to "14:0:0" according to libtool rules
In the 0.14.0 release of Guile-SSH the libtool library version wasn't
properly changed. This could lead to compatibility problems.
Now the version is bumped to "14:0:0".
** Remove requirement for 'whereis' command
Guile-SSH required 'whereis' from 'util-linux' package to find
'guile-snarf' command. Now this dependency is removed.
* Changes in version 0.14.0 (2021-12-20)
** API change: OpenSSH agent procedures are now in (ssh agent)
Move agent procedures to (ssh agent) module from (ssh auth).
The procedures are renamed and improved too. The current set of procedures
provided by (ssh agent) is as follows:
- ssh-agent-sock-get
- ssh-agent-sock-set!
- ssh-agent-start
- ssh-agent-info
The documentation is updated accordingly.
** API change: Remove 'sftp-init' from (ssh sftp)
This procedure was not present in the module anyway, so this is more like a
bugfix though.
If you need to call SFTP init, you can use low-level '%sftp-init' procedure
(although this is discouraged.)
** Guile-SSH channels are now explicitly blocking by default
** Fix snarfing errors on Fedora GNU/Linux
Guile-SSH would fail to find 'guile-snarf' script on Fedora GNU/Linux when
GNU Guile 2.2 installed because the snarfer installed as 'guile-snarf2.2'.
Now the problem is fixed.
** Fix random segfaults due to libssh logging
The library would sometimes get segfaults due to libssh logging.
Guile-SSH used to pass Guile objects to a libssh logging procedure as a
opaque pointers, and some Guile objects didn't make it to the point when an
actual Scheme callback procedure called, GC'ted on the way. So when a
Scheme logging callback tried to use its parameters, the parameters was
freed already.
Now Guile-SSH bypasses libssh logging altogether, calling a Scheme logging
callback right away -- that provides more control over Scheme objects and
allows to keep them from GC'ing.
** Fix "random" errors and segfaults in channels
Guile-SSH would sometimes fail with segmentation faults and other errors
when a remote side is abruptly closed the connection and the client side
still tries to read data.
Now in that situation reading a Guile-SSH channel results in EOF.
** Fix test failures due to 'primitive-fork' calls
SRFI-64 doesn't really like tests that spawn new processes and try to do
stuff after 'primitive-fork' without calling 'execle' (or similar)
procedure: sometimes a test would fail even when all its test cases where
successful.
Now that should be fixed.
** Fix the tests for Guile 3.0.7
There are differences in REPL welcome message between Guile 3.0.7 and older
versions. Now this difference is handled properly.
Reported by Ludovic Courtès in
<https://github.com/artyom-poptsov/guile-ssh/issues/28>
** Fix the tests for Guile 3.0.5
The test-runner object is now reset to #f when calling the 'test-end'
procedure. See the commit de5d1a7f99b8e952b115237ebc29633062f99bb9 in Guile
(srfi-64: Reset test-runner-current if done) which introduced this change.
** The Guile-SSH building process now less verbose
** Update documentation
* Changes in version 0.13.1 (2020-08-19)
** Fix segfaults on GC'ing
The library would always fail with segmentation fault when the GC tried to
free Guile-SSH session when Guile-SSH channels related to this sessions
were in use.
Now live channels prevent the keep Guile-SSH session from freeing.
** Channels procedures now check if the parent session is alive
Channels procedures now check if the parent session is alive and
connected. If this is not the case, an guile-ssh-error is issued.
* Changes in version 0.13.0 (2020-07-18)
** API change: 'call-with-ssh-forward' does not start a thread
The procedure does not start a thread because multi-threading with libssh
sometimes leads to random segfaults.
Now 'call-with-ssh-forward' calls the provided procedure with a channel as
an argument instead.
If you wish to have a socket that forwards all the data to the remote side
through an SSH channel, you should implement a separate process that
forwards the data. There is an example in the directory 'examples/rpc' that
shows how to implement such a forwarding.
** API change: add 'nodelay' option for Guile-SSH sessions
Thanks to Lars-Dominik Braun.
** Fix some random segfaults in the channel and session code
** Add support for macOS
Now Guile-SSH can be installed on macOS through a Homebrew Tap:
https://github.com/aconchillo/homebrew-guile
Thanks to Aleix Conchillo Flaqué!
** Disable libguile-ssh static library
This change is a part of poring Guile-SSH to macOS.
** Don't use deprecated libssh procedures
Add additional checks that replace deprecated procedures with the new ones
when newer libssh library is present.
** Changes in documentation
Fix Texinfo warnings.
* Changes in version 0.12.0 (2020-01-05)
** API change: Implement new version of the RREPL API
As proposed by Ludovic Courtès, this Guile-SSH version includes an
implementation of a new stateless RREPL.
** New module: (ssh agent)
The module contains procedures for interaction with running SSH agent
instances.
** Prepare for Guile 2.9/3.0
Allow to build Guile-SSH with Guile versions 2.0, 2.2, 3.0.
Pull request has been made by Ludovic Courtès in
<https://github.com/artyom-poptsov/guile-ssh/pull/14>
** Remove bundled SRFI-64
This test framework is included in Guile since version 2.0.12.
This request has been made by Ludovic Courtès in
<https://github.com/artyom-poptsov/guile-ssh/pull/14>
** Cross-compilation support
Now Guile-SSH should allow cross-compilation.
Pull request has been made by Mathieu Othacehe in
<https://github.com/artyom-poptsov/guile-ssh/pull/16>
** Changes in (ssh auth):
*** New procedure 'userauth-gssapi!'
The procedure allows to authenticate through GSSAPI (Generic Security
Services Application Program Interface.)
Pull request has been made by Lars-Dominik Braun in
<https://github.com/artyom-poptsov/guile-ssh/pull/15>
** Generic compilation fixes
Fix some warnings that surface during compilation and linking.
** Bugfixes
*** Fix a segfault in 'libguile-ssh'
The library would always fail with segmentation fault error when an
application tried to free a closed channel. Now it should be fixed.
Reported by Michael Bowcutt <[email protected]> in
<https://github.com/artyom-poptsov/guile-ssh/issues/8>
and Njagi Mwaniki in a personal email.
*** Fix building with libssh 0.8
The 'libguile-ssh' library would fail to build due to missing
'libssh_threads' library that was removed libssh 0.8. Now 'libguile-ssh'
builds without 'libssh_threads' when using libssh 0.8+.
Reported by lantw44 in
<https://github.com/artyom-poptsov/guile-ssh/issues/9>
*** Fix failing tests
Tests would fail from time to time due to problems with an implementation
of the Guile-SSH testing framework. Now Guile-SSH uses updated (and
hopefully better) version of tests; that should fix most of the failures.
Reported by Pilifer, Carl Dong and Vagrant Cascadian in
<https://github.com/artyom-poptsov/guile-ssh/issues/12>
* Changes in version 0.11.3 (2018-03-27)
** Bugfixes
*** 'node-run-server' now checks for errors
When 'node-run-server' fails to start the server it would go down an
infinite loop. The procedure now checks if the RREPL server started
correctly and throws 'node-error' if it's not.
Reported by Marius Bakke and Ludovic Courtès, in
<https://bugs.gnu.org/30522>
* Changes in version 0.11.2 (2017-06-18)
** Bugfixes
*** Always reset the channel and sftp streams when closing ports
In Guile 2.2 objects (and thus Guile-SSH channels) are finalized in a
separate finalizer thread, but libssh does not work properly in such a
multi-threaded fashion -- which leads to segfaults in Guile-SSH.
To address that problem the following changes are made:
- In (ssh dist node) REPL channels opened in 'node-eval' are closed
explicitly.
- Channels and SFTP streams are always reset when closing ports.
Thanks to Ludovic Courtès for the patches!
Reported by Ludovic Courtès and Mark H Weaver, in
<https://bugs.gnu.org/26976>
*** In (ssh dist node)
**** 'node-guile-version' now does not fail
The procedure would always fail to get Guile version. Now that should be
fixed.
Reported by Mark H Weaver and Ludovic Courtès, in
<https://bugs.gnu.org/26976>
*** In (ssh session)
**** 'session-set!' now throws an option with its value on an error
*** In (ssh channel)
**** Printing a channel now works with Guile 2.2
**** 'channel-get-exit-status' handle freed channels properly
'channel-get-exit-status' now handles freed channels properly by throwing
'wrong-type-arg' error.
**** Printing a freed channel doesn't lead to SIGSEGV anymore
Guile-SSH would always crash with SIGSEGV errors when tried to print a
freed channel object (e.g. after calling 'close' on a channel). This bug
is fixed now by introducing new checks.
Now a freed channel will be printed like this:
#<unknown channel (freed) 9412f0>
** Update unit tests
*** Add test cases for fixed bugs
** Misc
*** Improve logging
* Changes in version 0.11.1 (2017-05-09)
** Bugfixes
*** Fix building scripts
The building process would always fail on fresh source tree because
'configure' tried to make a symlink or a copy of files that were not
present yet. This should be fixed by now.
Reported by Ludovic Courtès, on #guix IRC channel.
* Changes in version 0.11.0 (2017-05-09)
** Add support of Guile 2.2
Tested with GNU Guile version 2.0.14 (on Gentoo GNU/Linux) and
2.2.2.3-0c102 (on Debian GNU/Linux.)
Many thanks to Ludovic Courtès for patches!
** New module (ssh shell)
The module provides some procedures build upon (ssh popen) module for
working with remote shell.
** Bugfixes
*** In (ssh tunnel)
**** 'main-loop' now handles "interrupted system call" errors
that sometimes occur on 'select' call.
*** In (ssh dist node)
***** 'rrepl-get-result' now handles compilation errors
The procedure would always fail to read compilation errors properly
because it considered the message as "undefined" result. Now this bug
should be fixed.
An example of an error that now should be handled is "no code for module"
due to using a non-existing module in 'with-ssh' expression.
Reported by Mathieu, in
<https://github.com/artyom-poptsov/guile-ssh/issues/3>
***** 'rrepl-get-result' now handles "unbound variable" errors
The procedure would always fail to read "unbound variable" errors
properly, returning wrong result with only two values (current module
name and current language name). Now this bug should be fixed.
Reported by Mathieu, in
<https://github.com/artyom-poptsov/guile-ssh/issues/3>
***** 'rrepl-get-result' now handles unknown # objects
The procedure would always fail to read unknown objects (e.g. instances
of Guile-SSH session) properly, raising an obscure errors like
"Unknown # object: #\<". Now the procedure raises 'node-repl-error'
with full evaluation result gotten from RREPL.
Reported by Mathieu, in
<https://github.com/artyom-poptsov/guile-ssh/issues/3>
** Changes in (ssh dist node)
*** 'node-eval' now can work without procps
The procedure now checks if procps package is present on a node and uses
fallback Guile-SSH implementation of 'pgrep' and 'pkill' if it is not.
The fallback implementation of 'pgrep' is built upon pure bash, and
'pkill' in addition requires Guile itself on the remote side.
*** New procedure 'node-loadavg'
The procedure can be used to get average load of a node.
** Changes in (ssh dist)
Procedures in the module now are capable of checking presence of procps
package on a remote side and switching to fallback implementation of some
of the procps tools when the package is not present -- thanks to updated
'node-eval' procedure (see above.)
At the end of the day it means that now the code can start/stop Guile REPL
server on a remote side even without procps installed.
** Update unit tests
*** Add test cases for (ssh shell) module
** Update documentation
*** Add documentation for (ssh shell) module
*** Describe project goals in "Introduction" section
* Changes in version 0.10.2 (2016-11-25)
** New procedures
*** New procedure 'channel-send-eof' in (ssh channel)
The procedure allows to send end-of-file (EOF) on a channel. This action
doesn't close the channel; you may still read from it but not write.
'channel-send-eof!' is handy when we deal with a remote command that reads
data until EOF (such as 'wc'.)
** Documentation
*** Add procedure index
** Misc
*** Fixed several compilation warnings
* Changes in version 0.10.1 (2016-10-09)
** Bugfixes
*** Fix SMOB freeing callbacks
Callbacks for many Guile-SSH objects would always fail to free allocated
resources due to wrong check added in 0.10.0. The problem should be fixed
now.
** Change default 'guilesitedir' to 'PREFIX/share/guile/site/X.Y'
from 'PREFIX/share/guile-ssh/ssh/'
* Changes in version 0.10.0 (2016-08-20)
** Add support of Guile 2.0.12
Guile-SSH now builds (and works quite well, as far as I can see) with Guile
2.0.9 and 2.0.12. Unit tests are passing too.
Tested on:
- Gentoo GNU/Linux, Guile 2.0.12-r1, libssh 0.7.3
- Gentoo GNU/Linux, Guile 2.0.9-r1, libssh 0.7.3
** Add support of libssh 0.7.3
Guile-SSH now supports libssh 0.7.3 and (probably) newer versions; haven't
tested.
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
may still use 0.6.4, you really should stick with 0.7.3+ for aforementioned
reason. 0.7.3 is already should be in your distro's repository, so that
won't be a big deal I guess.
** Bugfixes
*** (ssh dist node)
**** 'node-server-running?' now checks the default port
The procedure now checks for Guile server running on the default port
(that is, with '--listen' option without an argument), if that port was
specified for the node.
*** Fix include errors and misspecified inline procedures in C code
These errors lead to build failures (reported on Arch GNU/Linux, see
<https://github.com/artyom-poptsov/guile-ssh/issues/1>.)
*** Don't merge stderr with stdout in remote pipes
See <https://github.com/artyom-poptsov/guile-ssh/issues/2>.
** Examples
*** Add 'uptop' example
** Update documentation
** Unit tests
Expand test suite, improve existing tests. Namely tests now don't always
fail when '-j' option is used with 'make check', with value greater than 1
(e.g. '-j4'; tested on Gentoo GNU/Linux, 4-core Intel Atom CPU)
Though sometimes tests fail, so there's still a room for improvement.
Another improvement is that SRFI-64 module and Guile-SSH common test module
are now compiled before use, that should speed up the tests.
* Changes in version 0.9.0 (2015-12-24)
** Bugfixes
*** Fix a bug in distributed forms in handling of REPL errors
Distributed procedures now throw an 'node-repl-error' on an evaluation
error instead of returning of an unspecified value.
*** Fix a bug in handling of strings in distributed forms
The 'rrepl-eval' was always failing to send sexps that contain strings in
the proper way because the procedure uses the human-readable printing to
transmit the data. As the result an RREPL fails to evaluate it and
reports an error. The bug is fixed by switching to the machine-readable
data printing.
*** 'dist-map' and 'distribute' now raise an error if an evaluation failed
instead of silently return an empty list.
*** 'channel-listen-forward' now returns a correct port number
'channel-listen-forward' would always return garbage as the 2nd argument
when called with port > 0. Now when the port is explicitly specified then
the procedure returns the specified port as the 2nd argument.
*** Add missing export of 'node-tunnel' from (ssh dist node) module
** Changes in API
*** Distributed forms now return the number of evaluation as a number
instead of string.
*** 'with-ssh' is now capable of handling of multiple values
'with-ssh' now returns a vector of values if an expression was evaluated to
multiple values. 'distribute' and 'dist-map' only take the 1st value if
multiple values were returned by an expression.
*** Nodes are now capable of starting and stopping a remote REPL (RREPL)
The new behaviour is controlled by 'start-repl-server?' and
'stop-repl-server?' keyed options of 'make-node'. Stopping of a RREPL
server is disabled by default.
*** Channels now can be created as input, output or bi-drectional ports
The direction of a channel is controlled by the 2nd argument to
'make-channel' procedure.
*** 'make-session' now takes 'config' option
that allows to specify whether the SSH config should be parsed or not, and
optionally the path to the config.
** New procedures
*** New procedure 'node-server-running?' in (ssh dist node)
*** New procedure 'node-run-server' in (ssh dist node)
*** New procedure 'node-stop-server' in (ssh dist node)
*** New procedure 'node-guile-version' in (ssh dist node)
*** New procedure 'session-parse-config!' in (ssh session)
** New modules
*** (ssh popen)
Remote popen interface to interact with remote processes.
*** (ssh sftp)
SFTP interface that allows to operate on remote files.
** Documentation
*** Move description of tunnels into a separate section
*** Add description of the new procedures
*** Update existing documentation
** Unit tests
*** Expand the test suite for distributed forms
*** Expand the test suite for tunnels
** Add the project logo
* Changes in version 0.8.0 (2015-08-04)
** Implement port forwarding
** Add distributed forms
** Require libssh 0.6.4 or 0.6.5
** New module: (ssh tunnel)
The module provides hi-level procedures for SSH tunneling.
** New module: (ssh dist)
The module provides distributed forms of 'map' and 'eval', as well as
remote REPL (RREPL) implementation.
** New module: (ssh dist job)
Low-level API for distributed jobs.
** New module: (ssh dist node)
Low-level API for distributed nodes.
** New procedure 'channel-accept-forward' in (ssh channel)
** New procedure 'channel-listen-forward' in (ssh channel)
** Remove 'channel-open-forward/reverse' procedure from (ssh channel)
** Examples
*** Add an RPC client example
Add an example program that does an RPC call over a secure channel using
a Guile-SSH tunnel. See 'examples/rpc' directory.
*** Add a RREPL example
Add a demo program that connects to a remote REPL (RREPL).
** Update documentation
* Changes in version 0.7.2 (2015-02-24)
** Remove dependency on libgcrypt added by a mistake
** Fix "double free or corruption" error on GC'ing of keys
Fix "double free or corruption" error that occures in case when a key was
derived from an authentication message by means of `message-get-req'. When
such a key is GC'ed then GC'ing of its parent message leads to error, or
vice versa.
** Fix a bug in the channel implementation
The bug could occasionally manifest itself on channel reading as the
following error:
#+BEGIN_EXAMPLE
guile: ports.c:1476: scm_i_fill_input: Assertion `pt->read_pos == pt->read_end' failed.
#+END_EXAMPLE
** New `server-get' procedure in (ssh server)
The procedure can be used to retrieve server options.
** New `channel-get-exit-status' procedure in (ssh channel)
The procedure allows to get exit status of an executed command from a
channel.
** New `channel-request-send-exit-status' procedure in (ssh channel)
The procedure can be used to send the exit status to a client.
** Improve printing of Guile-SSH server objects
Print the bind address of a server object and its bind port. Example:
#+BEGIN_EXAMPLE
#<server 127.0.0.1:12345 9b70ff0>
#+END_EXAMPLE
** Update examples
*** sssh
- Check exit status of an executed command.
*** ssshd
- Send exit status to the client according to the result of command
execution.
*** echo server and client
- Some cosmetic changes aimed to make the code cleaner.
** Update documentation
- Add description of the new procedures.
- Update examples.
* Changes in version 0.7.1 (2014-10-11)
** New `%get-libssh-version' procedure in (ssh version)
The procedure can be used to get libssh version in the "raw" format such
as: "0.6.3/openssl/zlib".
** New `get-crypto-library' procedure in (ssh version)
The procedure returns name of a cryptographic library with which libssh was
compiled.
** New `zlib-support?' procedure in (ssh version)
The procedure checks if zlib support is enabled in libssh.
** New `set-log-verbosity!' procedure in (ssh log)
The procedure sets global libssh log verbosity.
** New `get-log-verbosity' procedure in (ssh log)
The procedure gets global libssh log verbosity.
** New `make-keypair' procedure in (ssh key)
The procedure can be used to generate a new keypair with the specified
parameters.
** New `private-key-to-file' procedure in (ssh key)
The procedure can be used to export a private key to a file (doesn't work
if libssh 0.6.3 is compiled with GCrypt).
** Changes in tests
*** Fix "end of file" errors in tests
Fix the following kind of errors in tests:
#+BEGIN_EXAMPLE
ERROR: In procedure scm_i_lreadparen: /path/to/guile-ssh/sources/tests/./client-server.scm:272:34: end of file
#+END_EXAMPLE
Thanks to Ludovic Courtès for reporting the issue and for a good advice how
to fix that.
*** Don't perform ECDSA key tests if libssh is compiled with GCrypt
libssh 0.6.3 does not support ECDSA keys if compiled with GCrypt instead
of OpenSSL. Thus, ECDSA key tests used to fail. Now there is a check
that prevents these tests from execution in case when libssh 0.6.3 is
compiled with GCrypt.
** Update documentation
- Add description of the new procedures.
- Add note about ECDSA keys support with GCrypt library.
* Changes in version 0.7.0 (2014-08-31)
** Require GNU Guile 2.0
** Require libssh 0.6.3
** Change `get-public-key-hash'
*** Move the procedure to (ssh key)
*** Return the hash as a bytevector
*** Accept a public key as the first argument
*** Accept a hash type as the second argument
Possible types are: 'md5, 'sha1
** (ssh auth) procedures now throw an exception if the session is not connected
** (ssh channel) procedures now handle closed and freed channels
- `channel-open?' returns `#f' if the channel has been closed freed.
- `channel-open-session' and `channel-eof?' throw to `guile-ssh-error' if
the channel has been closed and freed.
- `channel-request-env', `channel-request-exec', `channel-request-pty',
`channel-request-shell', `channel-set-pty-size!', `channel-set-stream!',
`channel-get-stream' now throw `wrong-type-arg` if the channel is closed.
** Some (ssh session) procedures now throw an exception if the session is not connected
These procedures are:
- `get-protocol-version'
- `authenticate-server'
- `get-server-public-key'
- `write-known-host!'
** Change `userauth-pubkey!'
*** Rename it to `userauth-public-key!'
*** Change arguments
** `blocking-flush!' now returns `error' symbol on error
instead of throwing of an exception
** `connect!' now returns `error' symbol on error
instead of throwing of an exception
** `authenticate-server' now returns `error' symbol on error
instead of throwing of an exception
** `private-key-from-file' now takes only a file name
** New (ssh log) module
** Rename `userauth-pubkey-auto!' to `userauth-public-key/auto!'
** New `userauth-public-key/try' procedure in (ssh auth)
** New `bytevector->hex-string' procedure in (ssh key)
** New `channel-open-forward' procedure in (ssh channel)
** New `channel-open-forward/reverse' procedure in (ssh channel)
** New `session-get' procedure in (ssh session)
** New `channel-get-session' procedure in (ssh channel)
** New `message-get-session' procedure in (ssh message)
** Improve printing of Guile-SSH objects
*** Print more detailed information about `session' object
Print user name, host name and current state of a `session' object.
*** Print object address for `channel' object
*** Print object address for `message' object
*** Print object address for `key' object
** Changes in tests
*** Add tests for Guile-SSH keys
*** Add tests for `authenticate-server' procedure
** Bug fixes
*** Fix a GC issue
Keep a reference to the parent session in channels and messages to prevent
the session from premature GC'ing. Without that GC could free a session
even if there are live channels and by that break the channels.
*** `public-key?' and `private-key?' now produce correct result
Functions now return `#f' if the given argument is not a Guile-SSH
key object.
** Documentation update
*** Fix old URLs to Guile-SSH repository in the `Installation' chapter
*** Add an overview of programming with Guile-SSH to the "Examples" chapter
* Changes in version 0.6.0 (2014-03-23)
** Remove username from parameter list of auth procedures
`userauth-password!' and `userauth-pubkey!' don't take a username
as a parameter anymore. Rationale: According to libssh 0.6 docs,
most server implementations do not permit changing the username
during authentication. Moreover, the parameter was deprecated in
libssh 0.5.3.
Elimination of the username makes Guile-SSH Auth API clearer and
simpler. Username can be set either on creation of a session or by
calling of `session-set!' procedure.
** `server-accept' now throws `guile-ssh-error' on error
** Improve reads from channels
Return EOF immediately if the channel is closed instead of polling
it for data (which causes notable latency on the first read).
Thanks Ludovic Courtès for the patch.
** Compile Guile modules
Compile Guile modules and install compiled files if GNU Guile 2.0.x
is available.
** Update Texinfo documentation
*** Update Auth API description
*** Update Server API description
*** Update Acknowledgments
** Update examples
*** Use actual path to Guile interpreter in the shebang
Executables will be produced during building of the Guile-SSH.
*** Handle `guile-ssh-error' on `server-accept'
*** Catch `guile-ssh-error' on reading from a port
*** ssshd
**** Add `--port', `--ssh-debug' and `--pid-file' option
**** Store the PID in a file
instead of printing it to stdout.
**** Handle password authentication correctly
*** sssh
**** Add `--ssh-debug' option
** Improve automated tests
*** Prevent sssh-ssshd from asking of a SSH agent for keys
*** Make parallel tests work
* Changes in version 0.5.0 (2014-02-05)
** Implement Guile-SSH channels as GNU Guile ports.
Now channels can be used with regular procedures such as `display',
`write' and `read-line'.
** `session-set!' and `server-set!' now take log-verbosity as a symbol
Use symbols to represent log levels instead of numbers.
** Remove duplicates of some session options
Remove duplicates that are existed for some Guile-SSH session
options: `port-str' (duplicates `port', differs only in expected
type of value), `log-verbosity-str' (duplicates `log-verbosity',
differs only in expected type of value), `add-identity' (duplicates
`identity', no differences).
** New `userauth-autopubkey!' procedure.
The procedure can be used for public key authentication with a SSH
agent.
** New procedures.
`channel-set-stream!', `channel-get-stream', `session?', `server?',
`message?'.
** Remove procedures.
These procedures are removed due to changes in Guile-SSH channel
API: `close-channel!', `channel-poll' `free-channel!',
`channel-read`, `channel-write'.
** Add documentation in Texinfo format
The Guile-SSH reference manual in Info format will be installed on
`make install' into `${prefix}/share/info' directory.
** Update sssh/ssshd example.
*** `examples/sssh.scm' and `examples/ssshd.scm' are updated
to use the new Guile-SSH channel API.
*** `sssh.scm` now uses `userauth-autopubkey!'
*** `ssshd.scm' now parses command-line options
See `ssshd.scm --help'.
** Add echo server/client example.
See `examples/echo' directory.
** Add automated tests.
See `tests/' directory.
* Changes in version 0.4.0 (2013-11-26)
** Port the library to GNU Guile version 2.0
Now the library works with GNU Guile version 2.0 as well as 1.8.
** Remove "ssh:" prefix from procedures names.
If it is needed, an user's prefix can be added by setting a renamer
for a module on loading. See the documentation for the GNU Guile
module system.
** Implement basic SSH server API.
** Fix a memory corruption in `channel-read'
The problem was seen on reading of an output from "lsb_release -a"
command.
** Fix a memory corruption during GC'ing of SSH keys.
** Fix a bug in `session-set!'
Fix the bug that leads to an error if the user tried to set a
correct boolean option.
** New `channel-write' procedure.
** New `channel-request-pty' procedure.
** New `channel-request-shell' procedure.
** New `channel-set-pty-size!' procedure.
** Fix the name of `write-known-host!'
The procedure was called `authenticate-server' by mistake. Rename
it to `write-known-host!'.
** Change error handling in some procedures.
Now `write-known-host!', `channel-open-session',
`channel-request-exec', `channel-request-env', `close-channel!',
throw an exception on error. The return value of these procedures
now is undefined.
** `authenticate-server' now throws guile-ssh-error exception on error.
Don't return the 'error symbol, throw an exception instead.
** `server-set!' now throws guile-ssh-error exception on error.
The return value now is undefined.
** Rename `make-session' to `%make-session'.
See `make-session' below.
** New `make-session' procedure.
This is a convenient wrapper for `%make-session' which allows to
set session options by passing them as keywords.
** Rename `connect' to `connect!'.
** Fix a typo in an option symbol
'strcthostkeycheck -> 'stricthostkeycheck
** Fix an infinite loop in `public-key->string'.
The problem was observed on Ubuntu GNU/Linux 10.04 LTS.
** Add examples to the repository.
See the "examples/" directory.
** Improve printing of SSH keys, channels and messages.
Examples: #<public rsa key>, #<open ssh channel>
* Changes in version 0.3.1 (2013-07-14)
** Use a simpler method to GC'ing of SSH channels.
The idea is that we don't have to free resources allocated by a
channel during its GC'ing, because these resources will be freed
anyway when the related SSH session is GC'ed. However, to be able
to control allocating of resources more precisely, introduce new
procedure ssh:free-channel! that can be used for freeing resources
allocated by a channel.
** ssh:free-channel!
New procedure.
** Make the library thread-safe.
* Changes in version 0.3 (2013-07-13)
** Improve working with public keys.
Because some libssh functions are working with public keys
represented as a ssh_string instead of a ssh_public_key, we try to
hide this peculiarity so all kinds of keys are look like a <key>
class from the Scheme perspective.
** Fix segmentation faults on GC'ing of SSH objects.
The program doesn't crashes anymore during GC'ing of SSH objecs.
** ssh:public-key-from-file
Make it work. Return newly created <key> instance or #f on error.
** ssh:public-key->string
Take a key as a <key> instance.
** ssh:private-key-from-file
Fix call to an undefined procedure. Return #f on error.
** ssh:get-key-type
New procedure. The procedure returns type for a passed <key>
instance. Possible types are: 'dss, 'rsa, 'rsa1, 'unknown
** ssh:userauth-get-list
New procedure. The procedure returns a list of available
authentication methods for a given SSH session
** ssh:channel-read
Fix call to an undefined procedure. Throw guile-ssh-error
exception on error.
** ssh:close-channel!
Fix return value: return #t if channel is closed successfully, #f
otherwise.
** ssh:blocking-flush!
Return 'error by default.
** ssh:session-set!
Fix a bug with uint32 options setting.
** SSH objects now comparable.
* Changes in version 0.2 (2013-05-25)
** Release of the first stable version of Guile-SSH.
Local Variables:
mode: org
End: