From 6a13b27c197abeeac0d32b06d38aa2ae0f1a8b13 Mon Sep 17 00:00:00 2001 From: shimunn <> Date: Wed, 3 Apr 2019 14:07:28 +0200 Subject: [PATCH] handle last peer error case [CI SKIP] --- wg-event-gen/src/controller.rs | 18 ++++++++++++++---- wg-event-gen/src/model.rs | 4 ++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/wg-event-gen/src/controller.rs b/wg-event-gen/src/controller.rs index e7d1c6f..61430cb 100644 --- a/wg-event-gen/src/controller.rs +++ b/wg-event-gen/src/controller.rs @@ -33,9 +33,11 @@ impl WireguardController for Userspace { let value_as_num = || parse_err(value.parse::()); let mut peer: Option = None; let build_peer = |peer: &mut Option, builder: &mut PeerBuilder| -> Result<()> { - let built: Result = parse_err(builder.build()); - *peer = Some(built?); - *builder = PeerBuilder::default(); + if builder.has_key() { + let built: Result = parse_err(builder.build()); + *peer = Some(built?); + *builder = PeerBuilder::default(); + } Ok(()) }; let mut add_key = |peer: &mut Option, key: ECCKey| -> Result<()> { @@ -50,7 +52,15 @@ impl WireguardController for Userspace { match key.as_ref() { "" => { //Empty line means end of data - build_peer(&mut peer, builder); //TODO: handle possible actual error case + build_peer(&mut peer, builder).map_err(|err| { + Error::new( + ErrorKind::InvalidData, + format!( + "Protocol error, wireguard supplied insufficent data: {}", + err + ), + ) + })?; //TODO: handle possible actual error case } "public_key" => { add_key(&mut peer, parse_err(ECCKey::from_hex(value))?)?; diff --git a/wg-event-gen/src/model.rs b/wg-event-gen/src/model.rs index b3357e7..f9b4456 100644 --- a/wg-event-gen/src/model.rs +++ b/wg-event-gen/src/model.rs @@ -194,6 +194,10 @@ impl PeerBuilder { self.validate().is_ok() } + pub fn has_key(&self) -> bool { + self.key.is_some() + } + pub fn add_allowed_ip(&mut self, ip: (IpAddr, u8)) { if let Some(ref mut ips) = &mut self.allowed_ips { ips.push(ip);