github luiscuellar31/openscp v1.2.0

20 days ago

The Reliability Update (v1.2.0)

Building on v1.1.0, this release fixes problems found in a review of the whole application: transfers that could lose or damage data, how SSH host keys are trusted and saved, and many FTP and WebDAV edge cases. It also adds signed updates for macOS and AppImage, lets FTPS and WebDAV keep checking the server's key when certificate verification is off, and makes large queues, local operations and folder comparisons lighter on the interface.

3 new features, 67 fixes and 14 performance improvements, mostly in Transfers, SSH, SFTP and SCP and FTP, FTPS and WebDAV.

What's new

  • FTP, FTPS and WebDAV: Pin the server key when certificate checks are off (fe4f009)
  • Sites, settings and credentials: Let users choose the application icon (bada933)
  • Updates: Add signed updates for macOS and AppImage (ae36c2e)

Fixes

SSH, SFTP and SCP

  • Stop simultaneous disconnects from racing on the socket (29ed2bc)
  • Stop SCP downloads from stalling 20 seconds and failing (9eef280)
  • Stop uploads on slow links from timing out (a946d7b)
  • Fail an upload when the server rejects closing the file (1c4eb2a)
  • Report SCP-only uploads that the server failed to write (6946809)
  • Stop words in file paths from changing how errors are reported (61ec69f)
  • Connect through HTTP proxies that send the SSH banner early (3dd21f4)
  • Stop the app from quitting when a proxy handshake is canceled (cb6f3e8)
  • Keep the owner or group that a chown leaves unchanged (0a1b84c)
  • Keep existing known_hosts entries when saving a host key (0cc4200)
  • Tell a new host apart from a changed host key (70e3810)
  • Stop a disconnect from closing another connection's socket (0e46cff)
  • Give uploads the local file's permissions instead of 0644 (1ce14e5)
  • Stop sending the account password to one-time code prompts (a72ef46)

FTP, FTPS and WebDAV

  • Handle replies padded with long whitespace without stalling (40db52d)
  • Refuse oversized PROPFIND replies before parsing them (38e3fda)
  • Stop DELETE and MOVE from removing whole collections (cb74fa3)
  • Open folders with more than about 3,000 entries (f0bba0c)
  • Work with servers that redirect folders to a trailing slash (2c03e04)
  • Report a missing path as missing, not as refused access (d8c2f7b)
  • Retry broken TLS handshakes and name size and disk errors (1aeca3b)
  • Keep idle FTP and WebDAV connections alive with TCP keepalive (668c7f9)
  • Show symbolic links as links in MLSD and MLST listings (96aa42f)
  • Keep leading and trailing spaces in MLSD names (9cfdf28)
  • Keep errors in transfer callbacks from crashing the app (3b8f929)
  • Stop sending proxy passwords in clear and support Digest proxies (e8f4715)

Connections and remote files

  • Stop the running operation when several are canceled at once (23323e2)
  • Stop pending logins and connects when canceling or closing (99b9eae)
  • Keep the selection on its entries when sorting (2086ab8)
  • Stop quick navigation from reconnecting to the server (f643a8c)
  • Delete links inside a folder instead of skipping them (9c08ba3)
  • Make "Open in terminal" work with fish, csh and tcsh (1ac1e0c)
  • Stop failed connections from showing "Canceling connection…" (4cf1cc0)
  • Download double-clicked files into the chosen download folder (2a4eb5e)

Transfers

  • Stop parallel downloads to one path from overwriting each other (fff3ada)
  • Stop a download from hanging when its .part is a FIFO (7dd407a)
  • Finish a move's cleanup on retry without uploading again (6351ff0)
  • Give each run its own automatic retry attempts (a4fdff8)
  • Keep unseen errors when the queue drops old finished tasks (05146c6)
  • Stop the queue when workers cannot connect (6cdf943)
  • Never keep a stale queue file when the queue is too large (8e6eeff)
  • Remove only partial data that the removed tasks own (919af1c)
  • Retry skipped dependents with their prerequisite (855778d)
  • Resume waiting work on reconnect and keep pauses (f5d53e0)
  • Keep files dragged out of the window for the drop target (1585b34)
  • Number renamed files after their last dot only (c6ea93e)
  • Run the queue's automatic cleanup without its window (98c2aa0)
  • Delete only our own staging batch, after its copy ends (1a05440)
  • Close worker connections after a minute without work (18a9462)
  • Remove empty staging roots and delete batches off the UI thread (56f478a)
  • Requeue a task resumed while its connection was failing (dccf8de)
  • Stop worker handshakes when the session goes away (8e9a7e0)

Synchronization

  • Keep special files and unsafe names out of sync copies (7f01762)
  • Treat names that differ only in case or Unicode form as conflicts (009ffea)
  • Avoid a crash on exit after comparing folders (46e8204)

Local files

  • Delete folder links without emptying their targets (84b5d86)
  • Keep links and hidden entries when moving across volumes (416bd05)
  • Let long local copies be canceled when closing the window (e760d5b)
  • Stop large local deletes from freezing the window (8d82bb5)

Sites, settings and credentials

  • Keep sites saved while the Site Manager is open (937c2c9)
  • Show the defaults the application uses and save only changes (8da5daa)
  • Keep credentials that could not be read when editing a site (bb6530b)
  • Keep saved sites that this version cannot fully read (0036933)
  • Keep the Sites settings when saving the site list on Windows (1bd03bb)
  • Ask before removing a deleted site's host key (81f6831)

Interface

  • Lighten the light macOS tile, which looked gray (e1d15c6)
  • Translate the transfer queue persistence warnings (5498749)

Performance

SSH, SFTP and SCP

  • Fall back to SFTP without opening a second connection (dbfd614)
  • Stop re-reading local files under the Optional integrity policy (586da30)

FTP, FTPS and WebDAV

  • Skip a full folder listing per lookup on servers without MLST (6fd2935)
  • Stop failed MLSD listings from waiting twice (78e12b7)

Transfers

  • Skip a failed task's dependents without rescanning the queue (2a8cc14)
  • Check move cleanups without scanning the whole queue (468adcc)
  • Start large local uploads without listing whole folders first (14fc650)
  • Remove many rows from the queue window in one step (beeb9a6)
  • Check an upload's folder in one request, not one per level (65e904b)
  • Queue thousands of dropped files without an 8-second wait (e35a97b)
  • Keep a download's time without a second remote stat (ce87c8c)
  • Skip queue saves that would write the same content (d94b60d)
  • Queue sync plans and scan batches in one step (5aa6a70)

Synchronization

  • Pause large comparisons instead of scanning them again (a3dc1de)
Maintenance: 28 behind-the-scenes changes to code, tests, builds, releases and documentation
  • Measure scheduler scaling and wake cadence (8955687)
  • Keep repository documentation focused on lasting value (705a4dc)
  • Pick the newest local Qt by version (d81c25e)
  • Draw the app icon from its Tango sources at standard sizes (8baed1e)
  • Show the macOS light tile as the app icon (08f9814)
  • Stop tee from hiding integration and sanitizer failures (1900b86)
  • Let notarization run and clean up its key on any exit (c842323)
  • Run protocol tests and sanitizers on pull requests to dev (d1a0660)
  • Drop the sanitizer job that the integration workflow repeats (43dbb4f)
  • Stop the release when ad-hoc signing fails (007802f)
  • Package from a build directory of its own (ba79659)
  • Reword a comment that the settings-key check flags (b03c53c)
  • Use a refused connection to check failure details (ab82676)
  • Never replace the assets of an existing release (9be0549)
  • Seed sample history only with the sample sites it saves (0070a0c)
  • Keep the runtime override's manifest beside the original (23d91a8)
  • Make the Linux package checks able to fail (60dc493)
  • Say where the libFuzzer harnesses can be built (3ed9a49)
  • Stop macOS clang-tidy runs that cannot parse the SDK (a7edc58)
  • Refuse to delete what is not a build directory (cb068d0)
  • Bound parallel compile jobs and prefer Ninja (4a7cd52)
  • Limit how long jobs and tests can hang (79aec19)
  • Sign appcasts apart from the build and attest release files (be63b80)
  • Pick commit types by who notices the change (091c717)
  • Group release notes by area of the app (bf25638)
  • Clear the clang-tidy findings that fail static analysis (9e92132)
  • Open Dependabot pull requests against dev (8de0d2e)
  • Verify appcast signatures with OpenSSL 3 when signing (6a6794d)
Download and install

Verify downloads

Verify the download first. SHA256SUMS.txt is attached to this release:

shasum -a 256 -c SHA256SUMS.txt --ignore-missing  # macOS
sha256sum -c SHA256SUMS.txt --ignore-missing      # Linux

Checksums catch a damaged download, not a replaced one. To confirm that a file was built by this repository's release workflow, use the GitHub CLI:

gh attestation verify OpenSCP-1.2.0-x86_64.AppImage --repo luiscuellar31/openscp

macOS

Download OpenSCP-1.2.0-arm64-UNSIGNED.dmg on Apple Silicon or OpenSCP-1.2.0-x86_64-UNSIGNED.dmg on Intel, open it, and drag OpenSCP onto Applications.

OpenSCP is not signed with an Apple Developer ID, so macOS blocks the first launch and reports that it cannot check the app for malicious software. To allow it, open System Settings → Privacy & Security, scroll down to the Security section, click Open Anyway next to the message about OpenSCP, and confirm. The DMG ships these steps as README.txt.

Linux

AppImage, which runs on most distributions:

chmod +x OpenSCP-1.2.0-x86_64.AppImage
./OpenSCP-1.2.0-x86_64.AppImage

Flatpak bundle:

flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user ./OpenSCP-x86_64.flatpak
flatpak run io.github.luiscuellar31.openscp

Replace x86_64 with aarch64 on ARM64 machines.

Full comparison: v1.1.0...v1.2.0

Don't miss a new openscp release

NewReleases is sending notifications on new releases.