summaryrefslogtreecommitdiff
path: root/server/src/authorized_keys.rs
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2025-02-20 22:53:27 +0100
committerJoel Klinghed <the_jk@spawned.biz>2025-02-20 22:53:27 +0100
commite940d84f69e3fd627731d5d3f698d6f838797862 (patch)
tree779eefcde993e22c0a69c18a3cb6e1cb9d17aad3 /server/src/authorized_keys.rs
parentbf025b4977543a371df9dbdddfe9cc2f02f2a8d0 (diff)
WIPWIP
Diffstat (limited to 'server/src/authorized_keys.rs')
-rw-r--r--server/src/authorized_keys.rs17
1 files changed, 16 insertions, 1 deletions
diff --git a/server/src/authorized_keys.rs b/server/src/authorized_keys.rs
index 21651ef..81885b3 100644
--- a/server/src/authorized_keys.rs
+++ b/server/src/authorized_keys.rs
@@ -1,9 +1,11 @@
use futures::stream::TryStreamExt;
+use log::{error, info};
use rocket::fairing::{self, AdHoc};
use rocket::serde::Deserialize;
use rocket::{Build, Rocket};
use rocket_db_pools::{sqlx, Database};
use std::borrow::Cow;
+use std::os::unix::fs::MetadataExt;
use std::path::{Path, PathBuf};
use std::sync::Mutex;
use tokio::fs;
@@ -86,8 +88,18 @@ impl AuthorizedKeys {
let tmp = path.with_extension("new");
fs::write(&tmp, content.as_bytes()).await?;
+ if let Ok(metadata) = fs::metadata(path).await {
+ // Try to replicate ownership and permissions of original file
+ fs::set_permissions(&tmp, metadata.permissions())
+ .await
+ .unwrap_or(());
+ std::os::unix::fs::chown(&tmp, Some(metadata.uid()), Some(metadata.gid()))
+ .unwrap_or(());
+ }
fs::rename(tmp, path).await?;
+ info!("Updated {path:?}, {} keys", keys.len());
+
Ok(())
}
}
@@ -127,7 +139,10 @@ async fn setup_users(rocket: Rocket<Build>) -> fairing::Result {
Some(roots) => match Db::fetch(&rocket) {
Some(db) => match setup_users_keys(roots, config, db).await {
Ok(_) => Ok(rocket),
- Err(_) => Err(rocket),
+ Err(e) => {
+ error!("{e:?}");
+ Err(rocket)
+ }
},
None => Err(rocket),
},