aboutsummaryrefslogtreecommitdiffstats
path: root/src/interface
diff options
context:
space:
mode:
authorJake McGinty <me@jake.su>2018-04-03 12:39:24 -0700
committerJake McGinty <me@jake.su>2018-04-03 12:39:24 -0700
commit31f6e34c95928e56036e3bf5a818b00df65b33dd (patch)
treec17ad911026c610fc2c40733dee934cd590ad802 /src/interface
parenttools: ipv6 addr/routing support in wg-quick (diff)
downloadwireguard-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.rs6
-rw-r--r--src/interface/peer_server.rs2
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) {