5 @subsection Релиз 6.6.0
9 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
10 ожидают завершения всех процессов фоновой проверки контрольных сумм,
11 после того как соединение закрыто.
14 Добавлена возможность определения адреса через multicast оповещение в
15 локальной сети, так называемый MCD (MultiCast Discovery).
20 @subsection Релиз 6.5.0
24 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
27 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
30 Исправлена гонка при закрытии файловых дескрипторов во время завершения
31 работы online протокола, которая могла привести к ошибке записи
32 принятого фрагмента пакета.
35 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
36 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
41 @subsection Релиз 6.4.0
45 Исправлена возможная гонка в online протоколе, приводящая к падению
51 @subsection Релиз 6.3.0
55 Исправлено возможное падение программы во время показа прогресса online
61 @subsection Релиз 6.2.1
65 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
70 @subsection Релиз 6.2.0
74 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
77 Очередной рефакторинг и упрощение системы журналирования.
78 Не должно быть видимых изменений для конечного пользователя.
83 @subsection Релиз 6.1.0
87 Оптимизация: большинство команд теперь не держат открытыми файловые
88 дескрипторы. Прежде вы легко могли выйти за пределы максимально
89 допустимого количества открытых файлов, если у вас было много пакетов в
93 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
94 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
97 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
98 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
99 online демоны не выполнят проверку целостности.
102 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
103 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
106 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
107 файлах, рядом с самими пакетами. Это может существенно повысить скорость
108 получения списка пакетов на файловых системах с большим размером блока.
113 @subsection Релиз 6.0.0
117 Журнал использует человеко-читаемый и легко обрабатываемый машиной
118 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
119 записей, вместо структурированных строчек RFC 3339. Старый формат
120 журналов не поддерживается @command{nncp-log}.
123 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
124 @command{nncp-daemon}.
127 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
128 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
129 выражением содержащим секунды, это можно использовать как возможность
130 вызова только при появлении исходящих пакетов.
133 @command{nncp-cronexpr} команда позволяет проверить корректность и
134 ожидаемый результат от указанного cron выражения.
139 @subsection Релиз 5.6.0
143 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
144 во время него ежесекундно.
147 В @option{calls} секции конфигурации появились опции
148 @option{autotoss}, @option{autotoss-doseen},
149 @option{autotoss-nofile}, @option{autotoss-nofreq},
150 @option{autotoss-noexec}, @option{autotoss-notrns}.
151 Вы можете настраивать опции автоматического tosser для каждого вызова.
154 Использовать vendoring вместо переопределения @env{GOPATH} во время
155 установки tarball, так как текущая минимальная версия Go это 1.12,
156 поддерживающая модули.
161 @subsection Релиз 5.5.1
165 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
166 в @file{config} во время установки.
171 @subsection Релиз 5.5.0
175 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
176 @command{nncp-bundle}, @command{nncp-stat} командах.
179 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
182 У команды @command{nncp-exec} появились @option{-use-tmp} и
183 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
187 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
188 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
191 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
196 @subsection Релиз 5.4.1
200 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
205 @subsection Релиз 5.4.0
209 Обновлены зависимые библиотеки.
212 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
213 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
214 реализация @command{redo} включена в tarball.
219 @subsection Релиз 5.3.3
223 Больше различных проверок в коде на ошибки.
226 Обновлены зависимые библиотеки.
231 @subsection Релиз 5.3.2
235 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
236 котором соединение могло не учитывать факты прихода пакетов и обрывать
242 @subsection Релиз 5.3.1
246 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
247 использующими внешние команды (@verb{#"|somecmd"#}).
250 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
251 каждому пакету в spool.
256 @subsection Релиз 5.3.0
260 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
263 Исправлено не происходящее дополнение (padding) handshake сообщений.
266 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
269 SP протокол порождает меньше вызовов записей (соответственно, и TCP
273 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
274 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
277 Раз в минуту, если нет более никакого другого трафика, посылаются PING
278 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
279 более не работоспособно.
282 @command{nncp-toss} использует lock-file для предотвращения
283 одновременной обработки зашифрованных пакетов.
288 @subsection Релиз 5.2.1
292 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
297 @subsection Релиз 5.2.0
301 Большинство команд по умолчанию показывают однострочный прогресс
302 выполнения операции. Появились @option{-progress}, @option{-noprogress}
303 опции командной строки, @option{noprogress} опция конфигурационного
307 Исправлен некорректный код возврата @command{nncp-check} команды,
308 который возвращал ошибку когда всё хорошо.
311 Проверка свободного места для пакетов, во время выполнения
312 @command{nncp-bundle -rx}.
317 @subsection Релиз 5.1.2
321 Исправлена @strong{критичная} уязвимость: аутентификация online нод
322 могла приводить к некорректной идентификации удалённой стороны, позволяя
323 скачивать чужие зашифрованные пакеты.
326 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
327 публичный ключ Noise были поменяны местами, что приводило к
328 невозможности online аутентификации нод.
331 Явная синхронизация (fsync) директорий для гарантированного
332 переименования файлов.
337 @subsection Релиз 5.1.1
341 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
346 @subsection Релиз 5.1.0
350 @command{nncp-file} может отправлять директории, автоматически на лету
354 Во время создания исходящих сообщений проверяется наличие свободного
355 места на файловой системе.
358 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
359 конфигурационного файла заменены на структуру
360 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
363 Добавлена @option{freq.maxsize} опция конфигурационного файл,
364 запрещающая ответ на файловый запрос больше заданного размера.
367 Возможность оповещения об успешно выполненных командах (exec) через
368 @option{notify.exec} опцию конфигурационного файла.
373 @subsection Релиз 5.0.0
377 @strong{Несовместимое} изменение формата конфигурационного файла:
378 YAML заменён на Hjson, из-за его гораздо большей простоты, без
379 заметной потери функционала и удобства.
382 @strong{Несовместимое} изменение формата простых пакетов. Работа со
383 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
384 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
385 смотря на то, что версия библиотеки ещё не проверена временем.
388 Возможность соединяться с удалёнными нодами не только по TCP, но и через
389 pipe вызов сторонней команды.
392 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
393 комментариев. Можно использовать @option{-nocomments} опцию для старого
397 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
398 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
401 Возможность переопределить umask процесса через опцию конфигурационного
405 По умолчанию файлы и директории создаются с 666/777 правами доступа,
406 позволяя управлять ими @command{umask}-ом.
409 Обновлены зависимости.
412 Полное использование go модулей для управления зависимостями
413 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
416 Отмена автоматического использования более новых версий GNU GPL
417 (лицензия проекта GNU GPLv3-только).
422 @subsection Релиз 4.1
424 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
428 @subsection Релиз 4.0
432 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
433 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
434 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
435 отсылать дешифрованные данные внешней команде. Старые версии не
439 Проверка доступного места перед копированием во время работы
440 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
443 @command{nncp-call} имеет возможность только показывать список пакетов
444 на удалённой машине, без их передачи.
447 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
450 Восстановлена работоспособность @option{xxrate} настройки в
451 @option{calls} секции конфигурационного файла.
454 Зависимые библиотеки обновлены.
457 Небольшие исправления ошибок.
460 Начало использования @code{go.mod} подсистемы.
465 @subsection Релиз 3.4
467 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
471 @subsection Релиз 3.3
475 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
476 проверяют существование @file{.seen} файла и расценивают его как то, что
477 файл уже был скачан. Возможно передача данных была осуществлена
478 сторонним способом и удалённая сторона должна быть оповещена об этом.
481 Если более высокоприоритетный пакет попадает в спул, то
482 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
483 низкоприоритетные передачи.
486 К средствам связанным с online-соединениями (@command{nncp-daemon},
487 @command{nncp-call}, @command{nncp-caller}) добавлен простой
488 ограничитель скорости.
491 Возможность задания приоритета символьными обозначениями:
492 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
495 Изменены значения приоритетов по-умолчанию:
496 для @command{nncp-exec} с 64 на 96,
497 для @command{nncp-freq} с 64 на 160,
498 для @command{nncp-file} с 196 на 224.
503 @subsection Релиз 3.2
506 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
507 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
508 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
509 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
510 Явное добавление @file{NNCP/} директории в архив восстанавливает
511 работоспособность с корректными tar архивами.
515 @subsection Релиз 3.1
518 Возможность отключать пересылку через промежуточные ноды используя
519 @verb{|-via -|} опцию командной строки.
523 @subsection Релиз 3.0
527 @strong{Несовместимое} изменение формата простых пакетов. Работа со
528 старыми версиями не поддерживается.
531 Добавлена возможность удалённого исполнения команд, путём
532 конфигурирования @option{exec} опции конфигурационного файла и
533 использования команды @command{nncp-exec}:
536 Команда @command{nncp-mail} заменена более гибкой и широкой
537 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
538 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
540 @option{sendmail} опция конфигурационного файла заменена на более гибкую
541 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
546 Возможность переопределить @option{via} опцию конфигурации для целевого
547 узла через @option{-via} опцию командной строки для следующих команд:
548 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
551 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
555 Exec команды вызываются с дополнительными переменными окружения
556 @env{NNCP_NICE} и @env{NNCP_SELF}.
559 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
560 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
561 аргументом @option{-replynice}.
564 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
565 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
566 @option{-noexec}, @option{-notrns}.
569 По-умолчанию @command{nncp-file} команда для
570 @option{-minsize}/@option{-chunked} опций использует
571 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
572 Это можно отключить указав нулевое значение.
577 @subsection Релиз 2.0
581 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
582 Работа со старыми версиями не поддерживается.
585 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
586 Одним криптографическим примитивом меньше.
589 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
590 криптографическим примитивом меньше (предполагая, что BLAKE2X
591 практически идентичен BLAKE2).
596 @subsection Релиз 1.0
600 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
601 со старыми версиями не поддерживается.
604 @command{nncp-bundle} команда может создавать потоки зашифрованных
605 пакетов или потреблять их. Это полезно когда речь идёт о
606 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
607 без создания промежуточного подготовленного ISO образа или работа с
608 ленточными накопителями).
611 @command{nncp-toss} команда может создавать @file{.seen} файлы,
612 предотвращая приём дублированных пакетов.
615 В команде @command{nncp-call} разрешается иметь только одного
616 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
617 входящих пакетов могут создать много горутин.
620 Возможность переопределить путь до spool директории и файла журнала
621 через аргумент командной строки или переменную окружения.
624 @command{nncp-rm} команда может удалять все исходящие/входящие,
625 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
630 @subsection Релиз 0.12
632 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
636 @subsection Релиз 0.11
638 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
642 @subsection Релиз 0.10
645 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
646 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
650 @subsection Релиз 0.9
653 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
654 команды. Они игнорировались.
658 @subsection Релиз 0.8
661 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
662 @option{-minsize} для передачи без разбиения на части была в байтах, а
667 @subsection Релиз 0.7
671 Возможность предоставлять данные для @command{nncp-file} через
672 стандартный ввод, используя временный зашифрованный файл для этого.
675 Появилась возможность передачи файлов разбитых на части, с сопутствующей
676 @command{nncp-reass} командой и @option{freqchunked} опцией
677 конфигурационного файла. Полезно для передачи больших файлов через
678 маленькие устройства хранения.
681 @option{freqminsize} опция конфигурационного файла, аналогичная
685 Опция @option{-force} команды @command{nncp-xfer} переименована в
686 @option{-mkdir} для ясности.
689 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
692 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
693 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
694 имели общий префикс и были сгруппированы для удобства.
697 Появилась команда @command{nncp-cfgenc}, позволяющая
698 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
699 без использования OpenPGP или других подобных инструментов.
702 Обновлены зависимые криптографические библиотеки.
707 @subsection Релиз 0.6
709 @item Появилась небольшая команда @command{nncp-rm}.
710 @item Обновлены зависимые криптографические библиотеки.
714 @subsection Релиз 0.5
717 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
718 @command{nncp-file} и @command{nncp-freq} командах.
722 @subsection Релиз 0.4
726 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
727 @command{nncp-daemon}: иногда они могли падать с segmentation fault
728 ошибкой (данные не терялись).
731 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
732 это короче и удобнее для использования.
735 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
736 позволяющая создать минималистичный урезанный конфигурационный файл без
737 приватных ключей, что полезно во время использования @command{nncp-xfer}.
742 @subsection Релиз 0.3
744 @item Исправлена совместимость с Go 1.6.
748 @subsection Релиз 0.2
752 @strong{Несовместимое} изменение формата пакета (магическое число тоже
753 изменено): поле размера пакета шифруется и не посылается в открытом виде.
756 @option{-minsize} опция даёт возможность автоматически дополнять
757 исходящие пакеты до указанного минимального размера.
760 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
761 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
762 Удалённая сторона сразу же оповещается об этом.
765 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
766 неактивность в online соединении, когда оно должно быть отключено. Она
767 может быть использована для сохранения соединения на долгое время.
770 @option{-maxonlinetime} опция даёт возможность указания максимального
771 возможного времени жизни соединения.
774 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
778 @command{nncp-pkt} команда может разжимать данные.