From: Fabian Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v2 proxmox-backup] Fix #2926: parse_iface_attributes: always break on non-{attribitue, comment} token
Date: Thu, 13 Aug 2020 15:02:45 +0200 [thread overview]
Message-ID: <20200813130245.17990-1-f.ebner@proxmox.com> (raw)
There is no requirement to have at least
a blank line, attribute or comment in between two
interface definitions, e.g.
iface lo inet loopback
iface lo inet6 loopback
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---
Changes from v1:
* Add tests as Dietmar suggested
src/config/network.rs | 97 ++++++++++++++++++++++++++++++++++++
src/config/network/parser.rs | 4 +-
2 files changed, 98 insertions(+), 3 deletions(-)
diff --git a/src/config/network.rs b/src/config/network.rs
index c217141f..02d0713c 100644
--- a/src/config/network.rs
+++ b/src/config/network.rs
@@ -600,4 +600,101 @@ mod test {
Ok(())
}
+
+ #[test]
+ fn test_network_config_create_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_create_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 <R: BufRead> NetworkParser<R> {
self.eat(Token::Newline)?;
continue;
}
- Token::Newline => break,
- Token::EOF => break,
- unexpected => bail!("unexpected token {:?} (expected iface attribute)", unexpected),
+ _ => break,
}
match self.peek()? {
--
2.20.1
reply other threads:[~2020-08-13 13:03 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200813130245.17990-1-f.ebner@proxmox.com \
--to=f.ebner@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.