From e1140b1bea94e6b8bd98451470f9e2b34fbc77f7 Mon Sep 17 00:00:00 2001 From: Samuel FORESTIER Date: Thu, 27 Jun 2024 12:14:32 +0000 Subject: [PATCH] Tidy up configuration files UNIX permissions (#7983) * Add missing libpam package causing build to fail using Docker image ``` wrapper.h:1:10: fatal error: 'security/pam_appl.h' file not found ``` Signed-off-by: Samuel FORESTIER * Tidy up configuration files UNIX permissions Signed-off-by: Samuel FORESTIER --------- Signed-off-by: Samuel FORESTIER --- libs/hbb_common/src/config.rs | 36 ++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) 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 + ); + } + } }