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