diff --git a/CHANGELOG.md b/CHANGELOG.md index 3631db0..4cc4902 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ This project follows [semantic versioning](http://semver.org). - [changed] Set keepalive to 120 secs when NAT is detected - [fixed] Added parameter keepalive to manpage - [fixed] Fixed problems on stats file when dropping permissions +- [fixed] Deleting files before overwriting them ### v1.1.0 (2019-12-04) diff --git a/src/beacon.rs b/src/beacon.rs index 48e7e25..6d01604 100644 --- a/src/beacon.rs +++ b/src/beacon.rs @@ -213,9 +213,13 @@ impl BeaconSerializer { pub fn write_to_file>(&self, peers: &[SocketAddr], path: P) -> Result<(), io::Error> { let beacon = self.encode(peers); debug!("Beacon: {}", beacon); - let mut f = File::create(&path)?; + let path = path.as_ref(); + if path.exists() { + fs::remove_file(path)? + } + let mut f = File::create(path)?; writeln!(&mut f, "{}", beacon)?; - fs::set_permissions(&path, Permissions::from_mode(0o644))?; + fs::set_permissions(path, Permissions::from_mode(0o444))?; Ok(()) } diff --git a/src/main.rs b/src/main.rs index 0b03f46..e619933 100644 --- a/src/main.rs +++ b/src/main.rs @@ -103,6 +103,10 @@ struct DualLogger { impl DualLogger { pub fn new>(path: Option

) -> Result { if let Some(path) = path { + let path = path.as_ref(); + if path.exists() { + fs::remove_file(path)? + } let file = File::create(path)?; Ok(DualLogger { file: Mutex::new(Some(file)) }) } else { @@ -269,6 +273,10 @@ fn run(config: Config) { let stats_file = match config.stats_file { None => None, Some(ref name) => { + let path = Path::new(name); + if path.exists() { + try_fail!(fs::remove_file(path), "Failed to remove file {}: {}", name); + } let file = try_fail!(File::create(name), "Failed to create stats file: {}"); try_fail!( fs::set_permissions(name, Permissions::from_mode(0o644)),