v3.4.0
UNITRONIX/BetterDeskv3.4.0Jul 24, 2026by UNITRONIX
AI Summary
A major feature release adding OIDC login for desktop clients, Guest Access Links, LDAP/AD support, and MeshCentral compatibility layer.
Key Highlights
- Added OIDC login for stock RustDesk desktop clients.
- Added Guest Access Links for Web Remote and RdClient.
- Added RustDesk client LDAP/AD login support.
- Added MeshCentral compatibility layer with optional `MESH_ENABLED=Y`.
- Added Update channel selection (Stable vs Development) in Settings.
New Features
- OIDC login for RustDesk desktop clients.
- Guest Access Links.
- LDAP/AD login for desktop clients.
- MeshCentral compatibility layer.
- Update channel selection.
Full Release Notes
## [3.4.0] — 2026-07-24 ### Added - **OIDC login for stock RustDesk desktop clients (#304):** when panel OIDC is enabled, RustDesk Login shows an SSO option (`/api/login-options` + `/api/oidc/auth` / `auth-query`, same IdP config as panel SSO). Ships via panel update (Go API restart). Verify: enable OIDC → client SSO button → IdP login → access token. - **Guest Access Links for Web Remote / RdClient (#274):** time-limited opaque links with a device allowlist; guests open `/remote/guest?t=…` without a Console session. Mesh single-device share tunnel auth works with a valid `mesh_share` token. - **RustDesk client LDAP/AD login (#218, #260):** desktop/mobile clients use the same directory auth as the web console. Operator guide: `docs/wiki/LDAP-AD.md`. - **RustDesk client sessions (#242):** DB-backed tokens (default 7 days, sliding renewal, max 30 days) under Settings → Authentication → RustDesk clients. - **MeshCentral compatibility layer:** optional `MESH_ENABLED=Y` — native Go `/agent.ashx` / `/meshrelay.ashx` / `/control.ashx`, inventory, guest share, port relay, recording. See `docs/features/MESHAGENT_ONBOARDING.md`. - **BetterDesk Agent Client (alpha):** new Tauri enrollment / remote-agent client tree (`betterdesk-agent-client/`). - **Update channel:** Stable (`main`) vs Development (`dev`) in Settings → Updates (and installer scripts). ### Fixed - **WebSocket Mode behind Nginx / reverse proxy (#276):** signal WSS no longer builds session keys as `IP:0` from proxied headers; PunchHole/RelayResponse reaches WebSocket initiators. **Manual:** set `TRUST_PROXY=Y` and `TRUSTED_PROXIES=<proxy CIDR>`, restart Go, use IP-only `X-Real-IP`, confirm logs show `effective=<client-ip>:<non-zero-port>`. - **WSS relay decryption / mixed protocol (#293, #290):** complete WS message forwarding (no 32 KiB split); reject mixed WSS + native TCP/TLS relay pairs. - **Fresh Docker / GHCR install (#299):** image tag sync, credentials helpers, `DB_PATH` for split compose, `su-exec` / UID `betterdesk` for auth.db under `cap_drop: ALL`. - **PostgreSQL client login and user sync (#300, #301, #292):** session `created_at` scan, duplicate-user loop, NULL `totp_secret` / `last_login` handling. - **OIDC panel SSO authorize redirect (#298):** browser goes to the IdP, not the internal Go API URL. - **Linux HTTP/HTTPS protocol toggle (#219):** LE cert copy (not symlink), bind-service / port sync, installer re-exec after update, Go `GO_API_PORT` / signal port isolation. - **Web Remote file transfer (#217)** and related RdClient / Web Remote UX (toolbar, monitors, keyboard modes, session picker). - **Default admin bootstrap:** remove illegal reassignment of `const password` after create (would TypeError on first-run admin creation). ### Security - **Trusted proxy allowlist (#276):** honor `X-Real-IP` / `X-Forwarded-For` only when `TRUST_PROXY=Y` and the direct peer is in `TRUSTED_PROXIES` (empty allowlist ignores forwarded headers). - **Enrollment outbound gate (#302):** PunchHole/RequestRelay require a live registered initiator; in managed/locked modes the peer must be approved (pending enrollment alone is refused). Anonymous rendezvous without registration is blocked. - **HttpProxyRequest (#296):** schema support with `error: "not supported"` (no open HTTP egress proxy). - **Guest WebSocket proxy:** `/ws/rendezvous` and `/ws/relay` validate guest tokens via Go `/guest/access-links/validate` before upgrade (non-empty `?guest=` alone is no longer sufficient). - **RustDesk OIDC auth-query:** when the pending login recorded a device `id`/`uuid`, poll requests must supply matching non-empty values (omission no longer skips binding). - Dependency / CI hardening: npm audit overrides (`tar` ≥7.5.21), govulncheck, Go toolchain bump, WebSocket auth for bd-signal / remote-agent. ### Changed - Stable channel jump from **3.3.39** (previous `main`) through development patches **3.3.40–3.3.174**. Full per-patch history remains below; this section is the operator-facing **3.4.0** release summary (CI renames `[Unreleased]` on merge to `main`). --- ## What's Changed * Go server: stability wave 1 (compat-safe) by @UNITRONIX in https://github.com/UNITRONIX/BetterDesk/pull/201 * Go server maintenance wave 2: batch lookups, relay race fix, compat test by @UNITRONIX in https://github.com/UNITRONIX/BetterDesk/pull/202 * Release 3.4.0 by @UNITRONIX in https://github.com/UNITRONIX/BetterDesk/pull/210 * Fix web console audit for release by @UNITRONIX in https://github.com/UNITRONIX/BetterDesk/pull/211 * Release: BetterDesk 3.4.0 (stable) by @UNITRONIX in https://github.com/UNITRONIX/BetterDesk/pull/268 * chore: release version 3.4.0 [version-bump] by @UNITRONIX in https://github.com/UNITRONIX/BetterDesk/pull/305 **Full Changelog**: https://github.com/UNITRONIX/BetterDesk/compare/v3.3.2...v3.4.0