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 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() {
|
if let Some(mut cached) = credential.clone() {
|
||||||
cached.udp_host = target_udp_host.clone();
|
cached.udp_host = target_udp_host.clone();
|
||||||
@@ -541,6 +542,7 @@ async fn main() -> Result<()> {
|
|||||||
let native_start = Instant::now();
|
let native_start = Instant::now();
|
||||||
match try_native_auth(
|
match try_native_auth(
|
||||||
&socket,
|
&socket,
|
||||||
|
target_udp_addr,
|
||||||
&config,
|
&config,
|
||||||
&requested_server,
|
&requested_server,
|
||||||
&server,
|
&server,
|
||||||
@@ -1947,23 +1949,28 @@ async fn run_doctor_for_host(
|
|||||||
) {
|
) {
|
||||||
println!("[warn] native endpoint: {warning}");
|
println!("[warn] native endpoint: {warning}");
|
||||||
}
|
}
|
||||||
match resolve_addr(&udp_host, dosh_port) {
|
let udp_addr = match resolve_addr(&udp_host, dosh_port) {
|
||||||
Ok(addr) => println!("[ok] udp resolve: {addr}"),
|
Ok(addr) => {
|
||||||
Err(err) => println!("[fail] udp resolve: {err:#}"),
|
println!("[ok] udp resolve: {addr}");
|
||||||
|
addr
|
||||||
}
|
}
|
||||||
|
Err(err) => {
|
||||||
|
println!("[fail] udp resolve: {err:#}");
|
||||||
|
return Err(err.context("resolve UDP target for native doctor"));
|
||||||
|
}
|
||||||
|
};
|
||||||
println!(
|
println!(
|
||||||
"[info] forwarding requested by config: agent={} default_session={}",
|
"[info] forwarding requested by config: agent={} default_session={}",
|
||||||
config.forward_agent, config.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(
|
match try_native_auth_check(
|
||||||
&socket,
|
&socket,
|
||||||
|
udp_addr,
|
||||||
config,
|
config,
|
||||||
requested,
|
requested,
|
||||||
&server,
|
&server,
|
||||||
ssh_port,
|
ssh_port,
|
||||||
&udp_host,
|
|
||||||
dosh_port,
|
|
||||||
args.ssh_key.as_deref(),
|
args.ssh_key.as_deref(),
|
||||||
Some(&parsed_ssh_config),
|
Some(&parsed_ssh_config),
|
||||||
)
|
)
|
||||||
@@ -2393,7 +2400,8 @@ async fn run_proxy_stdio_command(config: &dosh::config::ClientConfig, args: &Arg
|
|||||||
let target_udp_host =
|
let target_udp_host =
|
||||||
selected_udp_host(requested_udp_host.as_deref(), &server, &resolved_ssh_config)?;
|
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 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
|
let session = args
|
||||||
.session
|
.session
|
||||||
.clone()
|
.clone()
|
||||||
@@ -2407,6 +2415,7 @@ async fn run_proxy_stdio_command(config: &dosh::config::ClientConfig, args: &Arg
|
|||||||
}];
|
}];
|
||||||
let (_frame, cred) = try_native_auth(
|
let (_frame, cred) = try_native_auth(
|
||||||
&socket,
|
&socket,
|
||||||
|
target_udp_addr,
|
||||||
config,
|
config,
|
||||||
&requested_server,
|
&requested_server,
|
||||||
&server,
|
&server,
|
||||||
@@ -5367,6 +5376,7 @@ async fn send_terminal_udp(socket: &UdpSocket, packet: &[u8], addr: SocketAddr)
|
|||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
async fn try_native_auth(
|
async fn try_native_auth(
|
||||||
socket: &UdpSocket,
|
socket: &UdpSocket,
|
||||||
|
addr: SocketAddr,
|
||||||
config: &dosh::config::ClientConfig,
|
config: &dosh::config::ClientConfig,
|
||||||
requested_server: &str,
|
requested_server: &str,
|
||||||
server: &str,
|
server: &str,
|
||||||
@@ -5383,7 +5393,6 @@ async fn try_native_auth(
|
|||||||
requested_env: Vec<EnvVar>,
|
requested_env: Vec<EnvVar>,
|
||||||
allow_passphrase_prompt: bool,
|
allow_passphrase_prompt: bool,
|
||||||
) -> Result<(Frame, CachedCredential)> {
|
) -> Result<(Frame, CachedCredential)> {
|
||||||
let addr = resolve_addr(udp_host, udp_port)?;
|
|
||||||
let owned_ssh_config;
|
let owned_ssh_config;
|
||||||
let ssh_config = if let Some(ssh_config) = ssh_config_hint {
|
let ssh_config = if let Some(ssh_config) = ssh_config_hint {
|
||||||
ssh_config
|
ssh_config
|
||||||
@@ -5525,16 +5534,14 @@ async fn try_native_auth(
|
|||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
async fn try_native_auth_check(
|
async fn try_native_auth_check(
|
||||||
socket: &UdpSocket,
|
socket: &UdpSocket,
|
||||||
|
addr: SocketAddr,
|
||||||
config: &dosh::config::ClientConfig,
|
config: &dosh::config::ClientConfig,
|
||||||
requested_server: &str,
|
requested_server: &str,
|
||||||
server: &str,
|
server: &str,
|
||||||
ssh_port: Option<u16>,
|
ssh_port: Option<u16>,
|
||||||
udp_host: &str,
|
|
||||||
udp_port: u16,
|
|
||||||
cli_identity: Option<&Path>,
|
cli_identity: Option<&Path>,
|
||||||
ssh_config_hint: Option<&SshConfig>,
|
ssh_config_hint: Option<&SshConfig>,
|
||||||
) -> Result<NativeAuthCheckOkBody> {
|
) -> Result<NativeAuthCheckOkBody> {
|
||||||
let addr = resolve_addr(udp_host, udp_port)?;
|
|
||||||
let owned_ssh_config;
|
let owned_ssh_config;
|
||||||
let ssh_config = if let Some(ssh_config) = ssh_config_hint {
|
let ssh_config = if let Some(ssh_config) = ssh_config_hint {
|
||||||
ssh_config
|
ssh_config
|
||||||
|
|||||||
Reference in New Issue
Block a user