Fix launch of manager://localhost

pull/184/head
Chip Senkbeil 1 year ago
parent 4b983b0229
commit 09e8442892
No known key found for this signature in database
GPG Key ID: 35EF1F8EC72A4131

@ -1,4 +1,4 @@
use crate::options::ClientLaunchConfig;
use crate::options::{BindAddress, ClientLaunchConfig};
use async_trait::async_trait;
use distant_core::net::client::{Client, ClientConfig, ReconnectStrategy, UntypedClient};
use distant_core::net::common::authentication::msg::*;
@ -74,12 +74,14 @@ impl LaunchHandler for ManagerLaunchHandler {
String::from("server"),
String::from("listen"),
String::from("--host"),
// Disallow `ssh` from being used as the host
config
.distant
.bind_server
.as_ref()
.map(ToString::to_string)
.unwrap_or_else(|| String::from("any")),
.filter(|x| !x.is_ssh())
.unwrap_or(&BindAddress::Any)
.to_string(),
];
if let Some(port) = destination.port {
@ -108,7 +110,7 @@ impl LaunchHandler for ManagerLaunchHandler {
.stdout(Stdio::piped())
.stderr(Stdio::piped());
debug!("Launching local to manager by spawning command: {command:?}");
debug!("Launching local server by spawning command: {command:?}");
let mut child = command.spawn()?;
let mut stdout = BufReader::new(child.stdout.take().unwrap());
@ -133,9 +135,17 @@ impl LaunchHandler for ManagerLaunchHandler {
// Ensure that the server is terminated
child.kill().await?;
// Get any remaining output from the server's stderr to use for clues
let output = &child.wait_with_output().await?;
let stderr = String::from_utf8_lossy(&output.stderr);
break Err(io::Error::new(
io::ErrorKind::UnexpectedEof,
"Missing output destination",
if stderr.trim().is_empty() {
"Missing output destination".to_string()
} else {
format!("Missing output destination due to error: {stderr}")
},
));
}

@ -1,4 +1,5 @@
use anyhow::Context;
use derive_more::IsVariant;
use distant_core::net::common::{Host, HostParseError};
use serde::{Deserialize, Serialize};
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
@ -6,7 +7,7 @@ use std::str::FromStr;
use std::{env, fmt};
/// Represents options for binding a server to an IP address.
#[derive(Clone, Debug, PartialEq, Eq)]
#[derive(Clone, Debug, PartialEq, Eq, IsVariant)]
pub enum BindAddress {
/// Should read address from `SSH_CONNECTION` environment variable, which contains four
/// space-separated values:

Loading…
Cancel
Save