aboutsummaryrefslogtreecommitdiffstats
path: root/src/files.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-31 05:28:26 +0100
committertv <tv@krebsco.de>2026-10-31 05:28:26 +0100
commitc76fd5b9b0a3bba6c8ffa847e5fc818661e800d6 (patch)
tree56441e7534fc4d25381c8d368f98d9528551f1df /src/files.rs
parent8802997e3adfe43b2e084f3695f8620fdfc36759 (diff)
move warn_if_readable_by_others to files module
Diffstat (limited to 'src/files.rs')
-rw-r--r--src/files.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/files.rs b/src/files.rs
index e27bde6..cd2f38c 100644
--- a/src/files.rs
+++ b/src/files.rs
@@ -167,6 +167,27 @@ fn sync_parent(path: &Path) {
}
}
+/// A key is a secret: a file others may read is worth a warning (not an error: a
+/// group may be deliberate, e.g. shared with a deployment tool). `what`: which key.
+pub(crate) fn warn_if_readable_by_others(path: &Path, what: &str) {
+ #[cfg(unix)]
+ {
+ use std::os::unix::fs::PermissionsExt;
+ if let Ok(metadata) = std::fs::metadata(path) {
+ let mode = metadata.permissions().mode();
+ if mode & 0o077 != 0 {
+ tracing::warn!(
+ path = %path.display(),
+ mode = format!("{:o}", mode & 0o777),
+ "The {what} file is readable by others than its owner; chmod 600 it"
+ );
+ }
+ }
+ }
+ #[cfg(not(unix))]
+ let _ = (path, what);
+}
+
fn with_suffix(path: &Path, suffix: &str) -> PathBuf {
let mut name = path.as_os_str().to_owned();
name.push(suffix);