Repository navigation
Releases: tty-pt/axil
Releases · tty-pt/axil
Release list
v1.6.0
- Canonical Browser WebSocket Bridge (
htdocs/axil-bridge.js):- Shipped single-source, zero-dependency browser WebSocket bus with auto-reconnect, exponential backoff, port-scoped channel routing, and telemetry logging.
- WebSocket Channel Multiplexing (
include/ttypt/axil-ws.h):- Standardized channel multiplexing definitions: Stream 0 (Text/ANSI TTY), Stream 1 (Binary BCP
#b), Stream 2 (JSON/RPC).
- Standardized channel multiplexing definitions: Stream 0 (Text/ANSI TTY), Stream 1 (Binary BCP
- Capability Allowlist & Dynamic Module Imports:
- Updated WASM allowed imports (
wasm-allowed-imports.lst) ensuring strict guest/host boundaries.
- Updated WASM allowed imports (
Verification
gpg --verify CHECKSUMS.asc
sha256sum -c CHECKSUMSv1.5.0
- Framed responses:
Content-Length+Connection: closeon everyaxil_respond(). Responses previously carried no body framing, so a client could only delimit the body by connection close -- over TLS that requiresclose_notify, which was never sent either. Strict clients (OpenSSL 3.5+, modern browsers) discarded such responses as truncated, droppingSet-Cookiewith them. 1xx/204/304 stay length-free per RFC 9110, and 101 upgrade paths bypassaxil_respond()untouched. Explicitly set lengths are respected, never duplicated. - Best-effort TLS
close_notifyon teardown.axil_ssl_drop()now runs up to two non-blockingSSL_shutdown()calls beforeSSL_free(), ensuring clean TLS connection termination. - Teardown is ungated: unauthenticated connection cleanup (SECURITY S5.4).
axil_disconnect()no longer requiresDF_AUTHENTICATEDandaxil_close()no longer requiresDF_CONNECTED. Resolves socket and PTY leakage vulnerabilities where unauthenticated descriptors outlived their TCP connection. - Per-connection generation tracking: Generational tracking on connection descriptors to eliminate stale hook dispatch and race conditions during rapid reconnects.
- Fixed 303 Redirect Connection Teardown: Fixed connection closing and cookie persistence issues on HTTP 303 See Other redirects.
- Post-Chroot Module Loading: Improved path canonicalization and search mechanics for dynamic modules running post-chroot.
kept as a regression: an AUTHENTICATED PTY connection killed abruptly must
still leave no live child, no PTY master, and clean HTTP on recycled fds. - Per-connection generation:
axil_generation().struct descrgrows a
monotonic generation bumped on every accept, so fd-keyed module state can
reject stale entries. axil-tty'smux_stateand NAWS entry carry it and
mux_get()/mux_wsz_get()refuse a mismatch — even a leaked entry is inert
on a recycled descriptor, which closes the whole class rather than the one
instance above. DF_AUTH_AUTO(flag 4096):-Apublishes an identity, it does not prove
one.AXIL_AUTOAUTHauthenticates every connection as the server's own
account, so under-Aa name comparison cannot tell an asserted identity
from a published one. The flag is set only byAXIL_AUTOAUTH(so it cannot
survive descriptor reuse),drop_priviledges()refuses to spawn a child
under it — a child would otherwise run as the operator while the request
proved nothing — and any downstream authorization that trustsREMOTE_USER
must refuse a descriptor carrying it (SECURITY.md S5.8).FD_VALID(fd)before any[FD_SETSIZE]table. One macro, checked
before the first index rather than after the frame has already been touched,
coveringdescr_map,io,frame_mapandws_flags; on Windows
socket_tis the unsignedSOCKET, so>= 0would be a tautology and
INVALID_SOCKET(~0) is rejected by the< FD_SETSIZEhalf. Accept now
spells the sentinel out (fd == INVALID_SOCKET || fd == 0) instead of the
fd <= 0test that never fires for an unsigned ~0, and every teardown path
closes withaxil_sock_close()(closesocket()on Winsock) instead of
close()on a CRT fd.- Tests:
test-auth,test.shandtest-ws.pygain the teardown,
recycled-fd,DF_AUTH_AUTOandFD_VALIDassertions;SECURITY.mdrecords
S5.4 and S5.5.
Verification
gpg --verify CHECKSUMS.asc
sha256sum -c CHECKSUMSv1.4.1
1.4.1
Version Info
- Version: 1.4.1
- Commit: cb094ab
- Build date: 2026-10-02
Verification
gpg --verify CHECKSUMS.asc
sha256sum -c CHECKSUMSv1.4.0
- Renamed
libndc→axil: thendc_*API andinclude/ttypt/ndc.hbecameaxil_*/include/ttypt/axil.h(ndc.pc→axil.pc, lib renamed accordingly). XY hooks are nowaxil_*(on_axil_exit,on_axil_vim,on_axil_command,on_axil_connect,on_axil_disconnect,on_axil_tick,on_axil_parseininclude/ttypt/axil-xy.h). - Unified request-parameter API:
axil_req_param(fd, body, name, buf, len)plus_int/_boolvariants read a parameter from a URL-encoded form body or the query string in a single call (handles quoted values);axil_param/axil_param_int/axil_param_boolcover the query-string path, with support for special characters in the URL. - PUT, DELETE and HEAD support: new
AXIL_PUT/AXIL_DELETE/AXIL_HEADrequest flags,do_PUT/do_DELETE/do_HEADhandlers, andDF_HEADto suppress the response body. - Encoding helpers:
axil_url_encode/axil_url_decode(percent-encoding,%XXand+),axil_json_escape, andaxil_slugifyfor URL/filesystem-safe slugs. - Static-file serving:
axil_respond_file/axil_sendfilewith auto-detected MIME type, ETag validator headers derived from the file stat, and an mmap-backedcache.allowcaching policy (OpenBSD-compatible). - Response conveniences:
axil_respond_plain/axil_respond_json/axil_respond_json_ok/axil_respond_no_content,axil_redirect(303). - Deferred responses:
axil_respond_defer(fd, code)sends status + headers now; the body is completed later from the event loop viaaxil_respond_defer_finish/_done/_abort(streaming and long-poll style responses). - Performance: optimised header conversion, cached HTTP date strings,
TCP_NODELAY, single-write responses. - Hardening: audit fixes, expanded test suite, OpenBSD (
iconv) build fix,bmakecompatibility, and thelibqmap→libcormrename in the build. - TLS & HTTP/2 hardening: teardown no longer calls
SSL_shutdown(noclose_notifyon a dead peer); the HTTP/2 prior-knowledge preface (PRI * HTTP/2.0) is dropped, not treated as a GET; ALPN advertiseshttp/1.1only (not a protocol freeze — addh2when HTTP/2 exists).
Verification
gpg --verify CHECKSUMS.asc
sha256sum -c CHECKSUMSv1.3.1
1.3.1
Version Info
- Version: 1.3.1
- Commit: cf3dd38
- Build date: 2026-05-03
Verification
gpg --verify CHECKSUMS.asc
sha256sum -c CHECKSUMSv1.3.0
1.3.0
Version Info
- Version: 1.3.0
- Commit: c10e6a4
- Build date: 2026-04-28
Verification
gpg --verify CHECKSUMS.asc
sha256sum -c CHECKSUMSv1.2.0
1.2.0
Version Info
- Version: 1.2.0
- Commit: 2f9e3e6
- Build date: 2026-04-27
Verification
gpg --verify CHECKSUMS.asc
sha256sum -c CHECKSUMSv1.1.0
1.1.0
Version Info
- Version: 1.1.0
- Commit: e59538e
- Build date: 2026-04-20
Verification
gpg --verify CHECKSUMS.asc
sha256sum -c CHECKSUMS