]> git.proxmox.com Git - proxmox-backup.git/commitdiff
src/config/network.rs: write changes to interfaces.new
authorDietmar Maurer <dietmar@proxmox.com>
Thu, 23 Apr 2020 05:19:29 +0000 (07:19 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 23 Apr 2020 05:19:29 +0000 (07:19 +0200)
src/config/network.rs

index 100f67fda56cad76405e1f8393ca9d1dcd073acc..af674bb1a9bd99b6ba1b92d9fb5e372b47db22a6 100644 (file)
@@ -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(())
 }