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