summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2022-11-09 15:47:04 -0500
committerTyler Murphy <tylermurphy534@gmail.com>2022-11-09 15:47:04 -0500
commitdcd28fd14a2183c307a2073e8c39611007ed6b1a (patch)
tree7b6556922581d0f3e857bae7d555a18601edfadf
parentupdate version number in v msg (diff)
downloadcrab-dcd28fd14a2183c307a2073e8c39611007ed6b1a.tar.gz
crab-dcd28fd14a2183c307a2073e8c39611007ed6b1a.tar.bz2
crab-dcd28fd14a2183c307a2073e8c39611007ed6b1a.zip
move persist data to /var/run/crab
-rw-r--r--.gitignore1
-rw-r--r--src/persist.rs51
2 files changed, 30 insertions, 22 deletions
diff --git a/.gitignore b/.gitignore
index 96ef6c0..dc73d83 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
/target
Cargo.lock
+test.sh
diff --git a/src/persist.rs b/src/persist.rs
index febd035..68bd22e 100644
--- a/src/persist.rs
+++ b/src/persist.rs
@@ -16,7 +16,7 @@ pub fn get_persist(user: &str) -> bool {
Some(data) => data,
None => return false
};
- return now() - timestamp < PERSIST_TIME;
+ return now() - timestamp < PERSIST_TIME && timestamp < now();
}
pub fn set_persist(user: &str) {
@@ -49,26 +49,12 @@ fn get_terminal_process() -> Option<i32> {
Some(stat.session)
}
-fn is_file_root_only(id: &i32) -> bool {
- let metadata = match std::fs::metadata(path(&id)) {
- Ok(data) => data,
- Err(e) => {
- if let Some(err) = e.raw_os_error() {
- return err == 2;
- }
- return true
- }
- };
- let perms = metadata.permissions();
- return perms.mode() == 33200 && metadata.st_uid() == 0 && metadata.st_gid() == 0;
-}
-
fn get_terminal_config() -> Option<Value> {
let id = match get_terminal_process() {
Some(data) => data,
None => return None
};
- if !is_file_root_only(&id) {
+ if !is_file_root(&path(&id)) {
return None;
}
let data = match std::fs::read_to_string(path(&id)) {
@@ -83,20 +69,41 @@ fn get_terminal_config() -> Option<Value> {
}
fn write_terminal_config(id: &i32, data: &str) -> Result<(), Box<dyn std::error::Error>> {
+ std::fs::create_dir_all("/var/run/crab")?;
+ make_file_root("/var/run/crab")?;
std::fs::write(path(&id), "")?;
- unistd::chown(std::path::Path::new(&path(&id)), Some(unistd::Uid::from(0)), Some(unistd::Gid::from(0)))?;
- let metadata = std::fs::metadata(path(&id))?;
- let mut perms = metadata.permissions();
- perms.set_mode(0o660);
- fs::set_permissions(path(&id), perms)?;
+ make_file_root(&path(&id))?;
std::fs::write(path(&id), data)?;
Ok(())
}
+fn make_file_root(path: &str) -> Result<(), Box<dyn std::error::Error>> {
+ unistd::chown(std::path::Path::new(path), Some(unistd::Uid::from(0)), Some(unistd::Gid::from(0)))?;
+ let metadata = std::fs::metadata(path)?;
+ let mut perms = metadata.permissions();
+ perms.set_mode(0o100600);
+ fs::set_permissions(path, perms)?;
+ Ok(())
+}
+
+fn is_file_root(path: &str) -> bool {
+ let metadata = match std::fs::metadata(path) {
+ Ok(data) => data,
+ Err(e) => {
+ if let Some(err) = e.raw_os_error() {
+ return err == 2;
+ }
+ return true
+ }
+ };
+ let perms = metadata.permissions();
+ return perms.mode() == 0o100600 && metadata.st_uid() == 0 && metadata.st_gid() == 0;
+}
+
fn now() -> u64 {
return SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs();
}
fn path(id: &i32) -> String {
- return format!("/tmp/crab-{}", id);
+ return format!("/var/run/crab/{}", id);
}