Implement --no-ipv6 for addresses
This commit is contained in:
parent
aecfa365a0
commit
a9a8793767
3 changed files with 35 additions and 6 deletions
25
src/main.rs
25
src/main.rs
|
|
@ -30,7 +30,7 @@ struct ConfigOpts {
|
|||
#[clap(short, long)]
|
||||
no_dns: bool,
|
||||
|
||||
#[clap(short='4', long)]
|
||||
#[clap(short = '4', long)]
|
||||
no_ipv6: bool,
|
||||
}
|
||||
|
||||
|
|
@ -96,6 +96,13 @@ struct WireguardKeyPair {
|
|||
}
|
||||
|
||||
impl WireguardConfigData {
|
||||
fn addresses(&self) -> Result<Vec<ipnet::IpNet>, ipnet::AddrParseError> {
|
||||
self.address
|
||||
.split(',')
|
||||
.map(|s: &str| -> Result<ipnet::IpNet, ipnet::AddrParseError> { s.trim().parse() })
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn dns(&self) -> Result<Vec<IpAddr>, AddrParseError> {
|
||||
self.dns
|
||||
.split(',')
|
||||
|
|
@ -169,12 +176,17 @@ fn write_config(
|
|||
debug!("endpoint_addr = {:?}", &endpoint_addr);
|
||||
writeln!(output, "[Interface]")?;
|
||||
writeln!(output, "PrivateKey = {}", &keys.private_key)?;
|
||||
writeln!(output, "Address = {}", &config.data.address)?;
|
||||
let addresses = config.data.addresses()?;
|
||||
let allowed_addresses = addresses
|
||||
.iter()
|
||||
.filter(|addr| addr.addr().is_ipv4() || !config_opts.no_ipv6);
|
||||
write_list(output, "Address = ", allowed_addresses)?;
|
||||
if !config_opts.no_dns {
|
||||
let dns_addrs = config.data.dns()?;
|
||||
let allowed_dns_addrs = dns_addrs.iter().filter(|addr| addr.is_ipv4() || !config_opts.no_ipv6);
|
||||
write!(output, "DNS = ")?;
|
||||
write_list(output, allowed_dns_addrs)?;
|
||||
let allowed_dns_addrs = dns_addrs
|
||||
.iter()
|
||||
.filter(|addr| addr.is_ipv4() || !config_opts.no_ipv6);
|
||||
write_list(output, "DNS = ", allowed_dns_addrs)?;
|
||||
}
|
||||
writeln!(output)?;
|
||||
|
||||
|
|
@ -186,11 +198,12 @@ fn write_config(
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn write_list<I, T>(output: &mut dyn Write, values: I) -> Result<(), std::io::Error>
|
||||
fn write_list<I, T>(output: &mut dyn Write, prefix: &str, values: I) -> Result<(), std::io::Error>
|
||||
where
|
||||
I: IntoIterator<Item = T>,
|
||||
T: std::fmt::Display,
|
||||
{
|
||||
write!(output, "{}", prefix)?;
|
||||
for (i, value) in values.into_iter().enumerate() {
|
||||
if i != 0 {
|
||||
write!(output, ", ")?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue