chore(release): v0.7.21 — fix cmd-flash on every SSH auth (askpass GUI subsystem)
All checks were successful
ci / mutation test (broker) (push) Has been skipped
ci / test-health gate (push) Successful in 17s
Release Publish (Gitea session_helper) / verify-release-tag (push) Successful in 17s
ci / rust release (push) Successful in 2m50s
ci / rust debug (push) Successful in 3m15s
Release Publish (Gitea session_helper) / publish-linux-x86_64 (push) Successful in 4m4s
ci / python (push) Successful in 1m29s
All checks were successful
ci / mutation test (broker) (push) Has been skipped
ci / test-health gate (push) Successful in 17s
Release Publish (Gitea session_helper) / verify-release-tag (push) Successful in 17s
ci / rust release (push) Successful in 2m50s
ci / rust debug (push) Successful in 3m15s
Release Publish (Gitea session_helper) / publish-linux-x86_64 (push) Successful in 4m4s
ci / python (push) Successful in 1m29s
Followup to v0.7.20: cmd-flash still fired on every connect/reconnect because v0.7.20 only covered the bridge-child spawn site. The remaining flash came from ``sessions_askpass.exe``, which OpenSSH for Windows invokes (via ``SSH_ASKPASS`` + its own ``CreateProcessW`` with ``CREATE_NEW_CONSOLE``) every time a host requires a password, passphrase, or OTP. Multiplexing is intentionally off on Windows (v0.7.15 revert), so each connect goes through three to four ssh calls and the user saw three to four flashes. Fix: mark ``sessions_askpass`` as ``#![cfg_attr(target_os = "windows", windows_subsystem = "windows")]`` so the binary is built as a GUI-subsystem PE. Windows then refuses to allocate a console for it no matter how its parent invokes it. The protocol is unchanged — ssh redirects the askpass child's stdio to pipes via ``STARTUPINFO`` before launch, so writing the password to stdout still reaches ssh and the filesystem rendezvous (``SESSIONS_ASKPASS_REQUEST`` / ``SESSIONS_ASKPASS_RESPONSE`` / ``SESSIONS_ASKPASS_CANCEL``) operates the same. Tests: ``sessions_askpass`` 7/7 pass on Linux and via ``--target x86_64-pc-windows-gnu``. No Sublime-side change so the existing 1247-pass suite is unaffected. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "sessions-sublime"
|
name = "sessions-sublime"
|
||||||
version = "0.7.20"
|
version = "0.7.21"
|
||||||
description = "Sublime-facing Python code for Sessions."
|
description = "Sublime-facing Python code for Sessions."
|
||||||
requires-python = ">=3.8"
|
requires-python = ">=3.8"
|
||||||
license = {text = "MIT"}
|
license = {text = "MIT"}
|
||||||
|
|||||||
12
rust/Cargo.lock
generated
12
rust/Cargo.lock
generated
@@ -221,7 +221,7 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "local_bridge"
|
name = "local_bridge"
|
||||||
version = "0.7.20"
|
version = "0.7.21"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"glob",
|
"glob",
|
||||||
@@ -432,7 +432,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "session_helper"
|
name = "session_helper"
|
||||||
version = "0.7.20"
|
version = "0.7.21"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"notify",
|
"notify",
|
||||||
@@ -443,7 +443,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "session_protocol"
|
name = "session_protocol"
|
||||||
version = "0.7.20"
|
version = "0.7.21"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -452,14 +452,14 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sessions_askpass"
|
name = "sessions_askpass"
|
||||||
version = "0.7.20"
|
version = "0.7.21"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"tempfile",
|
"tempfile",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sessions_native"
|
name = "sessions_native"
|
||||||
version = "0.7.20"
|
version = "0.7.21"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"session_protocol",
|
"session_protocol",
|
||||||
@@ -770,7 +770,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "workspace_identity"
|
name = "workspace_identity"
|
||||||
version = "0.7.20"
|
version = "0.7.21"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zmij"
|
name = "zmij"
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ resolver = "2"
|
|||||||
[workspace.package]
|
[workspace.package]
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
version = "0.7.20"
|
version = "0.7.21"
|
||||||
authors = ["Myeongseon Choi <key262yek@gmail.com>"]
|
authors = ["Myeongseon Choi <key262yek@gmail.com>"]
|
||||||
repository = "https://git.teahaven.kr/sublime-rs/sessions"
|
repository = "https://git.teahaven.kr/sublime-rs/sessions"
|
||||||
homepage = "https://git.teahaven.kr/sublime-rs/sessions"
|
homepage = "https://git.teahaven.kr/sublime-rs/sessions"
|
||||||
|
|||||||
@@ -7,6 +7,14 @@
|
|||||||
//! Shipping this tiny ``.exe`` lets the plugin's prompt-bridge protocol work
|
//! Shipping this tiny ``.exe`` lets the plugin's prompt-bridge protocol work
|
||||||
//! on Windows without giving up password / passphrase authentication.
|
//! on Windows without giving up password / passphrase authentication.
|
||||||
//!
|
//!
|
||||||
|
//! Subsystem: GUI on Windows so OpenSSH's ``CREATE_NEW_CONSOLE`` flag for
|
||||||
|
//! the ``SSH_ASKPASS`` child does not flash a ``cmd.exe`` window for every
|
||||||
|
//! auth round. The protocol is filesystem-rendezvous + stdout (the password
|
||||||
|
//! ssh reads); both work the same regardless of subsystem because ssh
|
||||||
|
//! pre-redirects this child's stdio to pipes via ``STARTUPINFO``.
|
||||||
|
|
||||||
|
#![cfg_attr(target_os = "windows", windows_subsystem = "windows")]
|
||||||
|
//!
|
||||||
//! Protocol (matched verbatim by the Sublime side in ``ssh_runner.py`` /
|
//! Protocol (matched verbatim by the Sublime side in ``ssh_runner.py`` /
|
||||||
//! ``ssh_file_transport.py``):
|
//! ``ssh_file_transport.py``):
|
||||||
//!
|
//!
|
||||||
|
|||||||
Reference in New Issue
Block a user