diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index e1649ddd7..711d5af37 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -487,7 +487,19 @@ pub fn load_path(path: PathBuf, cfg: T) -> crate::ResultType<()> { - Ok(confy::store_path(path, cfg)?) + #[cfg(not(windows))] + { + use std::os::unix::fs::PermissionsExt; + Ok(confy::store_path_perms( + path, + cfg, + fs::Permissions::from_mode(0o600), + )?) + } + #[cfg(windows)] + { + Ok(confy::store_path(path, cfg)?) + } } impl Config { @@ -2471,4 +2483,26 @@ mod tests { assert_eq!(cfg, Ok(cfg_to_compare), "Failed to test wrong_field_str"); } } + + #[test] + fn test_store_load() { + let peerconfig_id = "123456789"; + let cfg: PeerConfig = Default::default(); + cfg.store(&peerconfig_id); + assert_eq!(PeerConfig::load(&peerconfig_id), cfg); + + #[cfg(not(windows))] + { + use std::os::unix::fs::PermissionsExt; + assert_eq!( + // ignore file type information by masking with 0o777 (see https://stackoverflow.com/a/50045872) + fs::metadata(PeerConfig::path(&peerconfig_id)) + .expect("reading metadata failed") + .permissions() + .mode() + & 0o777, + 0o600 + ); + } + } }