From c7369246ad3b339be9607f7018f8764ee320bd20 Mon Sep 17 00:00:00 2001 From: Lia Lenckowski Date: Tue, 13 Aug 2024 21:09:22 +0200 Subject: sync hosts more safely; refactor: split off config --- src/daemon_network.rs | 64 ++++++++++++++++++--------------------------------- 1 file changed, 23 insertions(+), 41 deletions(-) (limited to 'src/daemon_network.rs') diff --git a/src/daemon_network.rs b/src/daemon_network.rs index 895e409..97349c8 100644 --- a/src/daemon_network.rs +++ b/src/daemon_network.rs @@ -1,29 +1,26 @@ -use atomic_write_file::AtomicWriteFile; use defguard_wireguard_rs::{ - host::Peer, key::Key, net::IpAddrMask, InterfaceConfiguration, WGApi, WireguardInterfaceApi, + host::Peer, key::Key, InterfaceConfiguration, WGApi, WireguardInterfaceApi, }; -use log::{debug, error, info, warn}; +//use log::{debug, error, info, warn}; use std::{ collections::{BTreeSet, HashMap}, - io::Write, net::ToSocketAddrs, sync::Arc, }; -use tokio::{ - net::TcpListener, - sync::{broadcast, RwLock}, -}; +use tokio::{net::TcpListener, sync::RwLock}; use crate::daemon::*; +use crate::daemon_config::*; pub async fn add_network( - hostfile: &mut Option<(String, BTreeSet)>, name: String, privkey: String, address: String, port: u16, peers: &HashMap, -) -> Result { +) -> Result<(WGApi, BTreeSet<(String, String)>), DaemonError> { + let mut hostname_pairs = BTreeSet::new(); + let wg = WGApi::new(name.clone(), false)?; let defguard_peers = peers .iter() @@ -59,38 +56,23 @@ pub async fn add_network( peers: defguard_peers, })?; - if let Some((hosts_str, hosts)) = hostfile { - peers - .values() - .map(|peer| { - if peer.use_hostnames { - peer.ips - .iter() - .map(|(mask, may_dom)| { - if let Some(dom) = may_dom - && hosts.insert(dom.clone()) - { - hosts_str.push_str(&format!("{}", mask.ip)); - hosts_str.push('\t'); - hosts_str.push_str(&dom); - hosts_str.push('\n'); - } - }) - .count(); - } - }) - .count(); - } - - if let Some((hosts_str, _)) = hostfile { - debug!("writing hosts file: {hosts_str}"); - - let mut f = AtomicWriteFile::open("/etc/hosts")?; - f.write(hosts_str.as_bytes())?; - f.commit()?; - } + peers + .values() + .map(|peer| { + if peer.use_hostnames { + peer.ips + .iter() + .map(|(mask, may_dom)| { + if let Some(dom) = may_dom { + hostname_pairs.insert((format!("{}", mask.ip), dom.clone())); + } + }) + .count(); + } + }) + .count(); - Ok(wg) + Ok((wg, hostname_pairs)) } pub async fn run_network( -- cgit v1.2.3-70-g09d2