109 Commits

Author SHA1 Message Date
Dave Kempe 6bafc79d60 v0.8.0: Credential variables, bug fixes
Credential variables — address book entries reference $domain_username /
$domain_password instead of storing static credentials. Users fill in their
own values via My Credentials (gear menu), stored per-user in Vault KV.
All variables set → silent launch; missing → prompted. Hyphens allowed in
variable names. Docs section added.

Bug fixes:
- Rate limiting disabled by default; opt-in via rate_limit = true (#62)
- Docker: copy FreeRDP guac-common-svc plugins to runtime image (#64)
- Docker/install: add chromium-sandbox package for non-root web sessions (#61)
- Logo: skip redundant JS src= when server-side branding already set (#65)
- Sessions page: hide Open/Share buttons for non-active sessions (#63)
- Drive: expose drive_configured in /api/auth/status, warn in UI when
  [drive] not configured
- install.sh: verify FreeRDP plugin installation

UI polish:
- Nav bar: border separator + spacing between header and nav on all pages
- Address book: password show/hide toggle on all password fields
- Drive diagnostic logging (session.rs, websocket.rs, client.html)

Closes #61, #62, #63, #64, #65
v0.8.0
2026-03-13 13:47:11 +11:00
Dave Kempe 6b1ad57fdc v0.7.2: Fix theme branding flash, Docker writable paths
- Server-side HTML branding: site_title, h1, logo_url baked in at
  startup so first paint shows configured branding (#59)
- Docker: pre-create certs/, drives/, scripts/ dirs and chown for
  non-root user so startup loaders can write config/certs (#57)
v0.7.2
2026-03-12 21:13:25 +11:00
Dave Kempe 991a8cf9e6 Fix Docker writable paths for non-root user (#57)
Pre-create certs/, drives/, scripts/ dirs and chown them to the
rustguac user. Also chown the top-level /opt/rustguac dir (non-recursive)
so startup loaders can write config.toml and cert material without
needing root.
2026-03-12 21:12:18 +11:00
Dave Kempe d559da5775 Fix theme flash: server-side branding in HTML (#59)
Replace default "rustguac" site title, h1 headings, and logo URL in
HTML at startup so the first paint already shows configured branding.
2026-03-12 21:10:30 +11:00
Dave Kempe 364b6772e4 v0.7.1: Guacamole import CLI, migration docs
- Wire up import-guacamole CLI subcommand (--file, --folder, --scope, --dry-run)
- Fix non-UTF-8 SQL dumps crashing import (use lossy UTF-8 decoding)
- Add migration.md to embedded docs
v0.7.1
2026-03-12 21:03:02 +11:00
Dave Kempe 62c92aa260 Update screenshots: web automation UI, clone button, sanitised entries
- web_connection.png: Full web entry editor showing Banner, Automation
  section (username, password, login script dropdown, autofill), Allowed
  Domains, Recording Settings, clipboard controls, SSH tunnels
- address_book.png: Updated to show clone button column, sanitised
  hostnames and folder names
- screenshots.md: Updated web session editor description
2026-03-12 08:09:31 +11:00
Dave Kempe 7bf797c9e8 Merge pull request #53 from sol1/dependabot/cargo/fuzz/quinn-proto-0.11.14
Bump quinn-proto from 0.11.13 to 0.11.14 in /fuzz
2026-03-12 07:35:52 +11:00
Dave Kempe 0c98aba190 v0.7.0: Banner field, automation UI, fix CDP policy, login script filtering
- Add optional `banner` field to address book entries (shown before session
  starts, user must click Continue). No longer auto-populates from display_name.
- Restructure web entry form: username, password, login script, and autofill
  collapsed under a collapsible "Automation" section.
- Filter login scripts dropdown to .js/.sh/.py files only (skip package.json etc.)
- Fix CDP/login scripts: change DeveloperToolsAvailability policy from 2 (disabled)
  to 0. DevTools UI remains blocked by chrome://* URLBlocklist. Fixes login script
  automation that was silently broken by the v0.6.0 security hardening.
- Update Dockerfile, debian/postinst, install.sh with corrected policy.
- Update docs/security.md and docs/web-sessions.md.
v0.7.0
2026-03-11 23:01:22 +11:00
Dave Kempe d63cc4a62c Fix login script fetch: use apiHeaders() not authHeaders()
The loadLoginScripts() function called the non-existent authHeaders(),
causing a JS error that silently prevented web entry edit/clone modals
from opening.
2026-03-11 22:01:34 +11:00
Dave Kempe d07b8ae225 v0.7.0: Login script dropdown, batch address book, Docker non-root
New features:
- Login script selector: dropdown populated from server scripts dir (#52)
- Batch address book endpoint eliminates N+1 API calls (#56)
- Clone button for address book entries (#56)
- Increased API rate limits (#56)

Fixes:
- Docker container runs as non-root user (#50)
- Conditional --no-sandbox when running as root (#50)
- Post-spawn Chromium liveness check with stderr capture (#50)

Docs:
- Theme/branding configuration guide (#55)
- Vault metadata policy for deletes (#54)
- TLS config clarification (no boolean toggle)
2026-03-11 21:54:38 +11:00
Dave Kempe a57af11413 Run Docker container as non-root user (#50)
Create a dedicated rustguac user instead of running as root. This
fixes the Chromium sandbox issue (SUID helper works as non-root)
and is better security practice for containers.

Chromium crashpad needs a real home directory, so the user gets
/home/rustguac. Data/recording dirs are chowned at build time.
2026-03-11 21:20:20 +11:00
Dave Kempe 5a44d02509 Add --no-sandbox for root/Docker, post-spawn Chromium liveness check (#50)
Chromium refuses to start as root without --no-sandbox, causing a
silent black screen in Docker. Now detected via euid check — bare
metal installs with the SUID sandbox helper are unaffected.

Also adds a 500ms post-spawn liveness check: if Chromium exits
immediately (sandbox failure, missing libs, etc), stderr is captured
and logged, and the session fails with a clear error instead of
leaving Xvnc running with a black screen.
2026-03-11 21:11:01 +11:00
Dave Kempe 4f66ea35fd Add clone button for address book entries (#56)
Clone opens the entry form in create mode pre-populated with the
source entry's settings and a "-copy" name suffix. Credentials are
not copied (security by design) — user re-enters or uses prompt.

Useful for duplicating similar entries (e.g. same config, different
host) and as a workaround for rename (clone + delete original).
2026-03-11 20:58:54 +11:00
Dave Kempe 3c3217197b Batch address book endpoint, increase rate limits (#56)
Add GET /api/addressbook that returns all visible folders with entries
in a single response. Eliminates N+1 fetch pattern (list folders, then
entries per folder) that triggered 429 rate limiting on page load.

Address book UI now uses batch endpoint for initial load, falls back to
per-folder fetch after mutations (create/edit/delete).

Rate limits increased: API 20/s burst 100 (was 5/s burst 30), session
create 2/s burst 10 (was 1/s burst 5), WebSocket 5/s burst 50 (was
1/s burst 20).
2026-03-11 20:55:56 +11:00
Dave Kempe a28816eca6 Document [theme] section: presets, logo_url, colour overrides, branding example (#55) 2026-03-11 20:31:17 +11:00
Dave Kempe 5a5bd8ff75 Document Vault KV v2 metadata policy requirement for deletes (#54)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 20:05:35 +11:00
dependabot[bot] 99b482a994 Bump quinn-proto from 0.11.13 to 0.11.14 in /fuzz
Bumps [quinn-proto](https://github.com/quinn-rs/quinn) from 0.11.13 to 0.11.14.
- [Release notes](https://github.com/quinn-rs/quinn/releases)
- [Commits](https://github.com/quinn-rs/quinn/compare/quinn-proto-0.11.13...quinn-proto-0.11.14)

---
updated-dependencies:
- dependency-name: quinn-proto
  dependency-version: 0.11.14
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 00:18:47 +00:00
Dave Kempe 04111ab177 Clarify TLS config docs: no boolean toggle, presence of fields controls behaviour
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 07:43:19 +11:00
Dave Kempe df402944f3 v0.6.2: Fix mTLS identity parsing (#51), decouple server/guacd TLS (#49)
- Rewrite Vault mTLS client to build rustls ClientConfig directly,
  bypassing reqwest::Identity::from_pem() which fails with rustls
  backend for PKCS#8 keys from OpenBao/Vault PKI
- Make cert_path/key_path optional in [tls] — guacd TLS now works
  independently of server HTTPS (for reverse proxy setups)
- Add webpki-roots direct dependency for custom TLS config
- Add mTLS tests: PKCS#8 key, fullchain cert, tls_skip_verify
- Update docs: configuration.md, security.md

Closes #51, closes #49

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v0.6.2
2026-03-11 07:37:45 +11:00
Dave Kempe f40fe6f37e Update quinn-proto 0.11.13 → 0.11.14 (RUSTSEC-2026-0037)
Fix high-severity DoS vulnerability in quinn-proto (transitive dep).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v0.6.1
2026-03-10 11:56:39 +11:00
Dave Kempe da5e1907fa Fix clippy warnings in import.rs for CI
- Allow dead_code on module (used via CLI subcommand, not direct calls)
- Simplify bool toggle: in_quote = !in_quote
- Use iterator instead of index loop in deduplicate_names

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:49:33 +11:00
Dave Kempe ac77bfab98 v0.6.1: Vault mTLS support, comprehensive test suite (87 tests)
Vault/OpenBao mTLS:
- Add ca_cert, client_cert, client_key fields to [vault] config
- Supports custom CA certificates and mutual TLS authentication
- Clear error messages for missing files, invalid PEM, missing key
- Fixes #48 (OpenBao requiring client certificates)

Test suite (8 → 87 tests):
- vault: 13 tests (TLS client builder, config deserialization, name validation)
- auth: 11 tests (role hierarchy, effective role capping, XFF/trusted proxy, has_role)
- session: 12 tests (CIDR network checks, autofill JSON parsing, placeholder substitution)
- browser: 8 tests (Chromium password encryption, Login Data SQLite, RangeAllocator)
- config: 8 tests (preset resolution, theme overrides, defaults, vault config)
- api: 6 tests (HTML escaping, recording name path traversal protection)
- db: 7 tests (SHA-256 hashing, key generation, user groups parsing)
- import: 12 tests (already existed, now wired into module tree)
- protocol: 8 tests (already existed)

Other:
- Wire import.rs into module tree (fixes orphaned tests)
- Document mTLS config in configuration.md and integrations.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:44:46 +11:00
Dave Kempe 8945a33208 Merge pull request #42 from sol1/dependabot/github_actions/docker/build-push-action-7
ci: bump docker/build-push-action from 6 to 7
2026-03-07 07:33:39 +11:00
Dave Kempe aea2e5da21 Merge pull request #43 from sol1/dependabot/github_actions/docker/setup-buildx-action-4
ci: bump docker/setup-buildx-action from 3 to 4
2026-03-07 07:33:27 +11:00
Dave Kempe 4e85db3022 Merge pull request #44 from sol1/dependabot/github_actions/docker/login-action-4
ci: bump docker/login-action from 3 to 4
2026-03-07 07:33:14 +11:00
Dave Kempe b5d31b13ce Add dedicated web sessions doc, fix credential docs, global policy warning
- New docs/web-sessions.md: comprehensive guide with autofill, domain
  allowlisting, login scripts (Playwright + shell examples), clipboard
  control, API reference, and troubleshooting
- Fix integrations.md: web sessions DO use credentials (for autofill
  and login scripts)
- Add global Chromium policy warning to security.md and web-sessions.md
- Add web-sessions.md to in-app docs (build.rs)
- Condense overview.md web section to link to new dedicated doc

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v0.6.0
2026-03-07 07:30:09 +11:00
Dave Kempe a11395df7c Merge pull request #47 from sol1/dependabot/cargo/tokio-1.50.0
deps: bump tokio from 1.49.0 to 1.50.0
2026-03-07 07:20:17 +11:00
dependabot[bot] deb53f16ec ci: bump docker/setup-buildx-action from 3 to 4
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 20:20:14 +00:00
Dave Kempe 8710f45164 Merge pull request #46 from sol1/dependabot/cargo/uuid-1.22.0
deps: bump uuid from 1.21.0 to 1.22.0
2026-03-07 07:20:13 +11:00
Dave Kempe 3497d641e3 Merge pull request #45 from sol1/dependabot/cargo/toml-1.0.4spec-1.1.0
deps: bump toml from 1.0.3+spec-1.1.0 to 1.0.4+spec-1.1.0
2026-03-07 07:20:10 +11:00
Dave Kempe 5318c9d4c5 Merge pull request #41 from sol1/dependabot/github_actions/docker/setup-qemu-action-4
ci: bump docker/setup-qemu-action from 3 to 4
2026-03-07 07:18:45 +11:00
Dave Kempe 99d79fe05d v0.6.0: Web autofill, domain allowlisting, clipboard control, Guacamole import
New features:
- Native Chromium autofill: pre-populate Login Data SQLite before launch,
  zero external deps (no Node.js/Playwright needed for simple login flows)
- Per-entry domain allowlisting: restrict which domains Chromium can reach
  via --host-rules (separate from server-side web_allowed_networks CIDR)
- Per-entry clipboard control: disable-copy and disable-paste for all
  session types (SSH, RDP, VNC, Web) via guacd native parameters
- Guacamole import: `rustguac import-guacamole` parses mysqldump SQL and
  writes entries to Vault address book

Security hardening:
- Comprehensive Chromium managed policy deployed via install.sh, Dockerfile,
  and debian/postinst (blocks DevTools, downloads, file dialogs, extensions,
  dangerous URL schemes)
- Profile isolation: each web session gets a unique UUID-based profile dir
- Autofill credentials encrypted with Chromium's native os_crypt (AES-128-CBC)

Documentation:
- Updated README, docs/api.md, docs/security.md, docs/configuration.md,
  docs/overview.md, docs/integrations.md with all new features
- Clarified two-layer domain restriction (web_allowed_networks vs allowed_domains)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 00:54:26 +11:00
dependabot[bot] 5495d0346d deps: bump tokio from 1.49.0 to 1.50.0
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.49.0 to 1.50.0.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.49.0...tokio-1.50.0)

---
updated-dependencies:
- dependency-name: tokio
  dependency-version: 1.50.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 09:22:09 +00:00
dependabot[bot] e8345b6b91 deps: bump uuid from 1.21.0 to 1.22.0
Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.21.0 to 1.22.0.
- [Release notes](https://github.com/uuid-rs/uuid/releases)
- [Commits](https://github.com/uuid-rs/uuid/compare/v1.21.0...v1.22.0)

---
updated-dependencies:
- dependency-name: uuid
  dependency-version: 1.22.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 09:21:47 +00:00
dependabot[bot] 699907445a deps: bump toml from 1.0.3+spec-1.1.0 to 1.0.4+spec-1.1.0
Bumps [toml](https://github.com/toml-rs/toml) from 1.0.3+spec-1.1.0 to 1.0.4+spec-1.1.0.
- [Commits](https://github.com/toml-rs/toml/compare/toml-v1.0.3...toml-v1.0.4)

---
updated-dependencies:
- dependency-name: toml
  dependency-version: 1.0.4+spec-1.1.0
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 09:21:31 +00:00
dependabot[bot] 1f1032242d ci: bump docker/login-action from 3 to 4
Bumps [docker/login-action](https://github.com/docker/login-action) from 3 to 4.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 09:21:16 +00:00
dependabot[bot] b21ddabf8a ci: bump docker/build-push-action from 6 to 7
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6 to 7.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 09:21:08 +00:00
dependabot[bot] 20b8d3fc4a ci: bump docker/setup-qemu-action from 3 to 4
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 09:21:05 +00:00
Dave Kempe 83f3da874e Update README: add VNC, SSH jump hosts, Kerberos NLA, themes
Add missing headline features to the README feature list and
architecture diagram. Update GitHub repo description to match.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 10:07:46 +11:00
Dave Kempe 3f8e4b7716 Update aws-lc-rs 1.16.1 / aws-lc-sys 0.38.0 (fix Dependabot alerts)
Resolves PKCS7_verify signature/chain validation bypass and AES-CCM
timing side-channel vulnerabilities in aws-lc-sys.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 08:27:59 +11:00
Dave Kempe fcd164a6bf Merge patches 003+004 to fix Docker build conflict
Patches 003 (null guards) and 004 (config.h includes) both modified
disp.c and input.c, causing git apply to fail when applied sequentially
in the Docker build. Combined into a single 003-null-guard-and-config-h
patch that applies cleanly after 001 and 002.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v0.5.1
2026-03-04 17:27:28 +11:00
Dave Kempe 4c11d40eec Update aws-lc-rs to 1.16.1 (fixes Dependabot security alert)
Bumps aws-lc-sys from 0.37.1 to 0.38.0 via aws-lc-rs 1.16.1,
resolving the security_update_not_possible failures in Dependabot.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 17:17:02 +11:00
Dave Kempe 2bf34440e6 v0.5.1: RDP resize fix, new themes, Docker config persistence
- Fix RDP display resize for FreeRDP 3.x (patch 004: config.h struct layout)
- Add aurora theme (midnight blue with ambient glow gradients)
- Add jaguar theme (racing green & gold with subtle gradients)
- Add bg_pattern support for CSS gradient backgrounds in themes
- Fix Docker config.toml persistence across rebuilds (#38)
- Add Docker Compose volume mount documentation
- Increase API rate limit to 5/s burst 30 (fix spurious 429s)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 17:08:14 +11:00
Dave Kempe 5e158eecf4 Fix arm64 .deb: change Architecture from amd64 to any
debian/control had Architecture: amd64 hardcoded, causing
dpkg-buildpackage to skip the package entirely on arm64 hosts
("no binary artifacts found").

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v0.5.0
2026-03-01 16:27:39 +11:00
Dave Kempe 043e52195b Fix debian/rules: move DEB_HOST_MULTIARCH to file-scope Make variable
The := assignment was inside a recipe (tab-indented) where lines are
shell commands, not Make directives. Move to file scope with ?= so
dpkg-buildpackage can override, and Make expands it in recipe lines.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 15:48:43 +11:00
Dave Kempe 996faa1e4a Fix arm64 .deb build: use DEB_HOST_MULTIARCH for FreeRDP plugin path
debian/rules hardcoded x86_64-linux-gnu for the FreeRDP plugin directory,
causing empty packages on arm64 (aarch64-linux-gnu).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 15:24:17 +11:00
Dave Kempe ea72c52a31 v0.5.0: Theme system, ARM64 builds, Docker fixes, dependency updates
Theme system:
- 6 built-in presets (dark, light, high-contrast, terminal, nord, corporate)
- Admin configures preset + per-color overrides in [theme] config section
- Client-side theme switching via localStorage (flash-free)
- All static pages updated with 28 CSS custom properties

Proxy telemetry:
- Track which side terminated connection (guacd/browser/cancelled)
- Timing-based log levels (guacd close <5s = warning)
- Clamp session dimensions to safe ranges (width 640-8192, height 480-8192, DPI 16-384)

Docker fixes (#37):
- Fix port mismatch: Dockerfile now uses 8089 consistently
- Auto-generate admin API key on first run
- Add API key setup docs and recordings volume to compose example

ARM64 support:
- Multi-platform Docker builds (linux/amd64 + linux/arm64)
- Native ARM64 .deb and tarball builds via ubuntu-24.04-arm runner

Dependency updates:
- rustls 0.23.37, chrono 0.4.44, clap 4.5.60, toml 1.0.3
- futures-util 0.3.32, uuid 1.21.0, pulldown-cmark 0.13.1
- actions/upload-artifact v7, actions/download-artifact v8

Also: FreeRDP 3.x NULL deref patch (003), .gitignore for .playwright-mcp/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 15:05:41 +11:00
Dave Kempe f58695c7eb Fix deb config: move misplaced keys out of [recording] section (#25)
The default config.toml shipped in the .deb had db_path, static_path,
and other top-level keys placed after the [recording] header, causing
TOML to scope them under [recording] where serde silently ignored them.
The top-level db_path defaulted to ./rustguac.db which the rustguac
user cannot create in the root-owned /opt/rustguac directory.

Fixes: move all top-level keys above section headers in the template.
Adds a postinst migration that detects and repairs broken configs on
upgrade (backs up config first).

Closes #25

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v0.4.1 v0.4.2-rc2 v0.4.2-rc4 v0.4.2-rc3
2026-02-14 19:36:12 +11:00
Dave Kempe 066a063304 Improve RDP display sizing: match browser dimensions on connect and resize
- Send actual browser window dimensions at session creation (addressbook,
  sessions) instead of defaulting to 1920x1080
- Send initial sendSize() on WebSocket connect so guacd can resize the
  remote display via Display Update channel
- Debounce window resize handler (250ms) to avoid overwhelming RDP server

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v0.4.0
2026-02-14 10:55:40 +11:00
Dave Kempe f8744603f8 Update dependencies: russh 0.57, toml 1.0, clap 4.5.58, libc 0.2.182
- russh 0.54 → 0.57: Marvin attack mitigation (RSA), server-side ping,
  ML-KEM post-quantum key exchange, extension algo kex fix
- toml 0.9 → 1.0: stable release
- clap 4.5.57 → 4.5.58: patch update
- libc 0.2.180 → 0.2.182: patch update
- rand stays at 0.9: rand 0.10 requires stable rand_core 0.10.0 which
  conflicts with russh 0.57's rand_core 0.10.0-rc-3 pin

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:47:10 +11:00