From 8b6204a5347d4c997dda5fc130df4970e0dd9d40 Mon Sep 17 00:00:00 2001 From: weishu Date: Sat, 10 Jun 2023 15:23:45 +0800 Subject: [PATCH] ksud: Fix su parameter parsing. close #530, close #305, close #330, close #305 --- userspace/ksud/src/ksu.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/userspace/ksud/src/ksu.rs b/userspace/ksud/src/ksu.rs index 170402cf..855cc76f 100644 --- a/userspace/ksud/src/ksu.rs +++ b/userspace/ksud/src/ksu.rs @@ -75,8 +75,21 @@ pub fn root_shell() -> Result<()> { #[cfg(unix)] pub fn root_shell() -> Result<()> { // we are root now, this was set in kernel! - let args: Vec = std::env::args().collect(); - let program = args[0].clone(); + let env_args: Vec = std::env::args().collect(); + let program = env_args[0].clone(); + let args = env_args + .iter() + .position(|arg| arg == "-c") + .map(|i| { + let rest = env_args[i + 1..].to_vec(); + let mut new_args = env_args[..i].to_vec(); + new_args.push("-c".to_string()); + if !rest.is_empty() { + new_args.push(rest.join(" ")); + } + new_args + }) + .unwrap_or_else(|| env_args.clone()); let mut opts = Options::new(); opts.optopt(