src/config/network.rs: write changes to interfaces.new
This commit is contained in:
		@ -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_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(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user