summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-10-31 21:27:54 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-11-04 19:40:52 +0000
commit55f5b5047161ba40f873d162b82e33ee0c943ac8 (patch)
tree7f68067a824504df844492ce8c06d8ebb6ee5eea
parente190243460b1dead2ced88ce3b2ae1d6a5499603 (diff)
downloadmullvadvpn-55f5b5047161ba40f873d162b82e33ee0c943ac8.tar.xz
mullvadvpn-55f5b5047161ba40f873d162b82e33ee0c943ac8.zip
Handle wireguard log file in the Go library
m---------dist-assets/binaries0
-rw-r--r--talpid-core/src/tunnel/mod.rs15
-rw-r--r--talpid-core/src/tunnel/wireguard/wireguard_go.rs24
3 files changed, 16 insertions, 23 deletions
diff --git a/dist-assets/binaries b/dist-assets/binaries
-Subproject 08489a83dbd30e466b9603fe5689c3028b08617
+Subproject 518786d67da146bff48a734e7a4ec452db79b67
diff --git a/talpid-core/src/tunnel/mod.rs b/talpid-core/src/tunnel/mod.rs
index d33182ddf3..6eaa77f8b8 100644
--- a/talpid-core/src/tunnel/mod.rs
+++ b/talpid-core/src/tunnel/mod.rs
@@ -221,13 +221,14 @@ impl TunnelMonitor {
log_dir: &Option<PathBuf>,
) -> Result<Option<PathBuf>> {
if let Some(ref log_dir) = log_dir {
- let filename = match parameters {
- TunnelParameters::OpenVpn(_) => OPENVPN_LOG_FILENAME,
- TunnelParameters::Wireguard(_) => WIREGUARD_LOG_FILENAME,
- };
- let tunnel_log = log_dir.join(filename);
- logging::rotate_log(&tunnel_log)?;
- Ok(Some(tunnel_log))
+ match parameters {
+ TunnelParameters::OpenVpn(_) => {
+ let tunnel_log = log_dir.join(OPENVPN_LOG_FILENAME);
+ logging::rotate_log(&tunnel_log)?;
+ Ok(Some(tunnel_log))
+ }
+ TunnelParameters::Wireguard(_) => Ok(Some(log_dir.join(WIREGUARD_LOG_FILENAME))),
+ }
} else {
Ok(None)
}
diff --git a/talpid-core/src/tunnel/wireguard/wireguard_go.rs b/talpid-core/src/tunnel/wireguard/wireguard_go.rs
index cd18e7a717..4e3b9c45fd 100644
--- a/talpid-core/src/tunnel/wireguard/wireguard_go.rs
+++ b/talpid-core/src/tunnel/wireguard/wireguard_go.rs
@@ -1,13 +1,7 @@
use super::{Config, Error, Result, Tunnel};
use crate::tunnel::tun_provider::{Tun, TunConfig, TunProvider};
use ipnetwork::IpNetwork;
-use std::{
- ffi::CString,
- fs,
- net::IpAddr,
- os::unix::io::{AsRawFd, RawFd},
- path::Path,
-};
+use std::{ffi::CString, net::IpAddr, os::unix::io::RawFd, path::Path, ptr};
#[cfg(target_os = "android")]
use talpid_types::BoxedError;
@@ -19,7 +13,6 @@ pub struct WgGoTunnel {
// holding on to the tunnel device and the log file ensures that the associated file handles
// live long enough and get closed when the tunnel is stopped
_tunnel_device: Box<dyn Tun>,
- _log_file: fs::File,
}
impl WgGoTunnel {
@@ -32,12 +25,16 @@ impl WgGoTunnel {
#[cfg_attr(not(target_os = "android"), allow(unused_mut))]
let (mut tunnel_device, tunnel_fd) = Self::get_tunnel(tun_provider, config, routes)?;
let interface_name: String = tunnel_device.interface_name().to_string();
- let log_file = prepare_log_file(log_path)?;
let wg_config_str = config.to_userspace_format();
let iface_name =
CString::new(interface_name.as_bytes()).map_err(Error::InterfaceNameError)?;
+ let log_path = log_path.and_then(|path| CString::new(path.to_string_lossy().as_ref()).ok());
+ let log_path_ptr = log_path
+ .as_ref()
+ .map(|path| path.as_ptr())
+ .unwrap_or_else(|| ptr::null());
let handle = unsafe {
wgTurnOnWithFd(
@@ -45,7 +42,7 @@ impl WgGoTunnel {
config.mtu as isize,
wg_config_str.as_ptr() as *const i8,
tunnel_fd,
- log_file.as_raw_fd(),
+ log_path_ptr as *const i8,
WG_GO_LOG_DEBUG,
)
};
@@ -66,7 +63,6 @@ impl WgGoTunnel {
interface_name,
handle: Some(handle),
_tunnel_device: tunnel_device,
- _log_file: log_file,
})
}
@@ -142,10 +138,6 @@ impl Drop for WgGoTunnel {
}
}
-fn prepare_log_file(log_path: Option<&Path>) -> Result<fs::File> {
- fs::File::create(log_path.unwrap_or("/dev/null".as_ref())).map_err(Error::PrepareLogFileError)
-}
-
impl Tunnel for WgGoTunnel {
fn get_interface_name(&self) -> &str {
&self.interface_name
@@ -180,7 +172,7 @@ extern "C" {
mtu: isize,
settings: *const i8,
fd: Fd,
- log_fd: Fd,
+ log_path: *const i8,
logLevel: WgLogLevel,
) -> i32;