v1.1.1
Hardening and bug-fix release — no new features, a lot more resilience.
Downloads: legal unix filenames work again (#29)
v1.1.0's traversal guard applied Windows filename rules on every OS and aborted a whole recursive download at the first "suspicious" entry. Now:
- macOS/Linux store every legal name verbatim —
2024-01-01T12:00:00.log,wild*card,aux.txtall download byte-exact. - Windows repairs unrepresentable names browser-style (
:?*etc. →_, device stems and trailing dots gain a_) instead of refusing the file. - A genuinely dangerous or colliding name fails only that entry — it shows up as an Error item in the transfer queue with the reason, and the rest of the tree keeps transferring.
- tar-accelerated SSH downloads now enforce the same name rules through a capability handle on the destination and never materialize symlink/hardlink/device entries from the untrusted stream.
Security & reliability fixes (thanks @coldrain96)
- Changing the master password now rekeys the
.bakrecovery copy too — it can no longer be opened with the old password (#18) - Vault mutations are failure-atomic: a failed save no longer leaves memory and disk disagreeing (#19)
- Vault path changes persist transactionally (#20)
- Remote-edit cache confined: 0700/0600 permissions from the first byte, exclusive file creation, symlinked cache root refused (#17)
- Remote edits are staged next to the original and promoted via rename — a failed upload can no longer truncate the remote file (#21)
- Recursive downloads confined to the chosen destination via capability-based writes (#14)
- Local copies refuse to overwrite, refuse to copy a directory into itself, keep private files 0600 throughout (#15)
- FTP downloads verify the final server reply — a truncated transfer now fails instead of silently passing (#16)
- Stale SSH connection attempts are discarded instead of leaking sessions (#13)
- Connection edits wait for stored credentials to load before allowing save — no more silently wiped secrets (#12)
- Auto-lock idle timer restarts after unlock, so the vault no longer re-locks immediately (#25)
- S3 multipart uploads register their upload ID before the first part — cancelled uploads always abort cleanly, nothing orphaned or billable left behind (#27)
Full changelog: v1.1.0...v1.1.1