diff options
author | Jake McGinty <me@jake.su> | 2018-04-24 23:40:09 -0700 |
---|---|---|
committer | Jake McGinty <me@jake.su> | 2018-04-24 23:40:09 -0700 |
commit | 93b57bc36f2bdd5095993fb34eb13ebc52a51ae6 (patch) | |
tree | 04ac71c3fd97e65c950da510cc0385a2ae95c8b4 /src/interface/peer_server.rs | |
parent | global: fix up clippies (diff) | |
download | wireguard-rs-93b57bc36f2bdd5095993fb34eb13ebc52a51ae6.tar.xz wireguard-rs-93b57bc36f2bdd5095993fb34eb13ebc52a51ae6.zip |
config: allow private keys to be unset
Diffstat (limited to 'src/interface/peer_server.rs')
-rw-r--r-- | src/interface/peer_server.rs | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs index a115023..4de6eec 100644 --- a/src/interface/peer_server.rs +++ b/src/interface/peer_server.rs @@ -59,6 +59,13 @@ impl PeerServer { pub fn rebind(&mut self) -> Result<(), Error> { let interface = &self.shared_state.borrow().interface_info; + + if interface.private_key.is_none() { + self.udp = None; + self.port = None; + return Ok(()); + } + let port = interface.listen_port.unwrap_or(0); let fwmark = interface.fwmark.unwrap_or(0); @@ -412,10 +419,15 @@ impl Future for PeerServer { Ok(Async::Ready(Some(event))) => { match event { PrivateKey(_) => { - let pub_key = &self.shared_state.borrow().interface_info.pub_key.unwrap(); - self.cookie = cookie::Validator::new(pub_key); - if self.udp.is_none() { - self.rebind().unwrap(); + let pub_key = self.shared_state.borrow().interface_info.pub_key; + if let Some(ref pub_key) = pub_key { + self.cookie = cookie::Validator::new(pub_key); + if self.udp.is_none() { + self.rebind().unwrap(); + } + } else { + self.udp = None; + self.port = None; } }, ListenPort(_) => self.rebind().unwrap(), |