]> Cypherpunks.ru repositories - nncp.git/blob - doc/news.texi
Take via into account when transitioning
[nncp.git] / doc / news.texi
1 @node News
2 @unnumbered News
3
4 See also this page @ref{Новости, on russian}.
5
6 @node Release 7_2_0
7 @section Release 7.2.0
8 @itemize
9
10 @item
11 @command{nncp-trns} command appeared for manual transition packets creation.
12
13 @item
14 If destination node of transitional packet has non empty @option{via}
15 route, then do not ignore, but use it.
16
17 @end itemize
18
19 @node Release 7_1_1
20 @section Release 7.1.1
21 @itemize
22
23 @item
24 Fixed failing directories fsync after @file{.seen} file creation.
25
26 @end itemize
27
28 @node Release 7_1_0
29 @section Release 7.1.0
30 @itemize
31
32 @item
33 Multicasting areas feature appeared. Implemented merely by an additional
34 plain packet type with @command{nncp-toss}, @command{nncp-file} and
35 @command{nncp-exec} commands modification.
36
37 @item
38 Fixed workability of @command{nncp-file} and @command{nncp-exec}
39 commands, that use temporary file (stdin and @option{-use-tmp}).
40
41 @item
42 Fixed disappearing bad return code in @command{nncp-exec} command.
43
44 @item
45 Fixed invalid @file{.hdr} generation when transitional packets are used.
46
47 @item
48 @option{-all} option appeared in @command{nncp-rm} command, applying to
49 all the nodes at once.
50
51 @item
52 @option{-cycle} option appeared in @command{nncp-check} command, looping
53 the check in infinite cycle.
54
55 @item
56 @command{nncp-rm} command can take node alias name.
57
58 @item
59 @command{nncp-pkt} can parse @file{.hdr} files.
60
61 @end itemize
62
63 @node Release 7_0_0
64 @section Release 7.0.0
65 @itemize
66
67 @item
68 Minimal required Go version 1.13.
69
70 @item
71 Merkle Tree-based Hashing with BLAKE3 (MTH) is used instead of BLAKE2b.
72 Because of that, there are backward @strong{incompatible} changes of
73 encrypted files (everything laying in the spool directory) and
74 @file{.meta} files of chunked transfer.
75
76 Current implementation is far from being optimal: it lacks
77 parallelizable calculations and has higher memory consumption: nearly
78 512 KiB for each 1 GiB of file's data. Future performance and memory
79 size optimizations should not lead to packet's format change. But it is
80 still several times faster than BLAKE2b.
81
82 @item
83 Resumed online downloads, because of MTH, require reading only of the
84 preceding part of file, not the whole one as was before.
85
86 @item
87 @command{nncp-hash} utility appeared for calculating file's MTH hash.
88
89 @item
90 BLAKE2 KDF and XOF functions are replaced with BLAKE3 in encrypted
91 packets. Lowering number of used primitives. Also, its encrypted
92 packet's header is used as an associated data during encryption.
93
94 @item
95 MultiCast Discovery uses
96 @verb{|ff02::4e4e:4350|} address instead of @verb{|ff02::1|}.
97
98 @item
99 @command{nncp-cfgenc} mistakenly asked passphrase three times during encryption.
100
101 @item
102 @command{nncp-stat} reports about partly downloaded packets.
103
104 @item
105 Updated dependencies.
106
107 @end itemize
108
109 @node Release 6_6_0
110 @section Release 6.6.0
111 @itemize
112
113 @item
114 @command{nncp-daemon}, @command{nncp-call} and @command{nncp-caller}
115 commands wait for all background checksummers completion after
116 connection is finished.
117
118 @item
119 Added possibility of address determining through multicast announcement
120 in local area network, so called MCD (MultiCast Discovery).
121
122 @end itemize
123
124 @node Release 6_5_0
125 @section Release 6.5.0
126 @itemize
127
128 @item
129 Fixed segfault in @command{nncp-daemon} when SP handshake did not succeed.
130
131 @item
132 Fixed possible bad return code ignoring in automatic tosser.
133
134 @item
135 Fixed race during file descriptors closing when online protocol call is
136 finished, that could lead to write error of received packet fragment.
137
138 @item
139 Kill all packet transmission progress bars in @command{nncp-daemon},
140 @command{nncp-call} and @command{nncp-caller} when call is finished.
141
142 @end itemize
143
144 @node Release 6_4_0
145 @section Release 6.4.0
146 @itemize
147
148 @item
149 Fixed possible race in online protocol, that lead to panic.
150
151 @end itemize
152
153 @node Release 6_3_0
154 @section Release 6.3.0
155 @itemize
156
157 @item
158 Fixed possible panic while showing progress during online protocol.
159
160 @end itemize
161
162 @node Release 6_2_1
163 @section Release 6.2.1
164 @itemize
165
166 @item
167 Three places in logs contained excess @code{%s}.
168
169 @end itemize
170
171 @node Release 6_2_0
172 @section Release 6.2.0
173 @itemize
174
175 @item
176 Returned @command{nncp-caller}'s @option{-autotoss*} options workability.
177
178 @item
179 Yet another logging refactoring and simplification.
180 Should be no visible differences to the end user.
181
182 @end itemize
183
184 @node Release 6_1_0
185 @section Release 6.1.0
186 @itemize
187
188 @item
189 Optimization: most commands do not keep opened file descriptors now.
190 Previously you can exceed maximal number of opened files if you have got
191 many packets in the spool directory.
192
193 @item
194 Optimization: do not close file descriptor of the file we download
195 online. Previously each chunk lead to expensive open/close calls.
196
197 @item
198 Online downloaded files are saved with @file{.nock} (non-checksummed)
199 suffix, waiting either for @command{nncp-check}, or online daemons to
200 perform integrity check.
201
202 @item
203 Optimization: files, that are not resumed, are checksummed immediately
204 during the online download, skipping @file{.nock}-intermediate step.
205
206 @item
207 Ability to store encrypted packet's header in @file{.hdr} file, close to
208 the packet itself. That can greatly increase performance of packets
209 listing on filesystems with big block's size.
210
211 @end itemize
212
213 @node Release 6_0_0
214 @section Release 6.0.0
215 @itemize
216
217 @item
218 Log uses human readable and easy machine parseable
219 @url{https://www.gnu.org/software/recutils/, recfile} format for the
220 records, instead of structured RFC 3339 lines. Old logs are not readable
221 by @command{nncp-log} anymore.
222
223 @item
224 @option{-autotoss*} option workability with @command{nncp-daemon}'s
225 @option{-inetd} mode.
226
227 @item
228 Call's @option{when-tx-exists} allows to make a call only when outbound
229 packets exists. Combined with seconds-aware cron expression that can be
230 used as some kind of auto dialler.
231
232 @item
233 @command{nncp-cronexpr} command allows you to check validity and
234 expectations of specified cron expression.
235
236 @end itemize
237
238 @node Release 5_6_0
239 @section Release 5.6.0
240 @itemize
241
242 @item
243 @option{-autotoss*} option runs tosser not after the call, but every
244 second while it is active.
245
246 @item
247 @option{autotoss}, @option{autotoss-doseen},
248 @option{autotoss-nofile}, @option{autotoss-nofreq},
249 @option{autotoss-noexec}, @option{autotoss-notrns} options available in
250 @option{calls} configuration section. You can configure per-call
251 automatic tosser options.
252
253 @item
254 Use vendoring, instead of @env{GOPATH} overriding during tarball
255 installation, because current minimal Go's version is 1.12 and it
256 supports modules.
257
258 @end itemize
259
260 @node Release 5_5_1
261 @section Release 5.5.1
262 @itemize
263
264 @item
265 Respect for @env{BINDIR}, @env{INFODIR} and @env{DOCDIR} environment
266 variables in @file{config} during installation.
267
268 @end itemize
269
270 @node Release 5_5_0
271 @section Release 5.5.0
272 @itemize
273
274 @item
275 Bugfixes in @command{nncp-call(er)}/@command{nncp-daemon},
276 @command{nncp-bundle} and @command{nncp-stat}.
277
278 @item
279 @command{nncp-rm} has @option{-dryrun} and @option{-older} options now.
280
281 @item
282 @command{nncp-exec} has @option{-use-tmp} and @option{-nocompress}
283 options now. Uncompressed packets are not compatible with previous NNCP
284 versions.
285
286 @item
287 @command{nncp-call}, @command{nncp-caller} and @command{nncp-daemon} commands
288 have @option{-autotoss*} options for running tosser after call is ended.
289
290 @item
291 Updated dependencies. Minimal required Go version is 1.12.
292
293 @end itemize
294
295 @node Release 5_4_1
296 @section Release 5.4.1
297 @itemize
298
299 @item
300 Fixed @code{SENDMAIL} variable usage during the build.
301
302 @end itemize
303
304 @node Release 5_4_0
305 @section Release 5.4.0
306 @itemize
307
308 @item
309 Updated dependencies.
310
311 @item
312 Build system is moved from Makefiles to @url{http://cr.yp.to/redo.html, redo}.
313 This should not influence package maintainers, because minimal @command{redo}
314 implementation is included in tarball.
315
316 @end itemize
317
318 @node Release 5_3_3
319 @section Release 5.3.3
320 @itemize
321
322 @item
323 More various error checks.
324
325 @item
326 Updated dependencies.
327
328 @end itemize
329
330 @node Release 5_3_2
331 @section Release 5.3.2
332 @itemize
333
334 @item
335 Fixed incorrect logic of @option{onlinedeadline} timeout, where
336 connection won't take into account incoming packets events and will
337 forcefully disconnect.
338
339 @end itemize
340
341 @node Release 5_3_1
342 @section Release 5.3.1
343 @itemize
344
345 @item
346 Fixed @option{onlinedeadline} workability with call addresses that use
347 external commands (@verb{#"|somecmd"#}).
348
349 @item
350 @command{nncp-stat} has @option{-pkt} option displaying information
351 about each packet in the spool.
352
353 @end itemize
354
355 @node Release 5_3_0
356 @section Release 5.3.0
357 @itemize
358
359 @item
360 Progress messages contain prefix, describing the running action.
361
362 @item
363 Fixed not occurring handshake messages padding.
364
365 @item
366 Finish all SP protocol related goroutines, less memory leak.
367
368 @item
369 SP protocol generates less socket write calls, thus generating less TCP
370 packets.
371
372 @item
373 Check @option{onlinedeadline} and @option{maxonlinetime} options every
374 second, independently from socket reads (up to 10 seconds).
375
376 @item
377 Once per minute, if no other traffic exists, PING packets are sent in
378 SP-connection. That allows faster determining of connection unworkability.
379
380 @item
381 @command{nncp-toss} uses lock-file to prevent simultaneous tossing.
382
383 @end itemize
384
385 @node Release 5_2_1
386 @section Release 5.2.1
387 @itemize
388
389 @item
390 Fixed SP protocol error handling, sometimes causing program panic.
391
392 @end itemize
393
394 @node Release 5_2_0
395 @section Release 5.2.0
396 @itemize
397
398 @item
399 Most commands by default show oneline operations progress.
400 @option{-progress}, @option{-noprogress} command line options,
401 @option{noprogress} configuration file option appeared.
402
403 @item
404 Fixed incorrect @command{nncp-check} command return code, that returned
405 bad code when everything is good.
406
407 @item
408 Free disk space check during @command{nncp-bundle -rx} call.
409
410 @end itemize
411
412 @node Release 5_1_2
413 @section Release 5.1.2
414 @itemize
415
416 @item
417 @strong{Critical} vulnerability: remote peers authentication could lead
418 to incorrect identification of remote side, allowing foreign encrypted
419 packets downloading.
420
421 @item
422 Bugfix: private and public Noise keys were swapped in newly created
423 configuration files, that lead to inability to authenticate online peers.
424
425 @item
426 Explicit directories fsync-ing for guaranteed files renaming.
427
428 @end itemize
429
430 @node Release 5_1_1
431 @section Release 5.1.1
432 @itemize
433
434 @item
435 Fixed workability of @command{nncp-file} with @option{-chunked 0} option.
436
437 @end itemize
438
439 @node Release 5_1_0
440 @section Release 5.1.0
441 @itemize
442
443 @item
444 @command{nncp-file} can send directories, automatically creating pax
445 archive on the fly.
446
447 @item
448 Free disk space is checked during outbound packets creation.
449
450 @item
451 @option{freq}, @option{freqminsize}, @option{freqchunked} configuration
452 file options replaced with the structure:
453 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
454
455 @item
456 Added @option{freq.maxsize} configuration file option, forbidding of
457 freq sending larger than specified size.
458
459 @item
460 Ability to notify about successfully executed commands (exec) with
461 @option{notify.exec} configuration file option.
462
463 @end itemize
464
465 @node Release 5_0_0
466 @section Release 5.0.0
467 @itemize
468
469 @item
470 @strong{Incompatible} configuration file format change: YAML is
471 replaced with Hjson, due to its simplicity, without noticeable lack
472 of either functionality or convenience.
473
474 @item
475 @strong{Incompatible} plain packet format changes. Older versions are
476 not supported. @code{zlib} compression is replaced with
477 @code{Zstandard}, due to its speed and efficiency, despite library
478 version is not mature enough.
479
480 @item
481 Ability to call remote nodes via pipe call of external command, not only
482 through TCP.
483
484 @item
485 @command{nncp-cfgnew} generates configuration file with many
486 comments. @option{-nocomments} option can be used for an old
487 behaviour.
488
489 @item
490 Duplicate filenames have @file{.CTR} suffix, instead of @file{CTR}, to
491 avoid possible collisions with @file{.nncp.chunkCTR}.
492
493 @item
494 Ability to override process umask through configuration file option.
495
496 @item
497 Files and directories are created with 666/777 permissions by default,
498 allowing control with @command{umask}.
499
500 @item
501 Updated dependencies.
502
503 @item
504 Full usage of go modules for dependencies management
505 (@code{go.cypherpunks.ru/nncp/v5} namespace is used).
506
507 @item
508 Forbid any later GNU GPL version autousage
509 (project's licence now is GNU GPLv3-only).
510
511 @end itemize
512
513 @node Release 4_1
514 @section Release 4.1
515 @itemize
516 @item Workability on GNU/Linux systems and Go 1.10 is fixed.
517 @end itemize
518
519 @node Release 4_0
520 @section Release 4.0
521 @itemize
522
523 @item
524 @strong{Incompatible} encrypted and eblob packet format change: AEAD
525 encryption mode with 128 KiB blocks is used now, because previously
526 @command{nncp-toss} did not verify encrypted packet's MAC before feeding
527 decrypted data to external command. Older versions are not supported.
528
529 @item
530 Available free space checking before copying in @command{nncp-xfer},
531 @command{nncp-daemon}, @command{nncp-call(er)}.
532
533 @item
534 @command{nncp-call} has ability only to list packets on remote node,
535 without their transmission.
536
537 @item
538 @command{nncp-call} has ability to transfer only specified packets.
539
540 @item
541 Workability of @option{xxrate} preference in @option{calls}
542 configuration file section.
543
544 @item
545 Dependant libraries are updated.
546
547 @item
548 Minor bugfixes.
549
550 @item
551 Begin using of @code{go.mod} subsystem.
552
553 @end itemize
554
555 @node Release 3_4
556 @section Release 3.4
557 @itemize
558 @item @command{nncp-daemon} can be run as @command{inetd}-service.
559 @end itemize
560
561 @node Release 3_3
562 @section Release 3.3
563 @itemize
564
565 @item
566 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller} check
567 if @file{.seen} exists and treat it like file was already downloaded.
568 Possibly it was transferred out-of-bound and remote side needs to be
569 notifier about that.
570
571 @item
572 If higher priority packet is spooled, then @command{nncp-daemon} will
573 queue its sending first, interrupting lower priority transmissions.
574
575 @item
576 Simple packet rate limiter added to online-related tools
577 (@command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}).
578
579 @item
580 Ability to specify niceness with symbolic notation:
581 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, etc.
582
583 @item
584 Changed default niceness levels:
585 for @command{nncp-exec} from 64 to 96,
586 for @command{nncp-freq} from 64 to 160,
587 for @command{nncp-file} from 196 to 224.
588
589 @end itemize
590
591 @node Release 3_2
592 @section Release 3.2
593 @itemize
594 @item
595 @strong{Incompatible} @emph{bundle} archive format changes and
596 @command{nncp-bundle} workability with Go 1.10+. Bundles must be
597 valid tar archives, but Go 1.9 made them invalid because of long paths
598 inside. NNCP accidentally was dependant on that bug. Explicit adding of
599 @file{NNCP/} directory in archive restores workability with valid tar
600 archives.
601 @end itemize
602
603 @node Release 3_1
604 @section Release 3.1
605 @itemize
606 @item
607 Ability to disable relaying at all using @verb{|-via -|} command line option.
608 @end itemize
609
610 @node Release 3_0
611 @section Release 3.0
612 @itemize
613
614 @item
615 @strong{Incompatible} plain packet format changes. Older versions are
616 not supported.
617
618 @item
619 Ability to queue remote command execution, by configuring @option{exec}
620 option in configuration file and using @command{nncp-exec} command:
621     @itemize
622     @item
623     @command{nncp-mail} command is replaced with more flexible
624     @command{nncp-exec}. Instead of @verb{|nncp-mail NODE RECIPIENT|}
625     you must use @verb{|nncp-exec NODE sendmail RECIPIENT|}.
626     @item
627     @option{sendmail} configuration file option is replaced with
628     @option{exec}. @verb{|sendmail: [...]|} must be replaced with
629     @verb{|exec: sendmail: [...]|}.
630     @end itemize
631
632 @item
633 Ability to override @option{via} configuration option for destination
634 node via @option{-via} command line option for following commands:
635 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
636
637 @item
638 Chunked files, having size less than specified chunk size, will be sent
639 as an ordinary single file.
640
641 @item
642 Exec commands are invoked with additional @env{NNCP_NICE} and
643 @env{NNCP_SELF} environment variables.
644
645 @item
646 Files, that are sent as a reply to freq, have niceness level taken from
647 the freq packet. You can set desired niceness during @command{nncp-freq}
648 invocation using @option{-replynice} option.
649
650 @item
651 @command{nncp-toss} command can ignore specified packet types during
652 processing: @option{-nofile}, @option{-nofreq}, @option{-noexec},
653 @option{-notrns}.
654
655 @item
656 @command{nncp-file} command uses
657 @option{FreqMinSize}/@option{FreqChunked} configuration file options
658 for @option{-minsize}/@option{-chunked} by default. You can turn this
659 off by specifying zero value.
660
661 @end itemize
662
663 @node Release 2_0
664 @section Release 2.0
665 @itemize
666
667 @item
668 @strong{Incompatible} encrypted/eblob packet format changes. Older
669 versions are not supported.
670
671 @item
672 Twofish encryption algorithm is replaced with ChaCha20. It is much more
673 faster. One cryptographic primitive less.
674
675 @item
676 HKDF-BLAKE2b-256 KDF algorithm is replaced with BLAKE2Xb XOF. Yet
677 another cryptographic primitive less (assuming that BLAKE2X is nearly
678 identical to BLAKE2).
679
680 @end itemize
681
682 @node Release 1_0
683 @section Release 1.0
684 @itemize
685
686 @item
687 @strong{Incompatible} encrypted packet format changes. Older versions
688 are not supported.
689
690 @item
691 @command{nncp-bundle} command can either create stream of encrypted
692 packets, or digest it. It is useful when dealing with
693 @code{stdin}/@code{stdout} based transmission methods (like writing to
694 CD-ROM without intermediate prepared ISO image and working with tape
695 drives).
696
697 @item
698 @command{nncp-toss} is able to create @file{.seen} files preventing
699 duplicate packets receiving.
700
701 @item
702 Single background checksum verifier worker is allowed in
703 @command{nncp-call}. This is helpful when thousands of small inbound
704 packets could create many goroutines.
705
706 @item
707 Ability to override path to spool directory and logfile through either
708 command line argument, or environment variable.
709
710 @item
711 @command{nncp-rm} is able to delete outbound/inbound, @file{.seen},
712 @file{.part}, @file{.lock} and temporary files.
713
714 @end itemize
715
716 @node Release 0_12
717 @section Release 0.12
718 @itemize
719 @item Sendmail command is called with @env{NNCP_SENDER} environment variable.
720 @end itemize
721
722 @node Release 0_11
723 @section Release 0.11
724 @itemize
725 @item @command{nncp-stat}'s command output is sorted by node name.
726 @end itemize
727
728 @node Release 0_10
729 @section Release 0.10
730 @itemize
731 @item
732 @command{nncp-freq}'s @file{DST} argument is optional now. Last
733 @file{SRC} path's element will be used by default.
734 @end itemize
735
736 @node Release 0_9
737 @section Release 0.9
738 @itemize
739 @item
740 Fix @option{-rx}/@option{-tx} arguments processing in
741 @command{nncp-call} command. They were ignored.
742 @end itemize
743
744 @node Release 0_8
745 @section Release 0.8
746 @itemize
747 @item
748 Little bugfix in @command{nncp-file} command, where @option{-minsize}
749 option for unchunked transfer was not in KiBs, but in bytes.
750 @end itemize
751
752 @node Release 0_7
753 @section Release 0.7
754 @itemize
755
756 @item
757 Ability to feed @command{nncp-file} from @code{stdin}, that uses an
758 encrypted temporary file for that.
759
760 @item
761 Chunked files transmission appeared with corresponding
762 @command{nncp-reass} command and @option{freqchunked} configuration file
763 entry. Useful for transferring big files over small storage devices.
764
765 @item
766 @option{freqminsize} configuration file option, analogue to
767 @option{-minsize} one.
768
769 @item
770 @command{nncp-xfer}'s @option{-force} option is renamed to
771 @option{-mkdir} for clarity.
772
773 @item
774 @option{-minsize} option is specified in KiBs, not bytes, for
775 convenience.
776
777 @item
778 @command{nncp-newcfg} command is renamed to @command{nncp-cfgnew},
779 and @command{nncp-mincfg} to @command{nncp-cfgmin} -- now they have
780 common prefix and are grouped together for convenience.
781
782 @item
783 @command{nncp-cfgenc} command appeared, allowing configuration file
784 encryption/decryption, for keeping it safe without any either OpenPGP or
785 similar tools usage.
786
787 @item
788 Cryptographic libraries (dependencies) are updated.
789
790 @end itemize
791
792 @node Release 0_6
793 @section Release 0.6
794 @itemize
795 @item Small @command{nncp-rm} command appeared.
796 @item Cryptographic libraries (dependencies) are updated.
797 @end itemize
798
799 @node Release 0_5
800 @section Release 0.5
801 @itemize
802 @item
803 Trivial small fix in default niceness level of @command{nncp-file}
804 and @command{nncp-freq} commands.
805 @end itemize
806
807 @node Release 0_4
808 @section Release 0.4
809 @itemize
810
811 @item
812 Small fix in @command{nncp-call}, @command{nncp-caller},
813 @command{nncp-daemon}: they can segmentation fail sometimes (no data is
814 lost).
815
816 @item
817 @command{nncp-newnode} renamed to @command{nncp-newcfg} -- it is shorter
818 and more convenient to use.
819
820 @item
821 @command{nncp-mincfg} command appeared: helper allowing to create
822 minimalistic stripped down configuration file without private keys, that
823 is useful during @command{nncp-xfer} usage.
824
825 @end itemize
826
827 @node Release 0_3
828 @section Release 0.3
829 @itemize
830 @item Fixed compatibility with Go 1.6.
831 @end itemize
832
833 @node Release 0_2
834 @section Release 0.2
835 @itemize
836
837 @item
838 @strong{Incompatible} packet's format change (magic number is changed
839 too): size field is encrypted and is not send in plaintext anymore.
840
841 @item
842 @option{-minsize} option gives ability to automatically pad outgoing
843 packets to specified minimal size.
844
845 @item
846 @command{nncp-daemon} and @command{nncp-call}/@command{nncp-caller}
847 always check new @emph{tx} packets appearance in the background while
848 connected. Remote side is immediately notified.
849
850 @item
851 @option{-onlinedeadline} option gives ability to configure timeout of
852 inactivity of online connection, when it could be disconnected. It could
853 be used to keep connection alive for a long time.
854
855 @item
856 @option{-maxonlinetime} option gives ability to set maximal allowable
857 online connection aliveness time.
858
859 @item
860 @command{nncp-caller} command appeared: cron-ed TCP daemon caller.
861
862 @item
863 @command{nncp-pkt} command can decompress the data.
864
865 @end itemize