From 02e36d96adb33ff32b6504ec86bc43ff80adf1b5 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Thu, 23 Apr 2020 07:19:29 +0200 Subject: [PATCH] src/config/network.rs: write changes to interfaces.new --- src/config/network.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/config/network.rs b/src/config/network.rs index 100f67fd..af674bb1 100644 --- a/src/config/network.rs +++ b/src/config/network.rs @@ -266,19 +266,27 @@ impl NetworkConfig { } pub const NETWORK_INTERFACES_FILENAME: &str = "/etc/network/interfaces"; +pub const NETWORK_INTERFACES_NEW_FILENAME: &str = "/etc/network/interfaces.new"; pub const NETWORK_LOCKFILE: &str = "/var/lock/pve-network.lck"; + pub fn config() -> Result<(NetworkConfig, [u8;32]), Error> { - let content = match std::fs::read(NETWORK_INTERFACES_FILENAME) { - Ok(c) => c, - Err(err) => { + let content = std::fs::read(NETWORK_INTERFACES_NEW_FILENAME) + .or_else(|err| { if err.kind() == std::io::ErrorKind::NotFound { - Vec::new() + std::fs::read(NETWORK_INTERFACES_FILENAME) + .or_else(|err| { + if err.kind() == std::io::ErrorKind::NotFound { + Ok(Vec::new()) + } else { + bail!("unable to read '{}' - {}", NETWORK_INTERFACES_FILENAME, err); + } + }) } else { - bail!("unable to read '{}' - {}", NETWORK_INTERFACES_FILENAME, err); + bail!("unable to read '{}' - {}", NETWORK_INTERFACES_NEW_FILENAME, err); } - } - }; + })?; + let digest = openssl::sha::sha256(&content); @@ -301,7 +309,7 @@ pub fn save_config(config: &NetworkConfig) -> Result<(), Error> { .owner(nix::unistd::ROOT) .group(nix::unistd::Gid::from_raw(0)); - replace_file(NETWORK_INTERFACES_FILENAME, &raw, options)?; + replace_file(NETWORK_INTERFACES_NEW_FILENAME, &raw, options)?; Ok(()) }