From d11321e28e72f39256d73488a610e01d9528327f Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Tue, 25 Feb 2025 14:47:08 +0100 Subject: [PATCH] Fix ssh agent on flatpak and mac app store (#13324) --- .../peercred_unix_listener_stream.rs | 17 ++++------------ .../core/src/ssh_agent/peerinfo/models.rs | 4 ++++ .../desktop_native/core/src/ssh_agent/unix.rs | 20 ++++++++++++++----- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/peercred_unix_listener_stream.rs b/apps/desktop/desktop_native/core/src/ssh_agent/peercred_unix_listener_stream.rs index f0114fc08da..da9d8a54318 100644 --- a/apps/desktop/desktop_native/core/src/ssh_agent/peercred_unix_listener_stream.rs +++ b/apps/desktop/desktop_native/core/src/ssh_agent/peercred_unix_listener_stream.rs @@ -31,26 +31,17 @@ impl Stream for PeercredUnixListenerStream { Ok(peer) => match peer.pid() { Some(pid) => pid, None => { - return Poll::Ready(Some(Err(io::Error::new( - io::ErrorKind::Other, - "Failed to get peer PID", - )))); + return Poll::Ready(Some(Ok((stream, PeerInfo::unknown())))); } }, - Err(err) => { - return Poll::Ready(Some(Err(io::Error::new( - io::ErrorKind::Other, - format!("Failed to get peer credentials: {}", err), - )))); + Err(_) => { + return Poll::Ready(Some(Ok((stream, PeerInfo::unknown())))); } }; let peer_info = peerinfo::gather::get_peer_info(pid as u32); match peer_info { Ok(info) => Poll::Ready(Some(Ok((stream, info)))), - Err(err) => Poll::Ready(Some(Err(io::Error::new( - io::ErrorKind::Other, - format!("Failed to get peer info: {}", err), - )))), + Err(_) => Poll::Ready(Some(Ok((stream, PeerInfo::unknown())))), } } Poll::Ready(Err(err)) => Poll::Ready(Some(Err(err))), diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/peerinfo/models.rs b/apps/desktop/desktop_native/core/src/ssh_agent/peerinfo/models.rs index 823d912883e..9c2ee363e8f 100644 --- a/apps/desktop/desktop_native/core/src/ssh_agent/peerinfo/models.rs +++ b/apps/desktop/desktop_native/core/src/ssh_agent/peerinfo/models.rs @@ -29,4 +29,8 @@ impl PeerInfo { pub fn process_name(&self) -> &str { &self.process_name } + + pub fn unknown() -> Self { + Self::new(0, 0, "Unknown application".to_string()) + } } diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/unix.rs b/apps/desktop/desktop_native/core/src/ssh_agent/unix.rs index ae03421a425..40bc36b1b9e 100644 --- a/apps/desktop/desktop_native/core/src/ssh_agent/unix.rs +++ b/apps/desktop/desktop_native/core/src/ssh_agent/unix.rs @@ -47,11 +47,21 @@ impl BitwardenDesktopAgent { return; } }; - ssh_agent_directory - .join(".bitwarden-ssh-agent.sock") - .to_str() - .expect("Path should be valid") - .to_owned() + + let is_flatpak = std::env::var("container") == Ok("flatpak".to_string()); + if !is_flatpak { + ssh_agent_directory + .join(".bitwarden-ssh-agent.sock") + .to_str() + .expect("Path should be valid") + .to_owned() + } else { + ssh_agent_directory + .join(".var/app/com.bitwarden.desktop/data/.bitwarden-ssh-agent.sock") + .to_str() + .expect("Path should be valid") + .to_owned() + } } };