From c79d031fe77582068a2176f6e9593dafee65aab1 Mon Sep 17 00:00:00 2001 From: cyber-sushi Date: Thu, 23 May 2024 05:19:21 +0200 Subject: [PATCH] Don't double fork command when running as systemd service since it's not necessary --- src/event_reader.rs | 63 ++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/src/event_reader.rs b/src/event_reader.rs index 4c61308..4f1c5b5 100644 --- a/src/event_reader.rs +++ b/src/event_reader.rs @@ -477,36 +477,39 @@ impl EventReader { }; if let Some(user) = user { for command in command_list { - let cmd = if running_as_root { - let cmd = format!("runuser {} -c '{}'", user, command); - cmd - } - else { - let cmd = format!("systemd-run --user -M {}@ {}", user, command); - cmd - }; - match fork() { - Ok(Fork::Child) => { - match fork() { - Ok(Fork::Child) => { - setsid().unwrap(); - Command::new("sh") - .arg("-c") - .arg(cmd) - .stdin(Stdio::null()) - .stdout(Stdio::null()) - .stderr(Stdio::null()) - .spawn() - .unwrap(); - std::process::exit(0); - } - Ok(Fork::Parent(_)) => std::process::exit(0), - Err(_) => std::process::exit(1), - } - } - Ok(Fork::Parent(_)) => (), - Err(_) => std::process::exit(1), - } + if running_as_root { + match fork() { + Ok(Fork::Child) => { + match fork() { + Ok(Fork::Child) => { + setsid().unwrap(); + Command::new("sh") + .arg("-c") + .arg(format!("runuser {} -c '{}'", user, command)) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .spawn() + .unwrap(); + std::process::exit(0); + } + Ok(Fork::Parent(_)) => std::process::exit(0), + Err(_) => std::process::exit(1), + } + } + Ok(Fork::Parent(_)) => (), + Err(_) => std::process::exit(1), + } + } else { + Command::new("sh") + .arg("-c") + .arg(format!("systemd-run --user -M {}@ {}", user, command)) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .spawn() + .unwrap(); + } } } }