Reuse resolved UDP peer for native auth
ci / test (push) Canceled after 0s
ci / fuzz-smoke (push) Canceled after 0s
ci / macos-client (macos-aarch64, macos-14) (push) Canceled after 0s
ci / macos-client (macos-x86_64, macos-13) (push) Canceled after 0s
ci / windows-client (push) Canceled after 0s
ci / package-release (linux-x86_64, ubuntu-latest, , , ) (push) Canceled after 0s
ci / package-release (macos-aarch64, macos-14, , , ) (push) Canceled after 0s
ci / package-release (macos-x86_64, macos-13, , , ) (push) Canceled after 0s
ci / package-release (windows-aarch64, windows-latest, aarch64, windows, aarch64-pc-windows-msvc) (push) Canceled after 0s
ci / package-release (windows-x86_64, windows-latest, , , ) (push) Canceled after 0s
ci / remote-bench (push) Canceled after 0s
ci / publish-gitea-release (push) Canceled after 0s

This commit is contained in:
DuProcess
2026-07-16 20:49:40 -04:00
parent 2dc921b2d5
commit 9d2f3949e6
+19 -12
View File
@@ -451,7 +451,8 @@ async fn main() -> Result<()> {
};
let cache_requested_env = requested_env(&config, &host, resolved_ssh_config.as_ref());
let socket = bind_udp_for_peer(resolve_addr(&target_udp_host, dosh_port)?).await?;
let target_udp_addr = resolve_addr(&target_udp_host, dosh_port)?;
let socket = bind_udp_for_peer(target_udp_addr).await?;
if let Some(mut cached) = credential.clone() {
cached.udp_host = target_udp_host.clone();
@@ -541,6 +542,7 @@ async fn main() -> Result<()> {
let native_start = Instant::now();
match try_native_auth(
&socket,
target_udp_addr,
&config,
&requested_server,
&server,
@@ -1947,23 +1949,28 @@ async fn run_doctor_for_host(
) {
println!("[warn] native endpoint: {warning}");
}
match resolve_addr(&udp_host, dosh_port) {
Ok(addr) => println!("[ok] udp resolve: {addr}"),
Err(err) => println!("[fail] udp resolve: {err:#}"),
let udp_addr = match resolve_addr(&udp_host, dosh_port) {
Ok(addr) => {
println!("[ok] udp resolve: {addr}");
addr
}
Err(err) => {
println!("[fail] udp resolve: {err:#}");
return Err(err.context("resolve UDP target for native doctor"));
}
};
println!(
"[info] forwarding requested by config: agent={} default_session={}",
config.forward_agent, config.default_session
);
let socket = bind_udp_for_peer(resolve_addr(&udp_host, dosh_port)?).await?;
let socket = bind_udp_for_peer(udp_addr).await?;
match try_native_auth_check(
&socket,
udp_addr,
config,
requested,
&server,
ssh_port,
&udp_host,
dosh_port,
args.ssh_key.as_deref(),
Some(&parsed_ssh_config),
)
@@ -2393,7 +2400,8 @@ async fn run_proxy_stdio_command(config: &dosh::config::ClientConfig, args: &Arg
let target_udp_host =
selected_udp_host(requested_udp_host.as_deref(), &server, &resolved_ssh_config)?;
let dosh_port = args.dosh_port.or(host.port).unwrap_or(config.dosh_port);
let socket = bind_udp_for_peer(resolve_addr(&target_udp_host, dosh_port)?).await?;
let target_udp_addr = resolve_addr(&target_udp_host, dosh_port)?;
let socket = bind_udp_for_peer(target_udp_addr).await?;
let session = args
.session
.clone()
@@ -2407,6 +2415,7 @@ async fn run_proxy_stdio_command(config: &dosh::config::ClientConfig, args: &Arg
}];
let (_frame, cred) = try_native_auth(
&socket,
target_udp_addr,
config,
&requested_server,
&server,
@@ -5367,6 +5376,7 @@ async fn send_terminal_udp(socket: &UdpSocket, packet: &[u8], addr: SocketAddr)
#[allow(clippy::too_many_arguments)]
async fn try_native_auth(
socket: &UdpSocket,
addr: SocketAddr,
config: &dosh::config::ClientConfig,
requested_server: &str,
server: &str,
@@ -5383,7 +5393,6 @@ async fn try_native_auth(
requested_env: Vec<EnvVar>,
allow_passphrase_prompt: bool,
) -> Result<(Frame, CachedCredential)> {
let addr = resolve_addr(udp_host, udp_port)?;
let owned_ssh_config;
let ssh_config = if let Some(ssh_config) = ssh_config_hint {
ssh_config
@@ -5525,16 +5534,14 @@ async fn try_native_auth(
#[allow(clippy::too_many_arguments)]
async fn try_native_auth_check(
socket: &UdpSocket,
addr: SocketAddr,
config: &dosh::config::ClientConfig,
requested_server: &str,
server: &str,
ssh_port: Option<u16>,
udp_host: &str,
udp_port: u16,
cli_identity: Option<&Path>,
ssh_config_hint: Option<&SshConfig>,
) -> Result<NativeAuthCheckOkBody> {
let addr = resolve_addr(udp_host, udp_port)?;
let owned_ssh_config;
let ssh_config = if let Some(ssh_config) = ssh_config_hint {
ssh_config