git.lucas.co / cce-mail
mail client (IMAP/SMTP)
git clone https://git.lucas.co/cce-mail.git

commit65f3b42235dfa37ad0d47fa79e3bb03a88067686
parentbb6394b198
authorLucas Galante <[email protected]>
date2026-06-04 13:17
Restrict accounts directory permissions to 0700 and accounts.json permissions to 0600 on Unix systems

 src/main.rs | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/main.rs b/src/main.rs
index acae9b5..c377b57 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -134,6 +134,15 @@ fn get_accounts_path() -> std::path::PathBuf {
     let p = std::path::PathBuf::from("/home/lsgalante/.config/ccec");
     if !p.exists() {
         let _ = std::fs::create_dir_all(&p);
+        #[cfg(unix)]
+        {
+            use std::os::unix::fs::PermissionsExt;
+            if let Ok(metadata) = std::fs::metadata(&p) {
+                let mut perms = metadata.permissions();
+                perms.set_mode(0o700);
+                let _ = std::fs::set_permissions(&p, perms);
+            }
+        }
     }
     p.join("accounts.json")
 }
@@ -168,6 +177,15 @@ fn save_accounts(accounts: &[AccountInfo]) {
     let path = get_accounts_path();
     if let Ok(content) = serde_json::to_string_pretty(accounts) {
         let _ = std::fs::write(&path, content);
+        #[cfg(unix)]
+        {
+            use std::os::unix::fs::PermissionsExt;
+            if let Ok(metadata) = std::fs::metadata(&path) {
+                let mut perms = metadata.permissions();
+                perms.set_mode(0o600);
+                let _ = std::fs::set_permissions(&path, perms);
+            }
+        }
     }
 }