Skip to content

Commit

Permalink
Tidy up configuration files UNIX permissions
Browse files Browse the repository at this point in the history
Signed-off-by: Samuel FORESTIER <samuel+dev@forestier.app>
  • Loading branch information
HorlogeSkynet committed May 12, 2024
1 parent b747149 commit 84c259a
Showing 1 changed file with 35 additions and 1 deletion.
36 changes: 35 additions & 1 deletion libs/hbb_common/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,19 @@ pub fn load_path<T: serde::Serialize + serde::de::DeserializeOwned + Default + s

#[inline]
pub fn store_path<T: serde::Serialize>(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 {
Expand Down Expand Up @@ -2214,4 +2226,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
);
}
}
}

0 comments on commit 84c259a

Please sign in to comment.