5 @subsection Релиз 6.6.0
9 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
10 ожидают завершения всех процессов фоновой проверки контрольных сумм,
11 после того как соединение закрыто.
16 @subsection Релиз 6.5.0
20 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
23 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
26 Исправлена гонка при закрытии файловых дескрипторов во время завершения
27 работы online протокола, которая могла привести к ошибке записи
28 принятого фрагмента пакета.
31 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
32 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
37 @subsection Релиз 6.4.0
41 Исправлена возможная гонка в online протоколе, приводящая к падению
47 @subsection Релиз 6.3.0
51 Исправлено возможное падение программы во время показа прогресса online
57 @subsection Релиз 6.2.1
61 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
66 @subsection Релиз 6.2.0
70 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
73 Очередной рефакторинг и упрощение системы журналирования.
74 Не должно быть видимых изменений для конечного пользователя.
79 @subsection Релиз 6.1.0
83 Оптимизация: большинство команд теперь не держат открытыми файловые
84 дескрипторы. Прежде вы легко могли выйти за пределы максимально
85 допустимого количества открытых файлов, если у вас было много пакетов в
89 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
90 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
93 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
94 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
95 online демоны не выполнят проверку целостности.
98 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
99 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
102 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
103 файлах, рядом с самими пакетами. Это может существенно повысить скорость
104 получения списка пакетов на файловых системах с большим размером блока.
109 @subsection Релиз 6.0.0
113 Журнал использует человеко-читаемый и легко обрабатываемый машиной
114 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
115 записей, вместо структурированных строчек RFC 3339. Старый формат
116 журналов не поддерживается @command{nncp-log}.
119 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
120 @command{nncp-daemon}.
123 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
124 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
125 выражением содержащим секунды, это можно использовать как возможность
126 вызова только при появлении исходящих пакетов.
129 @command{nncp-cronexpr} команда позволяет проверить корректность и
130 ожидаемый результат от указанного cron выражения.
135 @subsection Релиз 5.6.0
139 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
140 во время него ежесекундно.
143 В @option{calls} секции конфигурации появились опции
144 @option{autotoss}, @option{autotoss-doseen},
145 @option{autotoss-nofile}, @option{autotoss-nofreq},
146 @option{autotoss-noexec}, @option{autotoss-notrns}.
147 Вы можете настраивать опции автоматического tosser для каждого вызова.
150 Использовать vendoring вместо переопределения @env{GOPATH} во время
151 установки tarball, так как текущая минимальная версия Go это 1.12,
152 поддерживающая модули.
157 @subsection Релиз 5.5.1
161 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
162 в @file{config} во время установки.
167 @subsection Релиз 5.5.0
171 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
172 @command{nncp-bundle}, @command{nncp-stat} командах.
175 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
178 У команды @command{nncp-exec} появились @option{-use-tmp} и
179 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
183 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
184 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
187 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
192 @subsection Релиз 5.4.1
196 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
201 @subsection Релиз 5.4.0
205 Обновлены зависимые библиотеки.
208 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
209 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
210 реализация @command{redo} включена в tarball.
215 @subsection Релиз 5.3.3
219 Больше различных проверок в коде на ошибки.
222 Обновлены зависимые библиотеки.
227 @subsection Релиз 5.3.2
231 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
232 котором соединение могло не учитывать факты прихода пакетов и обрывать
238 @subsection Релиз 5.3.1
242 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
243 использующими внешние команды (@verb{#"|somecmd"#}).
246 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
247 каждому пакету в spool.
252 @subsection Релиз 5.3.0
256 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
259 Исправлено не происходящее дополнение (padding) handshake сообщений.
262 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
265 SP протокол порождает меньше вызовов записей (соответственно, и TCP
269 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
270 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
273 Раз в минуту, если нет более никакого другого трафика, посылаются PING
274 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
275 более не работоспособно.
278 @command{nncp-toss} использует lock-file для предотвращения
279 одновременной обработки зашифрованных пакетов.
284 @subsection Релиз 5.2.1
288 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
293 @subsection Релиз 5.2.0
297 Большинство команд по умолчанию показывают однострочный прогресс
298 выполнения операции. Появились @option{-progress}, @option{-noprogress}
299 опции командной строки, @option{noprogress} опция конфигурационного
303 Исправлен некорректный код возврата @command{nncp-check} команды,
304 который возвращал ошибку когда всё хорошо.
307 Проверка свободного места для пакетов, во время выполнения
308 @command{nncp-bundle -rx}.
313 @subsection Релиз 5.1.2
317 Исправлена @strong{критичная} уязвимость: аутентификация online нод
318 могла приводить к некорректной идентификации удалённой стороны, позволяя
319 скачивать чужие зашифрованные пакеты.
322 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
323 публичный ключ Noise были поменяны местами, что приводило к
324 невозможности online аутентификации нод.
327 Явная синхронизация (fsync) директорий для гарантированного
328 переименования файлов.
333 @subsection Релиз 5.1.1
337 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
342 @subsection Релиз 5.1.0
346 @command{nncp-file} может отправлять директории, автоматически на лету
350 Во время создания исходящих сообщений проверяется наличие свободного
351 места на файловой системе.
354 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
355 конфигурационного файла заменены на структуру
356 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
359 Добавлена @option{freq.maxsize} опция конфигурационного файл,
360 запрещающая ответ на файловый запрос больше заданного размера.
363 Возможность оповещения об успешно выполненных командах (exec) через
364 @option{notify.exec} опцию конфигурационного файла.
369 @subsection Релиз 5.0.0
373 @strong{Несовместимое} изменение формата конфигурационного файла:
374 YAML заменён на Hjson, из-за его гораздо большей простоты, без
375 заметной потери функционала и удобства.
378 @strong{Несовместимое} изменение формата простых пакетов. Работа со
379 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
380 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
381 смотря на то, что версия библиотеки ещё не проверена временем.
384 Возможность соединяться с удалёнными нодами не только по TCP, но и через
385 pipe вызов сторонней команды.
388 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
389 комментариев. Можно использовать @option{-nocomments} опцию для старого
393 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
394 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
397 Возможность переопределить umask процесса через опцию конфигурационного
401 По умолчанию файлы и директории создаются с 666/777 правами доступа,
402 позволяя управлять ими @command{umask}-ом.
405 Обновлены зависимости.
408 Полное использование go модулей для управления зависимостями
409 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
412 Отмена автоматического использования более новых версий GNU GPL
413 (лицензия проекта GNU GPLv3-только).
418 @subsection Релиз 4.1
420 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
424 @subsection Релиз 4.0
428 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
429 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
430 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
431 отсылать дешифрованные данные внешней команде. Старые версии не
435 Проверка доступного места перед копированием во время работы
436 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
439 @command{nncp-call} имеет возможность только показывать список пакетов
440 на удалённой машине, без их передачи.
443 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
446 Восстановлена работоспособность @option{xxrate} настройки в
447 @option{calls} секции конфигурационного файла.
450 Зависимые библиотеки обновлены.
453 Небольшие исправления ошибок.
456 Начало использования @code{go.mod} подсистемы.
461 @subsection Релиз 3.4
463 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
467 @subsection Релиз 3.3
471 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
472 проверяют существование @file{.seen} файла и расценивают его как то, что
473 файл уже был скачан. Возможно передача данных была осуществлена
474 сторонним способом и удалённая сторона должна быть оповещена об этом.
477 Если более высокоприоритетный пакет попадает в спул, то
478 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
479 низкоприоритетные передачи.
482 К средствам связанным с online-соединениями (@command{nncp-daemon},
483 @command{nncp-call}, @command{nncp-caller}) добавлен простой
484 ограничитель скорости.
487 Возможность задания приоритета символьными обозначениями:
488 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
491 Изменены значения приоритетов по-умолчанию:
492 для @command{nncp-exec} с 64 на 96,
493 для @command{nncp-freq} с 64 на 160,
494 для @command{nncp-file} с 196 на 224.
499 @subsection Релиз 3.2
502 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
503 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
504 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
505 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
506 Явное добавление @file{NNCP/} директории в архив восстанавливает
507 работоспособность с корректными tar архивами.
511 @subsection Релиз 3.1
514 Возможность отключать пересылку через промежуточные ноды используя
515 @verb{|-via -|} опцию командной строки.
519 @subsection Релиз 3.0
523 @strong{Несовместимое} изменение формата простых пакетов. Работа со
524 старыми версиями не поддерживается.
527 Добавлена возможность удалённого исполнения команд, путём
528 конфигурирования @option{exec} опции конфигурационного файла и
529 использования команды @command{nncp-exec}:
532 Команда @command{nncp-mail} заменена более гибкой и широкой
533 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
534 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
536 @option{sendmail} опция конфигурационного файла заменена на более гибкую
537 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
542 Возможность переопределить @option{via} опцию конфигурации для целевого
543 узла через @option{-via} опцию командной строки для следующих команд:
544 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
547 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
551 Exec команды вызываются с дополнительными переменными окружения
552 @env{NNCP_NICE} и @env{NNCP_SELF}.
555 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
556 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
557 аргументом @option{-replynice}.
560 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
561 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
562 @option{-noexec}, @option{-notrns}.
565 По-умолчанию @command{nncp-file} команда для
566 @option{-minsize}/@option{-chunked} опций использует
567 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
568 Это можно отключить указав нулевое значение.
573 @subsection Релиз 2.0
577 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
578 Работа со старыми версиями не поддерживается.
581 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
582 Одним криптографическим примитивом меньше.
585 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
586 криптографическим примитивом меньше (предполагая, что BLAKE2X
587 практически идентичен BLAKE2).
592 @subsection Релиз 1.0
596 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
597 со старыми версиями не поддерживается.
600 @command{nncp-bundle} команда может создавать потоки зашифрованных
601 пакетов или потреблять их. Это полезно когда речь идёт о
602 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
603 без создания промежуточного подготовленного ISO образа или работа с
604 ленточными накопителями).
607 @command{nncp-toss} команда может создавать @file{.seen} файлы,
608 предотвращая приём дублированных пакетов.
611 В команде @command{nncp-call} разрешается иметь только одного
612 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
613 входящих пакетов могут создать много горутин.
616 Возможность переопределить путь до spool директории и файла журнала
617 через аргумент командной строки или переменную окружения.
620 @command{nncp-rm} команда может удалять все исходящие/входящие,
621 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
626 @subsection Релиз 0.12
628 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
632 @subsection Релиз 0.11
634 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
638 @subsection Релиз 0.10
641 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
642 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
646 @subsection Релиз 0.9
649 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
650 команды. Они игнорировались.
654 @subsection Релиз 0.8
657 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
658 @option{-minsize} для передачи без разбиения на части была в байтах, а
663 @subsection Релиз 0.7
667 Возможность предоставлять данные для @command{nncp-file} через
668 стандартный ввод, используя временный зашифрованный файл для этого.
671 Появилась возможность передачи файлов разбитых на части, с сопутствующей
672 @command{nncp-reass} командой и @option{freqchunked} опцией
673 конфигурационного файла. Полезно для передачи больших файлов через
674 маленькие устройства хранения.
677 @option{freqminsize} опция конфигурационного файла, аналогичная
681 Опция @option{-force} команды @command{nncp-xfer} переименована в
682 @option{-mkdir} для ясности.
685 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
688 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
689 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
690 имели общий префикс и были сгруппированы для удобства.
693 Появилась команда @command{nncp-cfgenc}, позволяющая
694 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
695 без использования OpenPGP или других подобных инструментов.
698 Обновлены зависимые криптографические библиотеки.
703 @subsection Релиз 0.6
705 @item Появилась небольшая команда @command{nncp-rm}.
706 @item Обновлены зависимые криптографические библиотеки.
710 @subsection Релиз 0.5
713 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
714 @command{nncp-file} и @command{nncp-freq} командах.
718 @subsection Релиз 0.4
722 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
723 @command{nncp-daemon}: иногда они могли падать с segmentation fault
724 ошибкой (данные не терялись).
727 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
728 это короче и удобнее для использования.
731 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
732 позволяющая создать минималистичный урезанный конфигурационный файл без
733 приватных ключей, что полезно во время использования @command{nncp-xfer}.
738 @subsection Релиз 0.3
740 @item Исправлена совместимость с Go 1.6.
744 @subsection Релиз 0.2
748 @strong{Несовместимое} изменение формата пакета (магическое число тоже
749 изменено): поле размера пакета шифруется и не посылается в открытом виде.
752 @option{-minsize} опция даёт возможность автоматически дополнять
753 исходящие пакеты до указанного минимального размера.
756 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
757 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
758 Удалённая сторона сразу же оповещается об этом.
761 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
762 неактивность в online соединении, когда оно должно быть отключено. Она
763 может быть использована для сохранения соединения на долгое время.
766 @option{-maxonlinetime} опция даёт возможность указания максимального
767 возможного времени жизни соединения.
770 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
774 @command{nncp-pkt} команда может разжимать данные.