Repository navigation
v0.23.17
What's Changed
Fixed
- "Search from vault root" now works for Bitwarden, 1Password, Passbolt and pass, not only KeePass (issue #353) — with root search on, the whole-vault fallback is meant to match an entry titled by the connection's name or host. On these four backends it never did: the connect path, and the connection editor's Load password from vault and Test credential resolution buttons, all read through a plain
retrieve(key), which hands the backend no name or host. The fallback therefore searched for one title only, the internalrustconn/{name}key, which no user writes. The reporter's log shows it:bw list items --search rustconn/hanfile03came back empty and the lookup ended.dispatch_vault_opnow has aVaultOp::RetrieveFor { name, host }that callsretrieve_identity, and the connect path and both editor buttons use it. A backend with root search off ignores the aliases, so its reads are unchanged. The editor's load button also stops building each backend itself and goes throughdispatch_vault_op, as the test button already did. Its Bitwarden unlock now runs under the shared vault lock, and its retrieve gets the per-backend budget the rest of the app uses (45 s for the CLI-backed vaults, 10 s for local ones) instead of a flat 10 s. (rustconn/src/vault_ops.rs,rustconn/src/state/mod.rs,rustconn/src/dialogs/connection/dialog/passwords.rs) - Root search no longer lets a write touch an entry RustConn did not create (issue #353) — on Bitwarden, 1Password and Passbolt,
storeanddeletelocated the existing entry through the same lookup reads use, which with root search on also matches a bare title anywhere in the vault. So a save could overwrite and rename an entry the user kept outside RustConn, and a delete could remove it (Passbolt permanently). Writes now look only for RustConn's ownRustConn: {key}entry; root search widens reads only, as its setting says. (rustconn-core/src/secret/bitwarden.rs,rustconn-core/src/secret/onepassword.rs,rustconn-core/src/secret/passbolt.rs) - KeePass: the connection editor's Load password from vault and Test credential resolution buttons now search from root as a connect does (issue #353) — the reporter's KeePass connection resolved on connect through root search, but both buttons said the password was missing. They read only the
RustConn/scoped entry and never checkedkdbx_root_search. A newKeePassStatus::get_password_from_kdbx_scoped_then_rootdoes the scoped read, then the root search with the same candidates the connect path uses (lookup key, host, name); a database that cannot be read is reported, not treated as a miss. (rustconn-core/src/secret/status.rs,rustconn/src/dialogs/connection/dialog/passwords.rs) - Group passwords: the group dialogs' Load password from vault button and an inherited connect now search from root too (issue #353) — the New Group dialog built each backend itself with a plain
retrieveongroup:{name}, a key nothing writes. The Edit Group dialog, the GUI's non-KeePass Inherit path and the coreCredentialResolverInherit path passed the group's UUID with no name. With root search on, none of them could match an entry titled by the group's name. The KeePass Inherit connect path already could. All of them now pass the group name. The New Group dialog goes throughdispatch_vault_op. KeePass reads in both dialogs useget_password_from_kdbx_scoped_then_root. The two timeout constants only the removed inline dispatch blocks used are gone. (rustconn/src/window/connection_dialogs.rs,rustconn/src/window/edit_group.rs,rustconn/src/state/mod.rs,rustconn-core/src/secret/resolver.rs,rustconn/src/vault_ops.rs) rustconn-cli secret get/set/deletenow use the vault keys the GUI uses (issue #353) — for every backend except KeePass, the CLI read and wrote{name} ({protocol}), and the connection UUID for a 1Password store and for Passbolt. The GUI saves and resolves underrustconn/{name}, orRustConn/{group path}/{name} ({protocol})for the system keyring. Sosecret getnever found a password saved from the GUI, and a connect never found one saved withsecret set. The key functions (generate_store_key*,vault_keys_for_connection) moved from the GUI intorustconn-core, and the CLI uses them.getreads the GUI's key first, root search included, then the GUI's older keys and the old CLI key;deleteremoves all of them. Becauserustconn/{name}carries no group or protocol, same-named connections share it in the GUI as well;setanddeletenow name the other connections they affect on stderr (not for KeePass, whose entry path carries the group and protocol). A root-search match on an entry RustConn did not create is now logged at info level, naming the entry, so a wrong match can be traced.secret getalso passes the connection's name and host, so it honours root search on these backends as it already did for KeePass. (rustconn-core/src/secret/store_key.rs,rustconn/src/vault_ops.rs,rustconn-cli/src/commands/secret.rs)- Bitwarden no longer unlocks twice when a connect starts during the startup unlock (issue #353) — the startup unlock runs on its own thread, outside the vault-op lock. A connect made while it was still running started a second
bw status/bw unlock/bw syncalongside it. Every step appeared twice in the reporter's logs, and eachbwcall takes seconds.auto_unlocknow runs one caller at a time, so the second one waits; if the first stored a session, the second takes the fast path, otherwise it repeats the checks on its own. The startup unlock is now bounded to 30 s, like the connect path's, so it cannot hold the connects behind it indefinitely. (rustconn-core/src/secret/bitwarden.rs,rustconn/src/app.rs)
Documentation
- CLI reference and user guide —
docs/CLI_REFERENCE.mddescribes the keyssecret get/set/deleteuse and thatsecret gethonours root search on every backend that has it;docs/USER_GUIDE.mdgives the system keyring's hierarchical key format. (docs/CLI_REFERENCE.md,docs/USER_GUIDE.md)
Dependencies
- Updated: tokio 1.53.3 → 1.54.0, rustls-webpki 0.103.15 → 0.103.16, crc32fast 1.5.2 → 1.5.3, typed-path 0.12.3 → 0.12.4. All semver-compatible; tokio is a direct dependency (minor bump), the rest are transitive patch bumps. No security advisories affected (
cargo deny check advisoriesclean), andcargo outdated --root-deps-onlyreports every direct dependency current. CLI download versions all current (TigerVNC pinned at 1.16.2, confirmed latest upstream; kubectl/Tailscale/Teleport/Boundary/Hoop.dev/Bitwarden/1Password auto-resolve and were reachable); the RustCrypto release-candidate family and the out-of-range majors remain held back, pinned transitively by the sspi/picky-krb stack exactly as in 0.23.1–0.23.16. The Flatpak/Flathub manifests are in sync and current (GNOME runtime 51, FreeRDP 3.32.2, cJSON 1.7.19, OpenH264 2.6.0, each confirmed as the latest upstream release).
Installation
Flatpak (Recommended)
flatpak install flathub io.github.totoshko88.RustConnSnap
sudo snap install rustconnDebian/Ubuntu (.deb from this release)
sudo dpkg -i rustconn_0.23.17_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (.rpm from this release)
sudo dnf install rustconn-0.23.17-1.fc44.x86_64.rpmAppImage
chmod +x RustConn-0.23.17-x86_64.AppImage
./RustConn-0.23.17-x86_64.AppImagemacOS (Homebrew)
brew tap totoshko88/rustconn
brew install rustconn
open $(brew --prefix)/opt/rustconn/RustConn.appAll dependencies (GTK4, libadwaita, VTE, Adwaita icons) are installed automatically.
Requires macOS 13 (Ventura) or later.
OBS Repositories
Packages available at: https://build.opensuse.org/package/show/home:totoshko88:rustconn/rustconn
# Debian 13 (Trixie)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Debian_13/ /' \
| sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Debian_13/Release.key \
| gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn
# Ubuntu 24.04 LTS (Noble)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_24.04/ /' \
| sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_24.04/Release.key \
| gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn
# Ubuntu 26.04 LTS (Resolute)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_26.04/ /' \
| sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_26.04/Release.key \
| gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn
# Fedora 44
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Fedora_44/home:totoshko88:rustconn.repo
sudo dnf install rustconn
# Fedora 43
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Fedora_43/home:totoshko88:rustconn.repo
sudo dnf install rustconn
# openSUSE Tumbleweed
sudo zypper ar https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/openSUSE_Tumbleweed/ rustconn
sudo zypper ref && sudo zypper in rustconn
# openSUSE Leap 16.0
sudo zypper ar https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/openSUSE_Leap_16.0/ rustconn
sudo zypper ref && sudo zypper in rustconnArch Linux (AUR)
yay -S rustconnFreeBSD (Ports)
pkg install rustconnFull installation guide: https://github.com/totoshko88/RustConn/blob/main/docs/INSTALL.md
Verifying your download
Every binary on this release (deb, rpm, AppImage, Flatpak) is covered two ways.
Plain checksums — download SHA256SUMS alongside the asset, then:
sha256sum -c SHA256SUMSSigned build provenance (SLSA, via Sigstore) — proves the file was built by this
workflow from this commit:
gh attestation verify RustConn-0.23.17-x86_64.AppImage --repo totoshko88/RustConn(The snap is signed by the Snap Store; the macOS build is delivered via the Homebrew tap.)