5 @subsection Релиз 6.5.0
9 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
12 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
15 Исправлена гонка при закрытии файловых дескрипторов во время завершения
16 работы online протокола, которая могла привести к ошибке записи
17 принятого фрагмента пакета.
20 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
21 @command{nncp-daemon}, @command{nncp-call} and @command{nncp-caller}.
26 @subsection Релиз 6.4.0
30 Исправлена возможная гонка в online протоколе, приводящая к падению
36 @subsection Релиз 6.3.0
40 Исправлено возможное падение программы во время показа прогресса online
46 @subsection Релиз 6.2.1
50 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
55 @subsection Релиз 6.2.0
59 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
62 Очередной рефакторинг и упрощение системы журналирования.
63 Не должно быть видимых изменений для конечного пользователя.
68 @subsection Релиз 6.1.0
72 Оптимизация: большинство команд теперь не держат открытыми файловые
73 дескрипторы. Прежде вы легко могли выйти за пределы максимально
74 допустимого количества открытых файлов, если у вас было много пакетов в
78 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
79 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
82 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
83 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
84 online демоны не выполнят проверку целостности.
87 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
88 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
91 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
92 файлах, рядом с самими пакетами. Это может существенно повысить скорость
93 получения списка пакетов на файловых системах с большим размером блока.
98 @subsection Релиз 6.0.0
102 Журнал использует человеко-читаемый и легко обрабатываемый машиной
103 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
104 записей, вместо структурированных строчек RFC 3339. Старый формат
105 журналов не поддерживается @command{nncp-log}.
108 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
109 @command{nncp-daemon}.
112 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
113 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
114 выражением содержащим секунды, это можно использовать как возможность
115 вызова только при появлении исходящих пакетов.
118 @command{nncp-cronexpr} команда позволяет проверить корректность и
119 ожидаемый результат от указанного cron выражения.
124 @subsection Релиз 5.6.0
128 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
129 во время него ежесекундно.
132 В @option{calls} секции конфигурации появились опции
133 @option{autotoss}, @option{autotoss-doseen},
134 @option{autotoss-nofile}, @option{autotoss-nofreq},
135 @option{autotoss-noexec}, @option{autotoss-notrns}.
136 Вы можете настраивать опции автоматического tosser для каждого вызова.
139 Использовать vendoring вместо переопределения @env{GOPATH} во время
140 установки tarball, так как текущая минимальная версия Go это 1.12,
141 поддерживающая модули.
146 @subsection Релиз 5.5.1
150 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
151 в @file{config} во время установки.
156 @subsection Релиз 5.5.0
160 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
161 @command{nncp-bundle}, @command{nncp-stat} командах.
164 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
167 У команды @command{nncp-exec} появились @option{-use-tmp} и
168 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
172 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
173 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
176 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
181 @subsection Релиз 5.4.1
185 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
190 @subsection Релиз 5.4.0
194 Обновлены зависимые библиотеки.
197 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
198 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
199 реализация @command{redo} включена в tarball.
204 @subsection Релиз 5.3.3
208 Больше различных проверок в коде на ошибки.
211 Обновлены зависимые библиотеки.
216 @subsection Релиз 5.3.2
220 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
221 котором соединение могло не учитывать факты прихода пакетов и обрывать
227 @subsection Релиз 5.3.1
231 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
232 использующими внешние команды (@verb{#"|somecmd"#}).
235 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
236 каждому пакету в spool.
241 @subsection Релиз 5.3.0
245 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
248 Исправлено не происходящее дополнение (padding) handshake сообщений.
251 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
254 SP протокол порождает меньше вызовов записей (соответственно, и TCP
258 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
259 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
262 Раз в минуту, если нет более никакого другого трафика, посылаются PING
263 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
264 более не работоспособно.
267 @command{nncp-toss} использует lock-file для предотвращения
268 одновременной обработки зашифрованных пакетов.
273 @subsection Релиз 5.2.1
277 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
282 @subsection Релиз 5.2.0
286 Большинство команд по умолчанию показывают однострочный прогресс
287 выполнения операции. Появились @option{-progress}, @option{-noprogress}
288 опции командной строки, @option{noprogress} опция конфигурационного
292 Исправлен некорректный код возврата @command{nncp-check} команды,
293 который возвращал ошибку когда всё хорошо.
296 Проверка свободного места для пакетов, во время выполнения
297 @command{nncp-bundle -rx}.
302 @subsection Релиз 5.1.2
306 Исправлена @strong{критичная} уязвимость: аутентификация online нод
307 могла приводить к некорректной идентификации удалённой стороны, позволяя
308 скачивать чужие зашифрованные пакеты.
311 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
312 публичный ключ Noise были поменяны местами, что приводило к
313 невозможности online аутентификации нод.
316 Явная синхронизация (fsync) директорий для гарантированного
317 переименования файлов.
322 @subsection Релиз 5.1.1
326 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
331 @subsection Релиз 5.1.0
335 @command{nncp-file} может отправлять директории, автоматически на лету
339 Во время создания исходящих сообщений проверяется наличие свободного
340 места на файловой системе.
343 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
344 конфигурационного файла заменены на структуру
345 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
348 Добавлена @option{freq.maxsize} опция конфигурационного файл,
349 запрещающая ответ на файловый запрос больше заданного размера.
352 Возможность оповещения об успешно выполненных командах (exec) через
353 @option{notify.exec} опцию конфигурационного файла.
358 @subsection Релиз 5.0.0
362 @strong{Несовместимое} изменение формата конфигурационного файла:
363 YAML заменён на Hjson, из-за его гораздо большей простоты, без
364 заметной потери функционала и удобства.
367 @strong{Несовместимое} изменение формата простых пакетов. Работа со
368 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
369 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
370 смотря на то, что версия библиотеки ещё не проверена временем.
373 Возможность соединяться с удалёнными нодами не только по TCP, но и через
374 pipe вызов сторонней команды.
377 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
378 комментариев. Можно использовать @option{-nocomments} опцию для старого
382 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
383 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
386 Возможность переопределить umask процесса через опцию конфигурационного
390 По умолчанию файлы и директории создаются с 666/777 правами доступа,
391 позволяя управлять ими @command{umask}-ом.
394 Обновлены зависимости.
397 Полное использование go модулей для управления зависимостями
398 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
401 Отмена автоматического использования более новых версий GNU GPL
402 (лицензия проекта GNU GPLv3-только).
407 @subsection Релиз 4.1
409 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
413 @subsection Релиз 4.0
417 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
418 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
419 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
420 отсылать дешифрованные данные внешней команде. Старые версии не
424 Проверка доступного места перед копированием во время работы
425 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
428 @command{nncp-call} имеет возможность только показывать список пакетов
429 на удалённой машине, без их передачи.
432 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
435 Восстановлена работоспособность @option{xxrate} настройки в
436 @option{calls} секции конфигурационного файла.
439 Зависимые библиотеки обновлены.
442 Небольшие исправления ошибок.
445 Начало использования @code{go.mod} подсистемы.
450 @subsection Релиз 3.4
452 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
456 @subsection Релиз 3.3
460 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
461 проверяют существование @file{.seen} файла и расценивают его как то, что
462 файл уже был скачан. Возможно передача данных была осуществлена
463 сторонним способом и удалённая сторона должна быть оповещена об этом.
466 Если более высокоприоритетный пакет попадает в спул, то
467 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
468 низкоприоритетные передачи.
471 К средствам связанным с online-соединениями (@command{nncp-daemon},
472 @command{nncp-call}, @command{nncp-caller}) добавлен простой
473 ограничитель скорости.
476 Возможность задания приоритета символьными обозначениями:
477 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
480 Изменены значения приоритетов по-умолчанию:
481 для @command{nncp-exec} с 64 на 96,
482 для @command{nncp-freq} с 64 на 160,
483 для @command{nncp-file} с 196 на 224.
488 @subsection Релиз 3.2
491 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
492 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
493 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
494 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
495 Явное добавление @file{NNCP/} директории в архив восстанавливает
496 работоспособность с корректными tar архивами.
500 @subsection Релиз 3.1
503 Возможность отключать пересылку через промежуточные ноды используя
504 @verb{|-via -|} опцию командной строки.
508 @subsection Релиз 3.0
512 @strong{Несовместимое} изменение формата простых пакетов. Работа со
513 старыми версиями не поддерживается.
516 Добавлена возможность удалённого исполнения команд, путём
517 конфигурирования @option{exec} опции конфигурационного файла и
518 использования команды @command{nncp-exec}:
521 Команда @command{nncp-mail} заменена более гибкой и широкой
522 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
523 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
525 @option{sendmail} опция конфигурационного файла заменена на более гибкую
526 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
531 Возможность переопределить @option{via} опцию конфигурации для целевого
532 узла через @option{-via} опцию командной строки для следующих команд:
533 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
536 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
540 Exec команды вызываются с дополнительными переменными окружения
541 @env{NNCP_NICE} и @env{NNCP_SELF}.
544 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
545 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
546 аргументом @option{-replynice}.
549 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
550 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
551 @option{-noexec}, @option{-notrns}.
554 По-умолчанию @command{nncp-file} команда для
555 @option{-minsize}/@option{-chunked} опций использует
556 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
557 Это можно отключить указав нулевое значение.
562 @subsection Релиз 2.0
566 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
567 Работа со старыми версиями не поддерживается.
570 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
571 Одним криптографическим примитивом меньше.
574 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
575 криптографическим примитивом меньше (предполагая, что BLAKE2X
576 практически идентичен BLAKE2).
581 @subsection Релиз 1.0
585 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
586 со старыми версиями не поддерживается.
589 @command{nncp-bundle} команда может создавать потоки зашифрованных
590 пакетов или потреблять их. Это полезно когда речь идёт о
591 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
592 без создания промежуточного подготовленного ISO образа или работа с
593 ленточными накопителями).
596 @command{nncp-toss} команда может создавать @file{.seen} файлы,
597 предотвращая приём дублированных пакетов.
600 В команде @command{nncp-call} разрешается иметь только одного
601 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
602 входящих пакетов могут создать много горутин.
605 Возможность переопределить путь до spool директории и файла журнала
606 через аргумент командной строки или переменную окружения.
609 @command{nncp-rm} команда может удалять все исходящие/входящие,
610 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
615 @subsection Релиз 0.12
617 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
621 @subsection Релиз 0.11
623 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
627 @subsection Релиз 0.10
630 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
631 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
635 @subsection Релиз 0.9
638 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
639 команды. Они игнорировались.
643 @subsection Релиз 0.8
646 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
647 @option{-minsize} для передачи без разбиения на части была в байтах, а
652 @subsection Релиз 0.7
656 Возможность предоставлять данные для @command{nncp-file} через
657 стандартный ввод, используя временный зашифрованный файл для этого.
660 Появилась возможность передачи файлов разбитых на части, с сопутствующей
661 @command{nncp-reass} командой и @option{freqchunked} опцией
662 конфигурационного файла. Полезно для передачи больших файлов через
663 маленькие устройства хранения.
666 @option{freqminsize} опция конфигурационного файла, аналогичная
670 Опция @option{-force} команды @command{nncp-xfer} переименована в
671 @option{-mkdir} для ясности.
674 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
677 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
678 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
679 имели общий префикс и были сгруппированы для удобства.
682 Появилась команда @command{nncp-cfgenc}, позволяющая
683 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
684 без использования OpenPGP или других подобных инструментов.
687 Обновлены зависимые криптографические библиотеки.
692 @subsection Релиз 0.6
694 @item Появилась небольшая команда @command{nncp-rm}.
695 @item Обновлены зависимые криптографические библиотеки.
699 @subsection Релиз 0.5
702 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
703 @command{nncp-file} и @command{nncp-freq} командах.
707 @subsection Релиз 0.4
711 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
712 @command{nncp-daemon}: иногда они могли падать с segmentation fault
713 ошибкой (данные не терялись).
716 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
717 это короче и удобнее для использования.
720 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
721 позволяющая создать минималистичный урезанный конфигурационный файл без
722 приватных ключей, что полезно во время использования @command{nncp-xfer}.
727 @subsection Релиз 0.3
729 @item Исправлена совместимость с Go 1.6.
733 @subsection Релиз 0.2
737 @strong{Несовместимое} изменение формата пакета (магическое число тоже
738 изменено): поле размера пакета шифруется и не посылается в открытом виде.
741 @option{-minsize} опция даёт возможность автоматически дополнять
742 исходящие пакеты до указанного минимального размера.
745 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
746 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
747 Удалённая сторона сразу же оповещается об этом.
750 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
751 неактивность в online соединении, когда оно должно быть отключено. Она
752 может быть использована для сохранения соединения на долгое время.
755 @option{-maxonlinetime} опция даёт возможность указания максимального
756 возможного времени жизни соединения.
759 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
763 @command{nncp-pkt} команда может разжимать данные.