}
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);
.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(())
}