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
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:
+19
-12
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user