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