diff options
author | Jake McGinty <me@jake.su> | 2018-04-03 12:39:24 -0700 |
---|---|---|
committer | Jake McGinty <me@jake.su> | 2018-04-03 12:39:24 -0700 |
commit | 31f6e34c95928e56036e3bf5a818b00df65b33dd (patch) | |
tree | c17ad911026c610fc2c40733dee934cd590ad802 /src/interface | |
parent | tools: ipv6 addr/routing support in wg-quick (diff) | |
download | wireguard-rs-31f6e34c95928e56036e3bf5a818b00df65b33dd.tar.xz wireguard-rs-31f6e34c95928e56036e3bf5a818b00df65b33dd.zip |
config: enforce max peers per device
Diffstat (limited to 'src/interface')
-rw-r--r-- | src/interface/config.rs | 6 | ||||
-rw-r--r-- | src/interface/peer_server.rs | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/interface/config.rs b/src/interface/config.rs index 1768aaa..de24db4 100644 --- a/src/interface/config.rs +++ b/src/interface/config.rs @@ -5,6 +5,7 @@ use base64; use bytes::BytesMut; +use consts::MAX_PEERS_PER_DEVICE; use failure::{Error, err_msg}; use futures::{Async, Future, Poll, Stream, Sink, future, stream, unsync::mpsc}; use hex; @@ -261,6 +262,11 @@ impl ConfigurationService { return Ok(()) } } + + if state.pubkey_map.len() >= MAX_PEERS_PER_DEVICE { + bail!("already at max peers per device"); + } + debug!("adding new peer: {}", info); let mut peer = Peer::new(info.clone()); let peer_ref = Rc::new(RefCell::new(peer)); diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs index c0b01bc..7abce1d 100644 --- a/src/interface/peer_server.rs +++ b/src/interface/peer_server.rs @@ -101,7 +101,7 @@ impl PeerServer { } fn unused_index(state: &mut State) -> u32 { - let mut rng = rand::thread_rng(); + let mut rng = rand::thread_rng(); // TODO: cache the thread RNG for perf loop { let tentative: u32 = rng.gen(); if !state.index_map.contains_key(&tentative) { |