v1.10.1
sleep3r/mtproto.zigv1.10.1Jul 22, 2026by sleep3r
Upgrading?
AI Summary
Fixes two mtbuddy CLI issues: pasting VPN/share links in interactive prompts and enabling SYN rejection on systems using the nftables backend.
Key Highlights
- Fixed pasting VPN links in TUI prompts.
- Fixed SYN limiter --reject mode compatibility with nftables.
New Features
- TUI paste fix
- nftables SYN reject fix
Full Release Notes
<details open> <summary>🇷🇺 Что нового (RU)</summary> ## Два точечных фикса `mtbuddy` `v1.10.1` чинит два неприятных сценария в управляющей утилите: вставку VPN/share-ссылок в интерактивные поля и запуск SYN-лимитера с `--reject` на системах, где `iptables` работает через nftables. Ядро MTProto-прокси и сетевой протокол не менялись. Обновление безопасно и рекомендуется пользователям `v1.10.0`, которые настраивают tunnel/egress через интерактивный мастер или используют SYN-лимитер в режиме `REJECT`. ## Вставка VPN/share-ссылок в TUI ([#378](https://github.com/sleep3r/mtproto.zig/issues/378)) **Симптом:** при вставке `vpn://…` или другой share-ссылки первый символ появлялся отдельно и не удалялся обычным Backspace. Остаток вставки мог потеряться; повторная вставка давала строку вроде `vvpn://…`, которую мастер отклонял как невалидную. **Причина:** поле ввода считывало первый байт в raw mode, а затем возвращало терминал в canonical mode через `TCSAFLUSH`. При этом уже пришедший хвост вставки сбрасывался, а первый байт оставался в отдельном внутреннем буфере — вне обычного редактирования строки терминалом. **Фикс:** весь ввод теперь остаётся в одном raw-mode буфере до Enter. Вставка принимается целиком, а Backspace удаляет и самый первый символ, и UTF-8-символы целиком. Поведение Esc/← в пустом поле и non-TTY ввода не изменилось. ## SYN-лимитер с `--reject` на `iptables-nft` ([#377](https://github.com/sleep3r/mtproto.zig/issues/377)) **Симптом:** `sudo mtbuddy setup syn-limit --preset hard --reject` на `iptables v1.8.x (nf_tables)` падал с `RULE_APPEND failed (Invalid argument)`, и `mtproto-syn-limit.service` не применял правило. **Причина:** правило `REJECT --reject-with tcp-reset` внутри пользовательской цепочки не содержало собственного `-p tcp`. Backend `iptables-nft` проверяет target на самом правиле и не наследует TCP-match от правила, которое переходит в эту цепочку. **Фикс:** в IPv4- и IPv6-hashlimit правила добавлен явный `-p tcp`. Режимы `DROP` и `REJECT --reject-with tcp-reset` теперь одинаково корректно применяются и через nftables-backed iptables, и через legacy backend; `DROP` остаётся дефолтом. ## Проверено - `zig build test`, обычная и `ReleaseFast` сборки, Linux cross-build и профиль `x86_64_v3+aes` — зелёные. - Linux PTY: обычная вставка VPN-ссылки и сценарий «первый символ → Backspace → повторная вставка» возвращают точную исходную строку. - Ubuntu 24.04, `iptables v1.8.10 (nf_tables)`: точный сгенерированный `REJECT`-скрипт применяется с `rc=0`. - CI, E2E, bench и install-матрица: Debian 11/12, Ubuntu 20.04/22.04/24.04 — зелёные. </details> --- <details> <summary>🇬🇧 Release notes (EN)</summary> ## Two focused `mtbuddy` fixes `v1.10.1` fixes two rough edges in the management CLI: pasting VPN/share links into interactive prompts and enabling the SYN limiter with `--reject` on systems where `iptables` uses the nftables backend. The MTProto proxy core and wire protocol are unchanged. Upgrading is safe and recommended for `v1.10.0` users who configure tunnel/egress through the interactive wizard or run the SYN limiter in `REJECT` mode. ## Pasting VPN/share links in the TUI ([#378](https://github.com/sleep3r/mtproto.zig/issues/378)) **Symptom:** pasting a `vpn://…` or another share link inserted its first character separately, and normal Backspace could not remove it. The rest of the paste could be lost; pasting again produced a value such as `vvpn://…`, which the wizard rejected as invalid. **Cause:** the prompt consumed its first byte in raw mode, then restored canonical mode with `TCSAFLUSH`. That discarded the already-pending tail of the paste while keeping the first byte in a separate internal seed buffer, outside normal terminal line editing. **Fix:** prompt input now stays in one raw-mode buffer until Enter. A paste is consumed as a single editable value, and Backspace can remove both the first character and complete UTF-8 codepoints. Empty-prompt Esc/← navigation and non-TTY input keep their existing behavior. ## SYN limiter `--reject` on `iptables-nft` ([#377](https://github.com/sleep3r/mtproto.zig/issues/377)) **Symptom:** `sudo mtbuddy setup syn-limit --preset hard --reject` failed on `iptables v1.8.x (nf_tables)` with `RULE_APPEND failed (Invalid argument)`, leaving `mtproto-syn-limit.service` without an applied rule. **Cause:** the `REJECT --reject-with tcp-reset` rule inside the user chain had no local `-p tcp` match. The `iptables-nft` backend validates the target on that rule itself and does not inherit the TCP match from the rule that jumps into the chain. **Fix:** both IPv4 and IPv6 hashlimit rules now carry an explicit `-p tcp`. `DROP` and `REJECT --reject-with tcp-reset` apply correctly through both nftables-backed iptables and the legacy backend; `DROP` remains the default. ## Verified - `zig build test`, regular and `ReleaseFast` builds, Linux cross-build, and the `x86_64_v3+aes` profile are green. - Linux PTY: a normal VPN-link paste and the “first byte → Backspace → paste again” path both return the exact original value. - Ubuntu 24.04 with `iptables v1.8.10 (nf_tables)`: the exact generated `REJECT` script applies with `rc=0`. - CI, E2E, bench, and the install matrix are green on Debian 11/12 and Ubuntu 20.04/22.04/24.04. </details> --- ## Changelog - fix(ctl): preserve pasted input in TUI prompts ([#378](https://github.com/sleep3r/mtproto.zig/issues/378), [#379](https://github.com/sleep3r/mtproto.zig/pull/379)) - fix(ctl): make SYN reject rules nft-compatible ([#377](https://github.com/sleep3r/mtproto.zig/issues/377), [#379](https://github.com/sleep3r/mtproto.zig/pull/379)) **Full Changelog**: https://github.com/sleep3r/mtproto.zig/compare/v1.10.0...v1.10.1
Related Repositories
lightpanda-io/browser★ 36,848
Lightpanda: the headless browser designed for AI and automation
nullclaw/nullclaw★ 8,131
Fastest, smallest, and fully autonomous AI assistant infrastructure written in Zig
zml/zml★ 4,194
Any model. Any hardware. Zero compromise. Built with @ziglang / @openxla / MLIR / @bazelbuild
dmtrKovalenko/odiff★ 3,280
A very fast SIMD-first image comparison library (with nodejs API)
tigerbeetle/tigerbeetle★ 132
The financial transactions database designed for mission critical safety and performance.