diff options
author | Jake McGinty <me@jake.su> | 2018-05-29 02:15:58 -0500 |
---|---|---|
committer | Jake McGinty <me@jake.su> | 2018-05-29 02:15:58 -0500 |
commit | 07522599f50003a00988ff5fd322b2a056845c7a (patch) | |
tree | eb320c6d82e2b164e398d9b14c05a51b20008ba6 /src | |
parent | noise: rebase snow on latest master, start removing wonk (diff) | |
download | wireguard-rs-07522599f50003a00988ff5fd322b2a056845c7a.tar.xz wireguard-rs-07522599f50003a00988ff5fd322b2a056845c7a.zip |
config: follow WG_TUN_NAME_FILE style in wg-quick
Diffstat (limited to '')
-rw-r--r-- | src/interface/config.rs | 13 | ||||
-rw-r--r-- | src/interface/mod.rs | 9 |
2 files changed, 18 insertions, 4 deletions
diff --git a/src/interface/config.rs b/src/interface/config.rs index 41762ea..5597bd8 100644 --- a/src/interface/config.rs +++ b/src/interface/config.rs @@ -4,8 +4,11 @@ // * Configuration service should use channels to report updates it receives over its interface. use std::net::SocketAddr; +use std::env; +use std::io::Write; use std::{cell::RefCell, iter::Iterator, rc::Rc, mem, str}; -use std::fs::{create_dir, remove_file}; +use std::fs::{File, Permissions, create_dir, remove_file}; +use std::os::unix::fs::PermissionsExt; use std::path::{Path, PathBuf}; use base64; @@ -146,6 +149,14 @@ pub struct ConfigurationService { impl ConfigurationService { pub fn new(interface_name: &str, state: &SharedState, peer_server_tx: mpsc::UnboundedSender<ChannelMessage>, handle: &Handle) -> Result<Self, Error> { + if let Ok(name) = env::var("WG_TUN_NAME_FILE") { + debug!("writing interface name {} to {}", interface_name, name); + let mut f = File::create(name)?; + f.set_permissions(Permissions::from_mode(0400))?; + f.write_all(interface_name.as_bytes())?; + f.write_all(b"\n")?; + } + let config_path = Self::get_path(interface_name).unwrap(); let listener = UnixListener::bind(config_path.clone(), handle).unwrap(); diff --git a/src/interface/mod.rs b/src/interface/mod.rs index d40061a..c45e70f 100644 --- a/src/interface/mod.rs +++ b/src/interface/mod.rs @@ -98,9 +98,12 @@ impl Interface { let (utun_tx, utun_rx) = unsync::mpsc::unbounded::<Vec<u8>>(); - let peer_server = PeerServer::new(core.handle(), self.state.clone(), utun_tx.clone())?; - let config_server = ConfigurationService::new(&self.name, &self.state, peer_server.tx(), &core.handle())?.map_err(|_|()); - let utun_stream = UtunStream::connect(&self.name, &core.handle())?.framed(VecUtunCodec{}); + let peer_server = PeerServer::new(core.handle(), self.state.clone(), utun_tx.clone())?; + let utun_stream = UtunStream::connect(&self.name, &core.handle())?; + let interface_name = utun_stream.name()?; + let utun_stream = utun_stream.framed(VecUtunCodec{}); + let config_server = ConfigurationService::new(&interface_name, &self.state, peer_server.tx(), &core.handle())?.map_err(|_|()); + self.name = interface_name; let (utun_writer, utun_reader) = utun_stream.split(); |