[--execute]`: dry run по умолчанию, local ↔ S3 и S3 ↔ S3 без удаления source. - Последовательное копирование с проверкой размера и полным SHA-256 readback destination; конфликтующий объект не перезаписывается. Временный диск — максимум один переносимый файл дополнительно к постоянному destination. - Durable migration journal позволяет продолжить прерванную операцию с теми же конфигурациями. Незавершённый или повреждённый journal блокирует startup; backend identity меняется только после проверки всех файлов. - Native `uploads`/`upload_stats`, slots и JWT сохраняются; поддерживаются native локальные файлы без Rust completion sidecar. Миграция требует остановки RustXMPP и Prosody, использующих общий `data_path`. - Multipart intent сохраняется до создания удалённого upload. Recovery находит потерянный UploadId через paginated listing и очищает только точный key принадлежащего slot. При сохранных metadata cleanup не зависит от lifecycle; lifecycle остаётся дополнительной защитой, а не гарантией. - Перед completion сохраняется durable marker. Неопределённый результат completion при отсутствии подтверждённого объекта помещает только этот slot в quarantine: PUT 409, retention не удаляет его, maintenance повторяет сверку. Startup продолжается; сохраняется single-use семантика. - Добавлены network regressions миграции и расширены проверки multipart recovery, потерянных ответов, отмены запросов и конфликтов destination. Настройка, команды миграции, recovery и ограничения отката: [docs/HTTP-UPLOAD.md](docs/HTTP-UPLOAD.md). Команды, результаты и границы подтверждения, включая qualification реального object store и 10 GiB: [docs/VALIDATION-0.7.9.md](docs/VALIDATION-0.7.9.md). Итог: 265 тестов, нагрузка 500 TLS клиентов и native reference — успешно. Реальные 10 GiB через MinIO (описанный test adapter), 1280parts и полный SHA-256 пройдены; подробности — [VALIDATION-0.7.9](docs/VALIDATION-0.7.9.md).
17 KiB
Совместимость с предоставленной установкой
Цель — конкретная Prosody cafd74b9c5ea и предоставленные community/custom
модули ревизии dddb6c34b964, а не все существующие модули Prosody.
Реализация содержит рабочие обработчики всех явно включённых имён модулей
из конфига. Это не означает полного совпадения их поведения.
| Область | Что реализовано | Существенные пределы |
|---|---|---|
| Конфигурация | Lua/JSON/YAML/YML/TOML, Include, глобальные и локальные области, наследование модулей | Lua VM ограничена; не все функции окружения конфигуратора Prosody доступны. Runtime обслуживает один VirtualHost и его компоненты |
| Хранилище | internal .dat, .list, бинарные строки, смешанные ключи Lua, атомарные записи, потоковые архивы, инвалидирование .lidx |
SQL, external storage остальных модулей и произвольные драйверы не реализованы; S3 uploads поддержаны. Каталог блокируется между процессами Rust; Prosody в блокировке не участвует |
| Аккаунты, saslauth | internal_hashed SHA-1/SHA-256, SASLprep, PLAIN внутри TLS, SCRAM и PLUS с tls-exporter/tls-server-end-point, SSDP, SASL2 | Только internal_hashed; опциональный sasl2_bind2 (alias bind2) поддерживает inline bind/SM/CSI/Carbons. SASL2 inline SM resume и takeover живого транспорта реализованы; MAM metadata при Bind2 читает весь архив синхронно |
| Сообщения и presence | локальная маршрутизация, приоритеты ресурсов, контакты/подписки/probes, offline, carbons, блокировки | Полная совместимость всех пограничных сценариев маршрутизации ещё не подтверждена |
| MAM | личный и комнатный MAM2, prefs, формы, RSM, фильтры времени/контакта/ID, extended queries, metadata, stanza-id, expiry | Нет доказательства совпадения каждой ошибки и порядка результатов при всех комбинациях запроса |
| MUC | комнаты, несколько ресурсов, роли/affiliations, owner/admin, конфигурация, приглашения, история без MAM и MAM, occupant-id/avatar, hats, язык, PM policies, presence broadcast, native metadata/state checkpoints и восстановление после штатной остановки | Восстановление после повторной аутентификации точного полного JID в300-секундном grace и при неизменной конфигурации. Нет сохранения TCP/SM между процессами и checkpoint на SIGKILL. Произвольные community-расширения не запускаются; MUC-RECOVERY.md |
| PEP/pubsub | persistent nodes/items, ACL, subscriptions, publish/retract/purge/delete, owner/configuration, caps, OMEMO XML как payload | Не все необязательные политики узлов Prosody реализованы; OMEMO шифруют клиенты, криптография OMEMO не часть сервера |
| private/bookmarks/vCard | private XML, старые и новые закладки, vCard/temp-vCard4 и avatar-переходы | Межклиентное поведение нужно дополнительно проверить настоящими клиентами |
| SM/push | acknowledgements, resumable sessions, replay, ограниченные очереди, native регистрации push и ответы сервисов | Есть coalescing и watchdog первого push; полный цикл с настоящим APNs/FCM шлюзом не проверен. Состояние живых сессий не переживает перезапуск процесса |
| CSI | active/inactive, ограниченный буфер, native importance rules, delay, flush при клиентской активности и grace period | Событие socket drain приближено завершением записи; необязательные расширенные XPath-фильтры поддержаны не полностью |
| Федерация | входящие/исходящие STARTTLS, CA/DNS-ID, SASL EXTERNAL, DNS SRV, проверка домена каждого stanza, ограниченный пул соединений | Нет dialback/DANE/OtherName-only/SRV-ID/bidi/direct TLS |
| HTTP upload | Несколько XEP-0363 components, Host/path isolation, local/S3 gateway, multipart/SigV4, streaming PUT, GET/HEAD/range/conditional, квоты/expiry, native metadata/JWT; offline local↔S3/S3↔S3 migration с SHA-256/resume; intent/exact-key recovery и quarantine; реальный 10 GiB PUT/GET через MinIO проверен | MinIO single-node с описанным netlink adapter тестовой среды; AWS/distributed deployment не проверены. Миграция требует остановки сервера и временного места под один файл; source сохраняется. Потерянные ownership metadata и неопределённый Complete требуют отдельного разбора; HTTP-UPLOAD.md |
| WebSocket/BOSH | WS/WSS и HTTP/HTTPS, общая XMPP-сессия, origin rules, BOSH RID/retry/hold/reorder/restart; http_altconnect XRD/JRD discovery; http_paths, HTTP Host/fallback, внешний URL, доверенные IP/CIDR и forwarded headers для TLS reverse proxy | Один VirtualHost с компонентами; нет PROXYv1/v2, произвольных Lua HTTP-приложений и горячей перенастройки. См. HTTP-PROXY.md |
| admin_shell | протокол admin socket, status/version/uptime, списки, основные операции аккаунтов | Нет произвольного Lua, горячей загрузки модулей и полного набора prosodyctl |
| Остальные модули | disco, ping, time, version, uptime, register, TURN extdisco/HMAC, каталог seclabels | Нет встроенного TURN. Coturn работает отдельно. pep_simple пуст в предоставленном исходнике |
Особенности именно вашего конфига
allow_registration = trueдействительно разрешает регистрацию, несмотря на противоречащий этому комментарий в исходном файле.- Личная история настроена
never, комнатная — на неделю. Очистка выполняется периодически; append не переписывает весь архив. - Лимит отдельного файла — 10 GiB, общий — 100 GiB. В 0.7.8 фактические HTTPS PUT/GET 10 GiB с local backend проверены с совпадением SHA-256, Range за 4 GiB и выборочным RSS. В 0.7.9 дополнительно проверены 10 GiB через MinIO single-node с описанным adapter тестовой среды; см. VALIDATION-0.7.9.md.
- Структура
security_labels.default_policy/policies/classificationsотличается от nativemod_seclabels. С0.7.1 её точная schema может использоваться как catalog metadata: выбранный default_policy и его classifications. ACL и обязательное enforcement не реализуются; неизвестные поля отвергаются. - Настройки
limitsсами по себе не включаютmod_limits; он не указан среди включённых модулей исходного конфига и не является autoload-модулем предоставленной Prosody. В этой реализации транспортного rate limiting пока нет. - Чужие Lua-плагины из каталога
custom_pluginsавтоматически не запускаются. Наличие исходников 479 каталогов не означает, что все они были включены.
Что осталось для утверждения «полная замена»
Нужны подтверждённый запуск на копии реальных данных, проверки настоящими
Monal/Conversations/Gajim и используемым push-шлюзом, совместимость с внешними
XMPP-доменами и сертификатами, проверка целевого Docker/UID/TLS, откат, долгий
нагрузочный прогон и устранение оставшихся различий из таблицы.
Текущие автоматические проверки покрывают конкретные сценарии и не заменяют
эти критерии. Проект намеренно сохраняет флаг --experimental.
Исправления discovery и pre-auth в 0.5.0
PEP описывается identity pubsub/pep на bare JID аккаунта. Push feature
urn:xmpp:push:0 возвращается на собственном bare JID при включённом
cloud_notify, в том числе без PEP. Серверный JID остаётся server/im.
PEP leaf nodes сохраняют node, собственные ACL и ошибки отсутствующего узла.
Функции MAM, блокировок и другие account features не теряются в раннем PEP reply.
С roster доступны RFC6121 subscription preapproval и контактная часть
XEP-0379/XEP-0401: ad-hoc urn:xmpp:invite#invite, одноразовые токены
с истечением срока, автоматическое подтверждение и обратная подписка.
Неизвестный клиентский preauth сохраняется при пересылке и в pending presence,
чтобы владелец мог подтвердить подписку вручную или в своём клиенте.
Нет приглашений на создание/сброс аккаунта и landing page; ibr=y не выдаётся.
Unscoped токены используют native per-user invite_token map; scoped токены
хранятся отдельно, чтобы Prosody без поддержки scope не мог выдать лишние права.
Токен потребляется до нескольких roster-записей: при дисковой ошибке между
записями нет multistore rollback, ошибка передаётся вызывающему коду, токен
повторно автоматически не авторизует подписку. Возможен ручной fallback.
Переподключение в 0.6.0
conflict_resolve следует native sessionmanager: default/kick_old, kick_new,
increment и random. Новая привязка отзывает прежний resume token при замене;
она не наследует старые SM acknowledgements. Успешный resume сохраняет SM,
Carbons, push identifier и очередь, изолируя старый transport от нового состояния.
BOSH terminate ждёт engine cleanup, WebSocket close/EOF закрывает input и даёт engine завершиться перед ограниченным timeout abort. Сетевой тест использует kick_new, чтобы случайное hibernation не скрылось takeover-политикой.
Android SASL в 0.6.1
На TLS1.2 предлагается certificate endpoint binding, на TLS1.3 также exporter. Проверены SHA1/256, SASL1/2, SSDP on/off, tampered bindings, WSS без CB и явно отключённый PLUS. Monocles имеет версионные различия fallback; настоящие устройства не запускались. Certificate signature algorithms EdDSA/unknown не используются для endpoint binding; TLS1.3 exporter при этом сохраняется.
Логирование в 0.7.0
Native-style log level maps и explicit sinks, console/file, JSON/plain, UTC millis и SIGHUP reopen реализованы. В scope входят TLS/SASL/bind/SM, startup, maintenance и основные входящие S2S события. Syslog/plugin sinks, mixed Lua log tables, полный hot reload и журналы всех модулей не реализованы. PLAIN теперь нормализует имя/authorization identity; wire abort/retry проверены отдельно. Журнал нужен для диагностики оставшегося реального Android отказа.
Cached SASL2 и Gajim в 0.7.1
Bind2 остаётся явно включаемым. Сохранённый Quickstart request к недоступному optional extension не мешает credentials exchange и последующей обычной привязке. Inline SM при отключённом smacks также не обрабатывается. Host/account discovery объявляет seclabels/register по наличию реальных обработчиков; создание новых аккаунтов по-прежнему зависит от allow_registration. Gajim predicates проверены по python source, реальные приложения не запускались. Policy catalog adapter — расширение для supplied config, а не ACL implementation.
PEP и DNSSEC в 0.7.2
Добавлены проверки OMEMO/аватаров с публикацией без to, recoverable missing bundles, publish-options/config retry, сохранением после restart и скрытой от журнала полезной нагрузкой. IQ errors адресуются от имени исходной цели; notification defaults совпадают с эффективной конфигурацией при preconditions. Конкретный production IQ отказ из INFO-лога0.7.1 неизвестен. DNSSEC клиент проверяет до XMPP; текущая зона wthome.ru не имеет обнаруженных DS/DNSKEY. Требуется настройка DNS/регистратора, docs/DNSSEC.md. Эта сборка не добавляет DNSSEC validation в outbound federation.
PEP порядок в 0.7.3
PEP/PubSub items выдаются newest-first, как реальный supplied mod_pep. Протокольный regression сохраняет старую пустую и новую populated devicelist, проверяет первый item как Android parser, замену current и restart. Native oracle отдельно подтверждает порядок. Это не гарантирует исправления каждого production индикатора: реальная конфигурация/содержимое узлов не предоставлены.
HTTP и диагностика0.7.4
HTTPS учитывает https_interfaces (включая* → IPv4+IPv6), HTTP — http_interfaces, с fallback к interfaces. Добавлена безопасная HTTP/TLS/status диагностика. Закрытие до SASL обрабатывается штатно и завершает WebSocket. Для подтверждённой страницы Converse https://conversejs.wthome.ru добавлен точный allowed Origin в примеры; рабочий конфиг требуется обновить отдельно. Runtime wire test подтверждает original403 → configured101, IPv4/IPv6 и TLS validation. PEP production причина по-прежнему не доказана; новая диагностика различает parser-valid IDs и форму уведомлений. Нет подтверждения Android UI, живого production WSS, DNSSEC signing или полной замены Prosody.