diff --git a/src/config/network.rs b/src/config/network.rs index c217141f..53693283 100644 --- a/src/config/network.rs +++ b/src/config/network.rs @@ -600,4 +600,101 @@ mod test { Ok(()) } + + #[test] + fn test_network_config_parser_no_blank_1() -> Result<(), Error> { + let input = "auto lo\n\ + iface lo inet loopback\n\ + iface lo inet6 loopback\n\ + auto ens18\n\ + iface ens18 inet static\n\ + \taddress 192.168.20.144/20\n\ + \tgateway 192.168.16.1\n\ + # comment\n\ + iface ens20 inet static\n\ + \taddress 192.168.20.145/20\n\ + iface ens21 inet manual\n\ + iface ens22 inet manual\n"; + + let mut parser = NetworkParser::new(&input.as_bytes()[..]); + + let config = parser.parse_interfaces(None)?; + + let output = String::try_from(config)?; + + let expected = "auto lo\n\ + iface lo inet loopback\n\ + \n\ + iface lo inet6 loopback\n\ + \n\ + auto ens18\n\ + iface ens18 inet static\n\ + \taddress 192.168.20.144/20\n\ + \tgateway 192.168.16.1\n\ + #comment\n\ + \n\ + iface ens20 inet static\n\ + \taddress 192.168.20.145/20\n\ + \n\ + iface ens21 inet manual\n\ + \n\ + iface ens22 inet manual\n\ + \n"; + assert_eq!(output, expected); + + Ok(()) + } + + #[test] + fn test_network_config_parser_no_blank_2() -> Result<(), Error> { + // Adapted from bug 2926 + let input = "### Hetzner Online GmbH installimage\n\ + \n\ + source /etc/network/interfaces.d/*\n\ + \n\ + auto lo\n\ + iface lo inet loopback\n\ + iface lo inet6 loopback\n\ + \n\ + auto enp4s0\n\ + iface enp4s0 inet static\n\ + \taddress 10.10.10.10/24\n\ + \tgateway 10.10.10.1\n\ + \t# route 10.10.20.10/24 via 10.10.20.1\n\ + \tup route add -net 10.10.20.10 netmask 255.255.255.0 gw 10.10.20.1 dev enp4s0\n\ + \n\ + iface enp4s0 inet6 static\n\ + \taddress fe80::5496:35ff:fe99:5a6a/64\n\ + \tgateway fe80::1\n"; + + let mut parser = NetworkParser::new(&input.as_bytes()[..]); + + let config = parser.parse_interfaces(None)?; + + let output = String::try_from(config)?; + + let expected = "### Hetzner Online GmbH installimage\n\ + \n\ + source /etc/network/interfaces.d/*\n\ + \n\ + auto lo\n\ + iface lo inet loopback\n\ + \n\ + iface lo inet6 loopback\n\ + \n\ + auto enp4s0\n\ + iface enp4s0 inet static\n\ + \taddress 10.10.10.10/24\n\ + \tgateway 10.10.10.1\n\ + \t# route 10.10.20.10/24 via 10.10.20.1\n\ + \tup route add -net 10.10.20.10 netmask 255.255.255.0 gw 10.10.20.1 dev enp4s0\n\ + \n\ + iface enp4s0 inet6 static\n\ + \taddress fe80::5496:35ff:fe99:5a6a/64\n\ + \tgateway fe80::1\n\ + \n"; + assert_eq!(output, expected); + + Ok(()) + } } diff --git a/src/config/network/parser.rs b/src/config/network/parser.rs index 071bbcc7..a97d0f79 100644 --- a/src/config/network/parser.rs +++ b/src/config/network/parser.rs @@ -210,9 +210,7 @@ impl NetworkParser { self.eat(Token::Newline)?; continue; } - Token::Newline => break, - Token::EOF => break, - unexpected => bail!("unexpected token {:?} (expected iface attribute)", unexpected), + _ => break, } match self.peek()? {