diff options
| author | tv <tv@krebsco.de> | 2026-10-31 05:28:26 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-31 05:28:26 +0100 |
| commit | c76fd5b9b0a3bba6c8ffa847e5fc818661e800d6 (patch) | |
| tree | 56441e7534fc4d25381c8d368f98d9528551f1df /src/files.rs | |
| parent | 8802997e3adfe43b2e084f3695f8620fdfc36759 (diff) | |
move warn_if_readable_by_others to files module
Diffstat (limited to 'src/files.rs')
| -rw-r--r-- | src/files.rs | 21 |
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); |
